本文介绍如何将第一个 mxos 应用程序跑起来。即:如何借助 mxos-cube 工具 和 VScode 进行 mxos 应用程序:Helloworld 工程获取,编译,下载,运行与调试。
硬件清单
- 原 MiCOKit 或者 最新 MXKit 开发板 1 套。(本文以 MXKit-3080为例,新的开发板详细信息可参考:MXKit 开发套件、EXT-AT3080 开发板、AZ3166。
- JLink V8或V9, 或 STlink 仿真器 1 套。(JLink 支持 mxos 所有硬件平台,STlink 仅支持模块:EMW3162,3165,3166 和 3239)
- Micro-USB 连接线 1 根。(用于查看调试UART串口 log 信息)
- USB转UART 串口模块 1 个。(用于查看用户UART串口 log 信息)
硬件连接
- 连接调试串口: 将 MXKit- 3080 开发板通过 Micro-USB 线连接至 PC,以为开发板提供电源和连接调试串口,即:
用户PC端USB口 ————> Micro USB 串口线 ————> 开发板
- 连接仿真器:将开发板的 JTAG 口通过 JLink 或 STLink (仅针对 ST 芯片) 仿真器,连接至 PC,即:
用户PC端USB口 —————> USB线 —————> 仿真器 —————> JTAG 排线 —————> 开发板
- 连接USB转串口模块: 若需要 查看用户串口 log,需将 PC 端通过USB转串口模块,连接到开发板的用户串口管脚,即:
用户PC端USB口 —————> USB转串口模块 ————> TX,RX串口线 ————> 开发板
硬件连接示例
首先,您需要拥有一个模块可以正常运行的硬件环境,可以是以下任意一种:
MiCOKit或MXKit-xxxx 开发板,其中:
目前MiCOKit支持模块包括:EMW3165,3166,3239,3031,3081。
MXKit支持模块包括:EMW3080,3060,110,3090,3290,3070,3072。
或您自己搭建的 EMWxxx 模块最小工作电路(至少包括:电源,串口,和复位按键功能。若需通过串口烧录,还需解出boot模式状态键:BOOT,Status两个)。
连线图及端口示意如下:MiCOKit-xxx连接示例
设备管理器中的端口如下:
2)如果是MXKit-xxx,用户串口和调试串口二合一(注意:RXD和TXD的短接头要插上。)
设备管理器中的端口如下:
注意:
若要使用MXKit开发板的 Arduino的用户串口,需要将RXD和TXD的短接头拔掉,且需连接ttl转usb小板,具体用法和端口号显示可参考MiCOKit。最小工作电路连接示例
如果是裸模组请自行飞线,示例如下:
模组TX -> MCU的RX
模组RX -> MCU的TX
具体型号模块的串口管脚分配情况如表:
型号 | Bootloader MFG产测信息 |
AT指令及透传 | 正常工作log CLI调试命令 |
---|---|---|---|
EMW3031 | Pin9,Pin10,921600bps | Pin9, Pin10, 115200bps | Pin21Pin22,115200bps |
EMW3060 | Pin9,Pin10,921600bps | Pin9, Pin10, 115200bps | Pin21Pin22,115200bps |
EMW3080 | Pin9,Pin10,921600bps | Pin9, Pin10, 115200bps | Pin21Pin22,115200bps |
EMW3162 | Pin22,Pin23,921600bps | Pin22,Pin23,115200bps | Pin14Pin4,115200bps |
EMW3165 | Pin29,Pin30,921600bps | Pin29,Pin30,115200bps | Pin8Pin12,115200bps |
EMW3166 | Pin29,Pin30,921600bps | Pin29,Pin30,115200bps | Pin8Pin12,115200bps |
EMW3239 | Pin29,Pin30,921600bps | Pin29,Pin30,115200bps | Pin8Pin12,115200bps |
编译环境快速搭建
安装 Python
- Python - mxos cube 是一个Python脚本,所以您需要在系统中安装Python。mxos bube 在Python version 2.7.13 下开发和测试. 不兼容Python 3。
注意: Python的可执行文件目录(Python
)需要添加到系统的PATH环境变量中,在Python安装时指定。
在终端上输入python
命令来验证Python是否正确安装:$ python --version
Python 2.7.13
安装 Git
- Git or Mercurial - mxos cube支持Git和Mercurial两种, 任选其一安装即可:
安装 mxos cube
您可以从执行 pip install mxos-cube
命令来安装 mxos cube:
$ pip install mxos-cube
Collecting mxos-cube
Downloading https://files.pythonhosted.org/packages/53/3a/71fe1e6d4685e639d195dfcfcc050e4b5d672760668fa35ea0bc7b3d1488/mxos_cube-0.1.0-py2-none-any.whl
Installing collected packages: mxos-cube
Successfully installed mxos-cube-0.1.0
在 Linux 和 macOS 上, 需要加上 sudo
获得安装权限.
小窍门: 使用mxos —help可以列出所有mxos cube所支持的指令,特定某一个指令的帮助可以使用mxos —help。
更多mxos cube详细介绍:https://mxchip.yuque.com/docs/share/ae4e4bed-a7f5-4aa9-8d6f-6c91f91e05c7?#
下载 MiCoder Toolchain 工具包
- MiCoder - mxos cube 调用 mxos OS 中的脚本来完成诸如编译,下载,调试等各项功能. 这些脚本的运行需要用到MiCoder 工具链,它包含了编译 mxos 应用程序所需要的工具链,根据各个 PC 平台提供相应版本。
配置 MiCoder 路径
MiCoder Toolchain下载后,你需要为 mxos cube 设置 MiCoder 工具链的路径,以便mxos cube调用这些工具来编译mxos项目。 你可以通过以下命令来设置 MiCoder 的路径(注意:路径中不可以包含空格,否则路径无效):
$ mxos config --global MICODER /Users/haiqin/jenny_tools/MiCoder
[mxos] /Users/haiqin/jenny_tools/MiCoder now set as default MICODER in program "demos"
-G
或 --global
开关可以让mxos Cube设置一个全局的参数,而不是针对当前项目的私有参数。
PS: windows环境下斜杠是“/”,与windows文件路径默认的分割符方向相反。
你可以通过下面的命令查看 MiCoder 的配置路径:
$ cd /Users/haiqin/jenny_git/test/demos
$ mxos config --list
[mxos] Global config:
MICODER=/Users/haiqin/jenny_tools/MiCoder
[mxos] Local config (/Users/haiqin/jenny_git/test/demos):
MICODER=/Users/haiqin/jenny_tools/MiCoder
导入项目
首先,您需要从mxos仓库中导入一个项目。 在终端中输入命令:
mxos import demos
Tips:
若需要看到详细的项目导入过程 log 信息,可以在指令中加入 -v -vv 后缀,形如:$ mxos import demos -v -vv
也可以写成:mxos import https://code.aliyun.com/mxos/demos.git
代码获取到本地后,切换至当前工程目录:
cd demos
demos 中包含了各单个功能的示例代码,如:os内核,hardware外设,wifi无线,wifi_uart串口透传,安全算法,net网络通信,http通信等,可以满足开发者正常的二次开发。
命令行编译下载
编译
命令终端输入 mxos cube 编译命令:
mxos make demos.helloworld@emw3080 total
下载
命令终端输入 mxos-cube 下载命令:
mxos make demos.helloworld@emw3080 total download JTAG=jlink_swd
下载过程需要几秒钟左右。
如果是第一次下载固件,可在编译命令中使用 total ,即包含 bootloader 工程一起编译, 下载命令中也使用 total,即全片固件下载,包含:bootloader,app 和 射频固件。
应用程序代码
#include "mxos.h"
#define os_helloworld_log(format, ...) custom_log("helloworld", format, ##__VA_ARGS__)
int application_start( void )
{
/* Start mxos system functions according to mxos_config.h*/
mxos_system_init( mxos_system_context_init( 0 ) );
/* Output on debug serial port */
os_helloworld_log( "Hello world!" );
/* Trigger mxos system led available on most mxosKit */
while(1)
{
mxosGpioOutputTrigger( mxos_SYS_LED );
mxos_thread_sleep(1);
}
}