1.2.2 AliOS Things - helloworld用例
更新时间:2019-04-16 16:51:35
简介
本例子使用Hacklab将一个简单的Hello World程序烧写运行到支持AliOS-Things的STM32系列开发板上。
准备工作
一个阿里云账号,新用户可以在阿里云免费注册。
一台装有浏览器的开发PC,请使用Chrome浏览器。
一块支持AliOS-Things的STM32系列开发板,以及对应的USB开发板连接线(micro-USB或mini-USB,取决于开发板的接口)。
Hacklab支持各种硬件平台上的AliOS-Things编译,并且支持以下STM32系列开发板的在线烧写:
ST Nucleo F412ZG
ST Nucleo L476RG
IDE 0.10.0版本中包含的AliOS-Things 2.1.0不包括对AliOSDeveloperkit开发板的支持,可以使用其他AliOS-Things分支代码。
首先请参考Device Agent文档完成Device Agent的启动和设备连接到云端IDE工作,之后可以开始开发下面的例子。
例子:Hello World
创建工程和代码
使用菜单 File->Create Project。
输入Name:helloworld,Board可以输入自己使用的STM32开发板的关键字,然后从列表选择(截图例子使用的是ST Nucleo F412ZG开发板),Framework选择AliOS-Things,点击Create按钮,等待工程创建完毕。
工程名以字母、数字或者下划线开头,后面可使用字母、数字、下划线或者连接线,长度最长不超过64个字符。
工程创建完成后,在左侧的文件树中出现了helloworld
工程:
打开该工程,可以在IDE中浏览本例子程序代码,本例子主要代码位于helloworld/device/AliOS-Things/example/helloworld/helloworld.c
中。这个例子程序通过调用AliOS Things系统提供的aos_post_delayed_action
函数,每隔给定的时间就输出带helloworld信息的字符串,以及函数名和行号信息。
#include <stdio.h>
#include <aos/kernel.h>
int application_start(int argc, char *argv[])
{
int count = 0;
printf("nano entry here!rn");
while(1) {
printf("hello world! count %d rn", count++);
aos_msleep(1000);
};
}
Hacklab中目前使用的工程模板基于AliOS Things 2.1.0 release的代码,如果需要自己所需版本的AliOS Things代码,可以将
device
目录中的AliOS-Things
目录替换为自己的代码库即可。
修改AliOS Things编译目标App
Hacklab为了能让不熟悉AliOS Things的开发者在第一次创建工程时,成功完成编译和烧写,因此创建的AliOS Things工程默认编译Hello World例子(用户的工程名默认会作为编译的目标app名,如果这个名字在AliOS Things的example
目录中不存在,编译会失败)。
编译和烧写app的配置信息存储在<project-path>/device/module.json
文件中,例如下面是starterkit开发板上helloworld
app对应的编译烧写配置:
{
"type": "device",
"build": [
{
"relativeDir": "AliOS-Things",
"cmd": "aos make helloworld@stm32f412zg-nucleo -c config"
},
{
"relativeDir": "AliOS-Things",
"cmd": "aos make"
}
],
"downloadConfigs": {
"osType": "aos",
"boardType": "stm32f412zg-nucleo",
"imageFiles": [
"device/AliOS-Things/out/helloworld@stm32f412zg-nucleo/binary/helloworld@stm32f412zg-nucleo.bin"
],
"append": [
]
}
}
如果要将helloworld
替换成另外一个例子中的app,例如ldapp
,那么通过Hacklab Edit菜单中的Find选项,将module.json中所有的helloworld
全部替换成ldapp
,重新编译烧写即可。
熟悉AliOS Things目录结构的开发者,可以将工程名起成自己需要的名称,然后在example目录中后续增加实际的app后再进行编译烧写操作也是可以的。
云端编译
按图点击工具栏上的Build按钮,IDE中会根据你选择的设备类型自动开始编译过程,编译结束可以看到terminal中输出如下:
Making helloworld@stm32f412zg-nucleo.bin
Making helloworld@stm32f412zg-nucleo.hex
AOS MEMORY MAP
|=================================================================|
| MODULE | ROM | RAM |
|=================================================================|
| arch_armv7m | 288 | 0 |
| atparser | 2414 | 221 |
| board_stm32f412zg-nucleo | 1975 | 668 |
| debug | 1616 | 0 |
| device_sal_mk3060 | 2553 | 156 |
| helloworld | 83 | 0 |
| kernel_init | 102 | 0 |
| kv | 1757 | 32 |
| libc_nano | 14244 | 464 |
| libgcc | 3280 | 0 |
| mcu_stm32f4xx_cube | 11186 | 7401 |
| netmgr | 20 | 8 |
| newlib_stub | 308 | 0 |
| osal_aos | 652 | 0 |
| rhino | 11412 | 8471 |
| ulog | 224 | 6 |
| vfs | 972 | 1105 |
| yloop | 1197 | 32 |
| *fill* | 85 | 1568 |
|=================================================================|
| TOTAL (bytes) | 54368 | 20132 |
|=================================================================|
55480
8a88755c75a5b9f1d7d31c5daeff85ab
Build complete: helloworld@stm32f412zg-nucleo
在设备上烧写、运行
将开发设备连接好,Device View中确认该设备已经成功连接到IDE后,类似前面的Build过程,选择工具栏上的Run按钮,将自动开始烧写过程,烧写完毕后,开发板重启会运行刚刚烧写的程序。
烧写完毕,关闭烧写Terminal窗口,打开Device View,并点击蓝色的设备串口名打开串口日志Terminal,你可以在该Terminal中看到Log输出信息::
现在你可以修改一下例子代码中的输出字符串,或者修改delay的时间,重新执行编译和运行过程,观察程序的行为变化。另外在AliOS-Things设备上,日志窗口输入回车键后也可作为板子的命令行输入。