Hello World
更新时间:2018-11-27 16:07:48
简介
本例子使用Hacklab将一个简单的Hello World程序烧写运行到AliOS-Things开发板上。
准备工作
一个阿里云账号,新用户可以在阿里云免费注册。
一台装有浏览器的开发PC,请使用Chrome浏览器。
一块支持AliOS-Things的开发板,以及对应的USB开发板连接线(micro-USB或mini-USB,取决于开发板的接口)。
Hacklab目前支持使用AliOS-Things在下面这些开发板上进行开发,后续将增加更多的硬件类型:
STM32F412 Nucleo-144
STM32L476 Nucleo-64
TI LaunchPadkit MSP-EXP432P4111
让本地硬件连接到云端
- 下载IDE Agent
首先点击IDE界面上的agent下载按钮:
IDE会根据你使用的PC操作系统自动判断下载对应的agent包,下载完毕后解压缩下载到本地的zip包。
- 安装开发板USB转串口的驱动程序
物理开发板首先需要连接到本地的开发机,之后才能通过IDE agent连接到云端,部分开发板可能在特定OS上不需要单独另行安装驱动。为了方便开发者使用,对于已经支持的开发板,IDE agent中的附带了需要的驱动程序,例如在IDE agent解压后的tools目录中可以找到cp210x的串口驱动程序:
- Mac:
tools/driver/cp210x/SiLabsuSBDriverDisk.zip
- Windows:
tools/driver/cp210x/CP210x_Windows_Drivers.zip
- Linux: 无需另行安装
- Mac:
安装之后,用USB线连接开发设备到本地开发机,检查新的设备是否已经出现在系统设备列表中(Mac/Linux用户可以ls /dev
检查,Windows用户通过设备管理器),确保本地PC已成功识别到新连接的开发板设备。
启动IDE Agent
执行IDE agent时的当前工作目录应当为IDE agent解压后的根目录
Linux/Mac用户:在Terminal中执行
$ cd <agent path> # Mac $ ./run-mac.sh # Linux上为了访问硬件,可能需要以sudo权限运行该脚本 $ ./run-linux.sh
Windows用户:
cd <agent path> .\run-win.bat
如果提示是否允许IDE agent访问网络,或者有杀毒软件提示是否允许运行,请选择允许选项。如果是老版本的IDE agent(没有run-win.bat),请直接双击打开agent目录下的
hacklab-device-agent.exe
,旧版本Agent在Windows上不是很稳定,使用旧版本Agent的用户请尽早更新到新版本。
Hacklab agent运行成功后,点击查看Web IDE文件树上的Device节点,如下图,你应该可以看到你的开发板已经显示在IDE的设备列表当中:
你可以将开发板从本地开发机USB上做插拔操作测试一下,云端IDE现在可以实时检测到本地开发机上的设备连接状态了.
例子:Hello World
可以直接访问这里,让Hacklab帮你在工作区下载好已创建好的工程代码。如果是通过这种方式而非工程创建向导初始化工程,下载好的代码使用时需要通过在helloworld工程目录上的右键菜单
Import
导入到工作区。
创建工程和代码
在IDE中点击新建工程(Toolbar上的➕按钮),在Create Project Wizard界面中,填写工程名helloworld
,Board类型选择developerkit
,OS类型使用默认的AliOS-Things
:
点击Create按钮,等待工程创建完毕。
工程名以字母、数字或者下划线开头,后面可使用字母、数字、下划线或者连接线,长度最长不超过64个字符。
工程创建完成后,在左侧的文件树中出现了helloworld
工程:
打开该工程,可以在IDE中浏览本例子程序代码,本例子主要代码位于helloworld/device/AliOS-Things/example/helloworld/helloworld.c
中。这个例子程序通过调用AliOS Things系统提供的aos_post_delayed_action
函数,每隔给定的时间就输出带helloworld信息的字符串,以及函数名和行号信息。
#include <aos/aos.h>
static void app_delayed_action(void *arg)
{
LOG("helloworld %s:%d %s\r\n", __func__, __LINE__, aos_task_name());
aos_post_delayed_action(5000, app_delayed_action, NULL);
}
int application_start(int argc, char *argv[])
{
LOG("application started.");
aos_post_delayed_action(1000, app_delayed_action, NULL);
aos_loop_run();
return 0;
}
Hacklab中目前使用的工程模板基于AliOS Things github代码developer分支,如果需要自己特定的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@starterkit"
}
],
"debug": {
...
},
"downloadConfigs": {
"osType": "aos",
"boardType": "starterkit",
"imageFiles": [
"device/AliOS-Things/out/helloworld@starterkit/binary/helloworld@starterkit.bin"
]
}
}
如果要将helloworld
替换成另外一个例子中的app,例如ldapp
,那么通过Hacklab Edit菜单中的Find选项,会在Terminal 下方打开搜索替换窗口,通过Replace All
将module.json中所有的helloworld
全部替换成ldapp
,重新编译烧写即可。
因此熟悉AliOS Things目录结构的开发者,可以将工程名起成自己需要的名称,然后在example目录中后续增加实际的app后再进行编译烧写操作也是可以的。
云端编译
按图点击Build工具栏按钮,选择helloworld
工程,IDE中会根据你选择的设备类型自动开始编译过程,编译结束可以看到terminal中输出如下:
Making helloworld@developerkit.bin
Making helloworld@developerkit.hex
AOS MEMORY MAP
|=================================================================|
| MODULE | ROM | RAM |
|=================================================================|
| newlib_stub | 415 | 0 |
| libgcc | 3136 | 0 |
| sal | 9847 | 250 |
| helloworld | 137 | 0 |
| log | 424 | 20 |
| device_sal_mk3060 | 7873 | 265 |
| libc_nano | 14571 | 464 |
| vcall | 3514 | 4 |
| stm32l4xx_cube | 8521 | 7700 |
| cli | 5386 | 481 |
| kernel_init | 645 | 36 |
| yloop | 1333 | 24 |
| hal | 156 | 8 |
| rhino | 12647 | 7629 |
| atparser | 4791 | 21 |
| vfs | 1881 | 1209 |
| armv7m | 392 | 0 |
| *fill* | 105 | 1585 |
|=================================================================|
| TOTAL (bytes) | 78247 | 19956 |
|=================================================================|
Build complete
Making .gdbinit
新建的工程中默认编译AliOS Things中的
helloworld
例子代码,如果需要切换到AliOS Things example目录中其他例子或者自己新增加的app例子,请打开编辑device
目录中的module.json
文件,将其中所有的helloworld
字段更换为自己app的名字,然后通过File菜单保存(也可通过快捷键Command/Ctrl+S保存)后开始后续的编译过程。
在设备上烧写、运行
类似Build过程,选择Run菜单下的helloworld
工程,将自动开始烧写过程,烧写完毕后,开发板重启会运行刚刚烧写的程序。
烧写完毕,关闭烧写Terminal,从文件树Device上双击开发板节点会自动打开日志Terminal,你可以在该Terminal中看到类似下面的Log输出信息:
[001030]<V> helloworld app_delayed_action:9 aos-init
[006040]<V> helloworld app_delayed_action:9 aos-init
[011050]<V> helloworld app_delayed_action:9 aos-init
现在你可以修改一下例子代码中的输出字符串,或者修改delay的时间,重新执行编译和运行过程,观察程序的行为变化。另外在AliOS-Things设备上,日志窗口输入回车键后也可作为板子的命令行输入,最新的IDE版本中已经分离了Flash过程中PC上的日志和设备重新启动后设备自身的日志输出。
TI LaunchPadkit MSP-EXP432P4111开发板烧写需要下载云端编译的镜像到本地后,使用厂商提供的工具。
下一步
接下来,你可以尝试修改编译配置,运行simple_mqtt
例子,参考其中云端配置部分,重新编译设置网络,让你的设备快速上云吧。