• 物联网工程师开发服务平台

第一个MiCO应用程序

本文介绍如何将第一个 MiCO 应用程序跑起来。即:如何借助 mico-cube 工具 和 MiCoder IDE 进行 MiCO 应用程序:Helloworld 工程获取,编译,下载,运行与调试。

硬件准备

1.硬件清单

list

  1. 原 MiCOKit 或者 最新 MXKit 开发板 1 套(本文以 MiCOKit-3165 为例,开发板详细信息可参考:运行MiCO的开发板
  2. JLink V8或V9, 或 STlink 仿真器 1 套;(JLink 支持 MiCO 所有硬件平台,STlink 仅支持模块:EMW3162,3165,3166 和 3239)
  3. Micro-USB 连接线 1 根。(用于查看调试UART串口 log 信息)
  4. USB转UART 串口模块 1 个。(用于查看用户UART串口 log 信息)

2.硬件连接

  1. 连接调试串口: 将 MiCOKit-3165 开发板通过 Micro-USB 线连接至 PC,以为开发板提供电源和连接调试串口,即:

    用户PC端USB口 ————> Micro USB 串口线 ————> 开发板

  2. 连接仿真器:将开发板的 JTAG 口通过 JLink 或 STLink (仅针对 ST 芯片) 仿真器,连接至 PC,即:

    用户PC端USB口 —————> USB线 —————> 仿真器 —————> JTAG 排线 —————> 开发板

  3. 连接USB转串口模块: 若需要 查看用户串口 log,需将 PC 端通过USB转串口模块,连接到开发板的用户串口管脚,即:

    用户PC端USB口 —————> USB转串口模块 ————> TX,RX串口线 ————> 开发板

软件准备

1.安装MiCO Cube

首先,您的 PC 端需要:

1) 安装 Python,要求版本:2.7.13。

安装过程中需要注意:

Python 的可执行文件目录 (Python) 需要添加到系统的 PATH 环境变量中,在 Python 安装时指定,Windows 系统中如下图。

MiCoder_IDE

确认安装好 Python 后,找到 Python 的安装目录,接着找到 pip.exe,一般而言它会在Scripts文件夹下,这里选择的是pip2.7.exe,如图。

MiCoder_IDE

接下来,win+r,输入cmd,回车打开系统命令行工具,将pip2.7.exe拖动至命令提示符窗口,出现如下代码,然后回车。

MiCoder_IDE

至此,Python 2.7.13 安装完毕。可在终端上输入命令:python --version 来验证Python是否正确安装,如下:

python --version
Python 2.7.13 

2) 安装 Git,要求版本:1.9.5及以上;或安装 Mercurial ,要求版本:2.2.2及以上。可在终端上输入命令:git --version ,来验证Git是否正确安装,如下:

git --version
git version 2.11.0 (Apple Git-81)

3)下载 MiCoder Tools要求版本:1.1及以上,并解压。

以上3点准备完毕,您就可以打开终端,输入指令安装 MiCO Cube 啦。

1) 安装MiCO-Cube

打开系统命令行工具,输入指令如下:

$ pip install mico-cube
Collecting mico-cube
  Downloading mico-cube-1.0.6.tar.gz
Installing collected packages: mico-cube
  Running setup.py install for mico-cube ... done
Successfully installed mico-cube-1.0.6

注意:在Linux和macOS上, 需要加上sudo获得安装权限。

2) 升级MiCO-Cube

MiCO Cube 安装完成后,您还可以通过指令升级MiCO Cube的版本。

$ pip install --upgrade mico-cube
Collecting mico-cube
  Downloading mico-cube-1.0.6.tar.gz
Installing collected packages: mico-cube
  Found existing installation: mico-cube 1.0.0
    Uninstalling mico-cube-1.0.0:
      Successfully uninstalled mico-cube-1.0.0
  Running setup.py install for mico-cube ... done
Successfully installed mico-cube-1.0.6

3)为MiCO Cube 配置MiCoder Tools路径

特别注意: 如果您想通过MiCO Cube命令进行编译和下载MiCO项目,必须 为MiCO Cube设置MiCoder Tools的路径。这里的路径是指 MiCoder 文件夹在您 PC 中的位置。

$ mico config --global MICODER ~/MiCO_SDK/MiCO/MiCoder
[mico] /Users/william/MiCO_SDK/MiCO/MiCoder now set as default MICODER in program "helloworld"

配置好后,可查看 MiCO Cube 的有效配置参数:

$ mico config --list
[mico] Global config:
MICODER=/Users/william/Develop/MiCO_SDK/MiCO/MiCoder
[mico] Local config (/Users/william/Develop/mico-program/helloworld):
No local configuration is set

2.安装MiCoder IDE

根据您 PC 端的系统类型,下载: MiCoder IDE,并安装。

3.安装串口驱动及串口调试软件

  • 您需要在 PC 端查看 “调试串口” log内容,需安装驱动: Micro-USB 串口驱动,推荐:FIDI(调试串口即指 MiCOKit 上的 micro-usb 接口)。

  • 您需要在 PC 端连接 “用户串口” 并调试,需安装驱动:USB转串口模块驱动,推荐:CP2102 Driver

  • 同时,还需要在 PC 端安装串口调试软件,推荐:SecureCRT (可用该软件查看 以上串口的 log 打印信息) 。

4.更新jlink驱动

如果您在Window系统中使用jlink仿真器进行下载,需要 更新Jlink驱动程序

开始使用

1.导入helloworld项目

首先,您需要从MiCO仓库中导入一个项目。 在终端中输入命令:

mico import https://code.aliyun.com/mico/helloworld.git

Tips: 若需要看到详细的项目导入过程 log 信息,可以在指令中加入 -v -vv 后缀,形如:

$ mico import https://code.aliyun.com/mico/helloworld.git -v -vv

也可以缩写为:mico import helloworld

代码获取到本地后,切换至当前工程目录:

cd helloworld

2.更新mico os至最新版本

注意:为了确保获取到的 mico-os 是最新版本,请输入命令:

$ cd mico-os
$ git checkout mico-os-3.5  # Switch branch to mico-os-3.5
Previous HEAD position was 6949563... Merge branch 'master' into mico-os-3.5 
Switch to a new branch 'mico-os-3.5'
Branch mico-os-3.5 set up to track remote branch mico-os-3.5 from origin.

$ mico update   # This will update "mico-os" to latest version, not "mico-example-program"
[mico]Updating library "mico-os" to latest revision in the current branch.

或 
$ mico update 3.5.x  # This will update "mico-os" to the designated version
[mico]Updating library "mico-os" to branch 3.5.x

3.MiCO Cube命令行编译与下载

(1) 编译

命令终端输入 MiCO Cube 编译命令:

mico make helloworld@MK3165

编译过程需要几秒钟左右,编译结束后,编译成功结束后,log信息如下:

                        MICO MEMORY MAP                            
|=================================================================|
| MODULE                                   | ROM       | RAM      |
|=================================================================|
| App_Helloworld                           | 141       | 0        |
| Board_MK3165                             | 1308      | 124      |
| crt0_GCC                                 | 272       | 0        |
| FreeRTOS                                 | 5832      | 424      |
| hardfault_handler                        | 991       | 0        |
| libc                                     | 38059     | 2268     |
| libgcc                                   | 3360      | 0        |
[snip]
| STM32F4xx                                | 5115      | 2215     |
| STM32F4xx_Peripheral_Drivers             | 9299      | 236      |
| STM32F4xx_Peripheral_Libraries           | 5948      | 16       |
| *fill*                                   | 253       | 926      |
|=================================================================|
| TOTAL (bytes)                            | 243524    | 34971    |
|=================================================================|
Build complete
Making .gdbinit
Making .openocd_cfg

make 编译命令格式:[target] [download] [run | debug] [JTAG=xxx] [VERBOSE=1] [JOBS=<jobs>]

参数如下:

  • <target>用于选择编译目标. 目标由参与编译的各个组件构成, 以下的每一个组件用'@‘分割开来。

    • Application (项目中需要编译的应用程序组件,即应用程序在项目中的路径,并将/替换成.
    • Board ( mico-os/board/*中定义的硬件平台组件 )
    • [RTOS] ( mico-os/MiCO/rtos/*中定义的RTOS内核组件, 默认使用 FreeRTOS )
    • [Network Stack] ( mico-os/MiCO/net/*中定义的网络协议栈组件,默认使用 LwIP )
    • [TLS] ( mico-os/MiCO/security/TLS/*中定义的安全传输组件, 默认使用 wolfSSL )
    • [debug | release_log | release] ( 编译选项默认使用release_logNote: 如果你使用moc平台,例如 MK3031, MK3080, 添加 moc 等同于同时添加 mocOS@mocIP@mocTLS
  • [download] 通过调试器(安装)下载目标固件到硬件平台,。

  • [run|debug] 通过调试器(安装)复位硬件并运行程序或者连接到目标处理器进行调试。
  • [JTAG=xxx] mico-os/makefiles/OpenOCD/interface 中定义的JTAG接口配置文件。默认使用jlink_swd, 该参数可省略不写。
  • [VERBOSE=1] (可选) 显示编译过程中运行的命令。
  • [JOBS=<jobs>] (可选) 控制多线程编译,提高编译速度。默认值是 4。可以根据处理器核心的数量来设置这个参数,也可以使用 JOBS=1 来执行单线程的顺序编译.

如:

  • 编译基于 MiCOKit-3165 的 Helloworld 应用程序,使用命令:helloworld@MK3165 JTAG=jlink_swd
  • 编译基于 MiCOKit-3165 的 Helloworld 应用程序和其他相关固件,使用命令:helloworld@MK3165 total
  • 编译并且下载基于 MiCOKit-3031 的 Helloworld 应用程序和其他相关固件,使用命令:helloworld@MK3031@moc total download JTAG=jlink_swd
  • 编译并且下载基于 MiCOKit-3080B 的 Helloworld 应用程序和其他相关固件,使用命令: helloworld@MK3080B@moc total download JTAG=jlink_swd

编译生成的可执行文件,ELF文件,内存使用和链接数据可以在 build/<target>/binary 目录下找到。

(2) 下载

命令终端输入 mico-cube 下载命令:

mico make helloworld@MK3165 download

下载过程需要几秒钟左右。

Skipping building bootloader due to \"total\" is not set


                        MICO MEMORY MAP
|=================================================================|
| MODULE                                   | ROM       | RAM      |
|=================================================================|
| App_Helloworld                           | 141       | 0        |
| Board_MK3165                             | 1192      | 120      |
| crt0_GCC                                 | 272       | 0        |
| FreeRTOS                                 | 5832      | 424      |
| hardfault_handler                        | 991       | 0        |
| libc                                     | 42755     | 2268     |
| libgcc                                   | 3360      | 0        |
| Lib_gpio_button_MK3165                   | 224       | 200      |
| Lib_JSON_C                               | 6762      | 12       |
| Lib_MiCO_Kernel                          | 12        | 12       |
| Lib_MiCO_System                          | 26736     | 415      |
| Lib_MiCO_System_QC                       | 1312      | 80       |
| Lib_SPI_Flash_Library_MK3165             | 904       | 0        |
| Lib_Utilities                            | 8861      | 0        |
| Lib_wolfSSL.Cortex-M4.GCC.release        | 14867     | 8        |
| LwIP                                     | 112       | 0        |
| mem_newlib                               | 96        | 16       |
| MiCO.3165.GCC                            | 102733    | 27880    |
| MiCO_FreeRTOS_Interface                  | 2949      | 36       |
| mico_system_power_daemon                 | 653       | 25       |
| platform_vector_table                    | 0         | 0        |
| stdio_newlib                             | 108       | 0        |
| STM32F4xx                                | 4385      | 2215     |
| STM32F4xx_Peripheral_Drivers             | 7731      | 236      |
| STM32F4xx_Peripheral_Libraries           | 5350      | 16       |
| *fill*                                   | 227       | 925      |
|=================================================================|
| TOTAL (bytes)                            | 238565    | 34888    |
|=================================================================|
Downloading Bootloader ...
Skipping download bootloader due to \"total\" is not set

Downloading application to partition: 2 size: 241448 bytes...
Download complete

Build complete
Making .gdbinit
Making .openocd_cfg

如果是第一次下载固件,可在编译命令中使用 total ,即包含 bootloader 工程一起编译, 下载命令中也使用 total,即全片固件下载,包含:bootloader,app 和 射频固件。

4.MiCoder IDE中编译下载与调试

(1) 导入项目

打开 MiCoder IDE,选择:File–>Import,选择:General–>Existing Projects into Workspace,然后 Next,点击 Browse ,选择 MiCO SDK 文件路径,点击 Finish ,即可导入成功。

导入后,IDE界面如图:

MiCoder_IDE

(2) 编译与下载

在 IDE 右侧 “make target settings"中添加新 make 命令,详细 make 命令格式及使用,请参考:编译与下载命令行

make 命令添加方法:

  • 1)打开 make 命令创建窗口:

new_target

  • 2)编辑新的 make 命令:

new_target2

  • 3)执行 make 命令:

make_target

  • 4)下载成功后,可查看Consoles窗口内容如图:

make_rusult

(3) 运行结果

应用程序功能:(1)调试串口打印字符串:“Helloworld!”;(2)开发底板LED灯间隔1秒闪烁。

串口log:应用程序下载成功后,打开串口工具软件 SecureCRT,参数设置如下:

COM_config

查看串口 log 内容:

[2][Platform: mico_platform_common.c:  98] Platform initialised, build by GNUC
[651][APDS9930: APDS9930.c: 168] APDS9930_ERROR: no i2c device found!
[1080][BME280_USER: bme280_user.c: 480] BME280_ERROR: no i2c device found!
[1107][RTOS: mico_rtos_common.c:  82] Started FreeRTOS v7.1.0
[1703][SYSTEM: system_misc.c: 222] Free memory 75368 bytes
[1709][SYSTEM: system_misc.c: 228] Kernel version: 31621002.050
[1715][SYSTEM: system_misc.c: 231] MiCO version: 3.0.0
[1720][SYSTEM: system_misc.c: 233] Wi-Fi driver version wl0: Nov  7 2014 16:03:45 version 5.90.230.12 FWI, mac C8:93:46:53:B7:61
[1732][SYSTEM: config_server.c: 148] Config Server established at port: 8000, fd: 1
[1932][helloworld: helloworld.c:  43] Hello world!

现象:观察 MiCOKit 开发底板右下角黄绿LED灯间隔1秒交替亮灭。

(4) 在线调试

MiCoder IDE 支持 MiCO 应用程序在线调试功能,这里可以选择调试 MiCO 应用程序 或 MiCO Bootloader 程序,二者参数配置一致,具体参数配置方法:

  • 1)工具栏下拉进入 Debug 界面;

debug

  • 2)Debug 参数配置 Main 界面,确保工程名称正确,其它参数一致。

debug_main

  • 3)Debug 参数配置 Debugger 界面,确保参数一致。

debugger

  • 4)Debug 界面:

helloworld_debug

更详细的 MiCoder IDE 中调试内容请参考:如何在 IDE 中调试 MiCO 应用程序

5.应用程序代码

#include "MICO.h"     
#define os_helloworld_log(format, ...)  custom_log("helloworld", format, ##__VA_ARGS__)

int application_start( void )
{
    /* Start MiCO system functions according to mico_config.h*/
    mico_system_init( mico_system_context_init( 0 ) );

    /* Output on debug serial port */
    os_helloworld_log( "Hello world!" );

    /* Trigger MiCO system led available on most MiCOKit */
    while(1)
    {
        MicoGpioOutputTrigger( MICO_SYS_LED );
        mico_thread_sleep(1);
    }
}

更多 MiCO 开发内容,请参考文档中心其它页面。

文本导读目录