AliOS Things 3.3.0 第一个示例: helloworld

简介: AliOS Things 3.3.0 第一个示例: helloworld

1. 案例简介

helloworld_demo是我们提供的最简化的运行实例,该app从字面上来看功能也比较简单,即完成**hello world!**的关键字符输出,以表明系统初始化完成并能够正常输出。但是虽然功能看似简单单一,该app能够运行成功,即代码内核小系统以及基本的打印输出功能即正常运行。 其完成的主要功能包括:

  • 系统板级初始化
  • 内核基础组件初始化
  • application_start用户入口
  • 串口打印输出
  • 循环睡眠打印 该示例的运行依赖下述基本功能完成对接:
  • uart串口
  • 内核的任务和中断运行正常
  • 系统tick定时器正常运行 即helloworld_demo这个示例运行,代码系统的**任务调度**、**tick调度**以及**串口打印功能**已经OK。

2. 基础知识

2.1 基础目录结构

  1. .

  2. ├── helloworld.c # 该solution核心打印输出代码,入口**application_start**

  3. ├── k_app_config.h # 内核组件的配置开关,优先级低于**k_config.h**

  4. ├── maintask.c # 系统主任务入口处理,入口**aos_maintask**

  5. ├── Makefile # aos make编译时入口

  6. ├── package.yaml # 编译系统配置文件

  7. └── SConstruct # Makefile => Scon => aostools

2.2 基本规范

solution统一以**aos_maintask**作为入口函数,从具体单板的C入口main函数开始,通过创建一个主任务来执行,即aos_maintask是系统主任务的入口函数:

  1. static void aos_main_task_entry(void)

  2. {

  3. ......

  4. aos_maintask();

  5. }

  6. /* main一般为单板的C程序入口 */

  7. int main(void)

  8. {

  9. ......

  10. krhino_task_dyn_create(&g_main_task, "main_task", 0, OS_MAIN_TASK_PRI, 0, OS_MAIN_TASK_STACK, (task_entry_t)aos_main_task_entry, 1);

  11. while (1) {

  12. krhino_task_sleep(100);

  13. }

  14. }

aos_maintask内实现包括板级初始化**board_init**、基础组件初始化**aos_components_init**、以及app入口**application_start**

  1. /* For user config

  2. kinit.argc = 0;

  3. kinit.argv = NULL;

  4. kinit.cli_enable = 1;

  5. */

  6. static kinit_t kinit = {0, NULL, 1};

  7. void board_init(void)

  8. {

  9. board_tick_init(); // tick板级初始化,实现在具体board目录内

  10. board_stduart_init(); // uart串口初始化,实现在具体board目录内

  11. board_dma_init(); // 如果使用dma相关初始化,没有置空

  12. board_gpio_init(); // gpio的时钟等初始化,没有可置空

  13. }

  14. void aos_maintask(void* arg)

  15. {

  16. board_init();

  17. board_kinit_init(&kinit); // 给系统参数赋值,可使用默认值

  18. aos_components_init(&kinit); // 系统基础组件的初始化

  19. #ifndef AOS_BINS

  20. application_start(kinit.argc, kinit.argv); // app的实际实现入口

  21. #endif

  22. }

其中为了统一不同单板的板级初始化,新增单板需要统一支持board_init内各板级模块初始化,如果没有相关函数可以实现为空; 对于helloworld功能比较简单,一般需要tick和uart的初始化即可;而对于复杂的app,即需要初始化的模块则按照实际情况来增加,对应实现在具体board中添加,如:

  1. void board_stduart_init(void)

  2. void board_tick_init(void)

  3. void board_flash_init(void)

  4. void board_network_init(void)

  5. void board_gpio_init(void)

  6. void board_wdg_init(void)

  7. void board_ota_init(void)

  8. void board_dma_init(void)

对于aos_components_init,其完成了一些基础组件如vfs、cli、kv等基础中间件的初始化,并通过组件宏开关,一旦相应该基础组件模块被加入编译,则aos_components_init即进行相关模块的初始化。 application_start是实际solution的实现,即app的统一入口。

2.3 基本运行流程

![image.png](https://ucc.alicdn.com/pic/developer-ecology/db6cf19a40674c48ad40b00b6f7a518d.png)

3. 物料清单

3.1 HaaS100 硬件


4. 案例实现

4.1 硬件连接

该案例只需要连接电源线以及串口线,如下图所示:

4.2 软件实现

application_start实际app入口内实现较简单,主要包括:

  • 基本的串口打印
  • while循环睡眠10S打印计数 代码如下:

    1. int application_start(int argc, char *argv[])

    2. {

    3. int count = 0;

    4. printf("nano entry here!\r\n");

    5. while(1) {

    6. printf("hello world! count %d \r\n", count++);

    7. aos_msleep(10000);

    8. };

    9. }

    其中系统能够正常打印代表uart功能正常;能够循环1S打印代表tick中断以及任务切换功能正常。

4.3 编译下载

开发环境的搭建请参考 HaaS100_Quick_Start (搭建开发环境章节),其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。

helloworld_demo的代码下载请参考 HaaS100_Quick_Start (创建工程章节),

*> 选择解决方案: “helloworld简单示例”*

*> 选择开发板: Haas100 board configure*

– 参考 HaaS100_Quick_Start (3.1 编译工程章节),点击 ✅ 即可完成编译固件。

– 参考 HaaS100_Quick_Start (3.2 烧录镜像章节),点击 "⚡️" 即可完成烧录固件。

4.4 串口输出效果

  1. Welcome to AliOS Things

  2. nano entry here!

  3. hello world! count 0

  4. hello world! count 1

  5. hello world! count 2

  6. hello world! count 3

  7. hello world! count 4

  8. hello world! count 5

  9. hello world! count 6

5 添加新组件

helloworld_demo作为一个基础组件,其本身依赖的组件相对较少,主要包括内核基础代码、cli以及单板和mcu相关的组件。 用户可以基于此solution作为参考,来开发属于自己的app。 如期望在helloworld_demo中增加ramfs文件系统的组件功能,操作步骤如下:

5.1 yaml增加组件

  • 在helloworld_demo的yaml文件中添加组件依赖ramfs。由于需要使用标准vfs接口,因此还需要加上vfs组件。

    1. depends:

    2. - ramfs: rel_3.3.0

    3. - vfs: rel_3.3.0

    至于ramfs本身依赖的组件,则在ramfs自身的yaml中需要添加完全。
  • 在helloworld_demo的app入口helloworld.c中添加ramfs头文件引用以及初始化函数调用, 如下图,先注册一个根目录为**/test**的ramfs:

  • 添加功能调用 示例:

    1. #include

    2. #include

    3. #include

    4. #include "ramfs.h"

    5. int fd;

    6. int ret;

    7. char teststring = "1234";

    8. char readbuf[10];

    9. ramfs_register("/test");

    10. fd = open("/test/file1", O_RDWR);

    11. if(fd < 0){

    12. printf("ramfs open fail!\r\n");

    13. return fd;

    14. }

    15. ret = write(fd, teststring, 5);

    16. if(ret < 0){

    17. printf("ramfs write fail!\r\n");

    18. return ret;

    19. }

    20. lseek(fd, 0, SEEK_SET);

    21. ret = read(fd, readbuf, 5);

    22. if(ret < 0){

    23. printf("ramfs read fail!\r\n");

    24. return ret;

    25. }

    26. if(strncmp(readbuf, teststring, 5)){

    27. printf("ramfs test fail! readbuf:%s\r\n",readbuf);

    28. }else{

    29. printf("ramfs test success!\r\n");

    30. }

    31. ramfs_unregister("/test");

    由于使用了标准文件系统的O_RDWR相关定义,需要包含::include "fcntl.h"
  • 编译、运行
  1. aos make helloworld_demo@haas100 -c config

  2. aos make

运行效果:

  1. Welcome to AliOS Things

  2. nano entry here!

  3. ramfs test success!

  4. hello world! count 0

  5. hello world! count 1

  6. hello world! count 2

  7. hello world! count 3

6. 总结

helloworld_demo虽然代码较少,但是其完成了一个最小系统需要的基本功能,包括:内核启动、任务切换、tick中断,以及串口输出。一般作为单板移植的基本solution来参考对接; 同时,还可以此solution为基础,开始添加用户需要的其他组件,并定制修改自身需要的APP。

开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

相关文章
|
物联网 Linux
【AliOS Things学习笔记】为你的AliOS Things应用增加自定义cli命令
怎么才能在RTOS系统中,通过 串口shell控制LED的开关。
4006 0
|
AliOS-Things 物联网 编译器
使用HaaS Studio开发AliOS Things C/C++应用
本文章将介绍使用HaaS Studio 进行AliOS-Things C/C++应用开发。
使用HaaS Studio开发AliOS Things C/C++应用
|
传感器 监控 算法
使用AliOS Things快速构建温度计应用 |《AliOS Things快速开发指南》
本文是基于AliOS Things 3.1快速构建温度计的应用场景。涉及AliOS Things组件开发,构建AliOS Things用户项目,AliOS Things HAL API使用,向AliOS Things中添加并使用组件。用到的硬件设备有半导体开发板、温度传感器、数码管显示器。
使用AliOS Things快速构建温度计应用 |《AliOS Things快速开发指南》
|
物联网 机器人 AliOS-Things
|
域名解析 移动开发 数据可视化
使用 AliOS Things 3.0 快速构建用户应用 BlinkAPP
AliOS Things 3.0版本于去年9月份在云栖大会正式发布,在新版本中带来了全新的应用开发框架,帮助用户快速构建自己的应用。使用户可以更专注于自身应用的开发。本文将已BlinkAPP为例,为大家演示如何快速使用应用开发框创建项目并完成应用代码编写。
1292 0
使用 AliOS Things 3.0 快速构建用户应用 BlinkAPP
|
物联网 传感器 API
AliOS Things 3.0应用笔记:http client简单应用
AliOS Things 3.0版本新增加了httpc组件(http 客户端组件),httpc组件支持多种RESTful的API调用,包括GET、POST、PUT、HEAD等,也支持https安全协议。
12797 1
|
物联网 C++
使用AliOS Things 3.0快速构建用户应用 BlinkAPP
AliOS Things 3.0版本于9月27日在云栖大会正式发布,在新版本中带来了全新的应用开发框架,帮助用户快速构建自己的应用。使用户可以更专注于自身应用的开发。本文将已BlinkAPP为例,为大家演示如何快速使用应用开发框创建项目并完成应用代码编写。
7492 0
|
缓存 算法 物联网
AliOS Things声源定位应用演示
1. 概述 利用麦克风阵列进行声源定位在智能降噪、语音增强、语音识别等领域有广泛应用和研究前景。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现声源定位算法集成和功能演示。
4767 0
|
传感器 物联网
AliOS Things手势识别应用演示
1. 概述 手势识别作为一种辅助的人机交互方式,在人机脱离的场景下可以提供方便的交互体验。本文介绍基于AliOS Things + STM32F413H Discovery开发板实现手势交互功能的演示。
3365 0
|
传感器 移动开发 物联网
AliOS Things 3.0应用笔记:http client简单应用
AliOS Things 3.0版本于9月27日在云栖大会正式发布,在新版本中带来了全新的应用开发框架,帮助用户快速构建自己的应用。使用户可以更专注于自身应用的开发。 本示例是基于AliOS Things 3.0应用开发框架做的一个简单的http client应用,通过http API请求获取当前的天气信息。
4841 0

热门文章

最新文章