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在下面这些开发板上进行开发,后续将增加更多的硬件类型:

让本地硬件连接到云端

  1. 下载IDE Agent

首先点击IDE界面上的agent下载按钮:

image|center

IDE会根据你使用的PC操作系统自动判断下载对应的agent包,下载完毕后解压缩下载到本地的zip包。

  1. 安装开发板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: 无需另行安装

安装之后,用USB线连接开发设备到本地开发机,检查新的设备是否已经出现在系统设备列表中(Mac/Linux用户可以ls /dev检查,Windows用户通过设备管理器),确保本地PC已成功识别到新连接的开发板设备。

  1. 启动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的设备列表当中:

image|center

你可以将开发板从本地开发机USB上做插拔操作测试一下,云端IDE现在可以实时检测到本地开发机上的设备连接状态了.

例子:Hello World

可以直接访问这里,让Hacklab帮你在工作区下载好已创建好的工程代码。如果是通过这种方式而非工程创建向导初始化工程,下载好的代码使用时需要通过在helloworld工程目录上的右键菜单Import导入到工作区。

创建工程和代码

在IDE中点击新建工程(Toolbar上的➕按钮),在Create Project Wizard界面中,填写工程名helloworld,Board类型选择developerkit,OS类型使用默认的AliOS-Things:

undefined

点击Create按钮,等待工程创建完毕。

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

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

image|center

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

云端编译

image|center
按图点击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例子,参考其中云端配置部分,重新编译设置网络,让你的设备快速上云吧。

results matching ""

    No results matching ""