天天看点

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

来源 | HaaS技术社区

1、诊断调试系统简介

AliOS Things 自带了调试诊断功能,提供了常见的CLI调试命令(可输入help查看),如:

  • tasklist: 查询系统任务状态
  • dumpsys mm: 查询系统内存使用状态
  • cpuusage: 查询cpu利用率
  • p/m: 查询/修改内存内存值

诊断调试系统依赖 cli 组件和debug组件,下面分别介绍这两个组件的功能。

2、AliOS Things cli组件

在日常嵌入式开发中,用户经常需要一套类似Linux Shell的交互工具,通过串口来执行一些预置的命令,如查询系统的某种状态、执行某个特定的操作、系统自检,模拟测试运行等。AliOS Things原生实现了一套名为CLI(command-line interface)的命令行交互工具,在提供基本的系统交互命令的基础上,也支持用户自定义命令。

2.1、CLI 组件如何使用

以运行helloworld_demo为例,在helloworld_demo组件的package.yaml中添加cli组件。

  1. depends:
  2. - cli: rel_3.3.0   # helloworld_demo中添加cli组件

然后重新编译烧录上电即可,系统启动后,操作方法与其他的常用shell类似,按回车有#符号打印,输入help可查看系统自带的一些cli命令。

2.2、如何增加自定义的CLI命令

AliOS Things支持用户增加自己的CLI命令,使用下面的接口。

2.2.1、包含头文件

#include "aos/cli.h"

2.2.2、方式1:注册单个命令

API 入参 返回值
aos_cli_register_command cli_command* 0执行成功;其他:失败

调用示例

  1. /*参考代码*/
  2. int ret;
  3. void test_cmd(char *buf, int32_t len, int32_t argc, char **argv)
  4. {
  5.         /*test_cmd 命令实现*/
  6. }
  7. const struct cli_command cmd = { "test", "show test info", test_cmd };
  8. ret = aos_cli_register_command(&cmd);
  9. if (ret) {
  10.         /*错误处理*/

2.2.3、方式2:注册多个命令

aos_cli_register_commands 1. cli_command*  2. 入参个数
  1. void test1_cmd(char *buf, int32_t len, int32_t argc, char **argv)
  2.         /*test1_cmd 命令实现*/
  3. void test2_cmd(char *buf, int32_t len, int32_t argc, char **argv)
  4.         /*test2_cmd 命令实现*/
  5. const struct cli_command cmds[] = {
  6.          { "test1", "show test1 info", test1_cmd },
  7.          { "test2", "show test2 info", test2_cmd },
  8. };
  9. ret = aos_cli_register_commands(&cmds, sizeof(cmds) / sizeof(struct cli_command));

2.2.4、方式3:通过宏注册单个命令

  1. void test3_cmd(int32_t argc, char **argv)
  2.         /* test3_cmd 命令实现 */
  3. /* 宏的参数说明:
  4. * 参数1. cmd具体实现
  5. * 参数2. 在串口下输入的命令
  6. * 参数3. cmd的描述信息
  7. */
  8. ALIOS_CLI_CMD_REGISTER(test3_cmd, test3, show test3 info)

注意:这种方式不需要判断返回值,若注册失败,系统在初始化过程中会输出相应信息

3、AliOS Things debug组件

系统支持的调试命令包含在debug组件中。

3.1、debug组件如何使用

以运行helloworld_demo为例,在helloworld_demo组件的package.yaml中添加cli组件和debug组件。

  1. - cli: rel_3.3.0  # helloworld_demo中添加cli组件
  2. - debug: rel_3.3.0   # helloworld_demo中添加debug组件

重新编译烧录上电,系统启动后,输入help可查看系统自带的一些调试命令,如图:

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

3.2、常见的调试诊断命令介绍

3.2.1、任务信息统计

tasklist

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

图中跑的是helloworld_demo下,当前系统创建的几个任务。tasklist命令分别列出了每个任务的:

  • 任务ID
  • 任务状态:ready/pend/suspend/sleep等
  • 任务优先级:数值越小,优先级越高
  • 任务栈大小:单位是Bytes
  • 任务栈使用极限值:若在系统运行时这个值比较小,就会有栈溢出风险,可以考虑加大任务栈
  • 当前任务指示:Y表示当前正在运行的任务

3.2.2、内存状态统计

dumpsys mm

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

上面截图中各字段的解释为:

HEAP中的内容含义:

  • TotalSz:系统可供malloc的动态内存总大小;
  • FreeSz:系统当前空闲内存大小;
  • UsedSz:系统当前已经分配的内存大小,即UsedSz = TotalSz – FreeSz;
  • MinFreeSz:系统空闲内存的历史最小值,即TotalSz – MinFreeSz 便是内存历史使用量峰值;
  • MaxFreeBlkSz:系统最大空闲块Size,表示系统此时可供分配出来的内存最大值。

3.2.3、任务负载统计 cpuusage

执行命令

cpuusage

默认以1s为间隔,周期性打印系统当前所有任务的cpuusage

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

cpuusage命令使用说明

cpuusage [-d n] [-t m] 命令启动CPU利用率统计,结果输出到串口终端

其中:-d 选项用于指定统计周期,单位为ms,默认为1 s;

-t 选项用于指定统计时长,单位为ms,默认为连续运行。

举例说明:

(1) cpuusage                             -- 启动一个cpuusage任务,该任务默认每隔1s执行一次统计;

(2) cpuusage -d 3000                -- 启动一个cpuusage任务,该任务默认每隔3s(3000ms)执行一次统计;

(3) cpuusage -d 2000 -t 10000  -- 启动一个cpuusage任务,该任务默认每隔2s(2000ms)执行一次统计,统计到

10s(10000ms)后停止;

(4) cpuusage -e                         -- 停止统计

3.2.4、显示/修改内存数据的p/m命令

这个命令可以查询、修改系统内存

举例说明:需要得到HaaS100系统外设中断的优先级,我们查到数据手册得知0xE000E400为系统外设中断优先级的寄存器地址,可以通过p命令访问系统寄存器或者内存:

p 0xE000E400

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

当需要修改一个内存值(或者一个寄存器的值),可以通过m命令,如:下面演示了将位于

0x34027770的地址的值,从0x12345678修改为0xffffffff的过程

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

3.2.5、系统复位命令reboot

reboot是系统热复位命令,命令是通过调用了板级的reboot接口来实现。

4、总结

HaaS100的诊断调试功能不止于上面介绍的cli /debug 组件带来的调试命令,后续将为大家带来更多基于AliOS Things 的诊断调试方法。

欢迎大家持续关注HaaS!

开发者支持

HaaS解决方案中心:

https://haas.iot.aliyun.com/

HaaS技术社区:

https://blog.csdn.net/HaaSTech

开发者钉钉群和公众号见下图,开发者钉钉群每天都有技术支持同学值班。

一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3 1、诊断调试系统简介2、AliOS Things cli组件3、AliOS Things debug组件4、总结开发者支持

继续阅读