1.2.2 AliOS Things - helloworld用例

优质
小牛编辑
136浏览
2023-12-01

更新时间: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系列开发板的在线烧写:

IDE 0.10.0版本中包含的AliOS-Things 2.1.0不包括对AliOSDeveloperkit开发板的支持,可以使用其他AliOS-Things分支代码。

首先请参考Device Agent文档完成Device Agent的启动和设备连接到云端IDE工作,之后可以开始开发下面的例子。

例子:Hello World

创建工程和代码

使用菜单 File->Create Project。

image|center

输入Name:helloworld,Board可以输入自己使用的STM32开发板的关键字,然后从列表选择(截图例子使用的是ST Nucleo F412ZG开发板),Framework选择AliOS-Things,点击Create按钮,等待工程创建完毕。

工程名以字母、数字或者下划线开头,后面可使用字母、数字、下划线或者连接线,长度最长不超过64个字符。

工程创建完成后,在左侧的文件树中出现了helloworld工程:

image|center

打开该工程,可以在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后再进行编译烧写操作也是可以的。

云端编译

image|center

按图点击工具栏上的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

在设备上烧写、运行

image|center

将开发设备连接好,Device View中确认该设备已经成功连接到IDE后,类似前面的Build过程,选择工具栏上的Run按钮,将自动开始烧写过程,烧写完毕后,开发板重启会运行刚刚烧写的程序。

烧写完毕,关闭烧写Terminal窗口,打开Device View,并点击蓝色的设备串口名打开串口日志Terminal,你可以在该Terminal中看到Log输出信息::

log

现在你可以修改一下例子代码中的输出字符串,或者修改delay的时间,重新执行编译和运行过程,观察程序的行为变化。另外在AliOS-Things设备上,日志窗口输入回车键后也可作为板子的命令行输入。