一文轻松入门HaaS100诊断调试系统_AliOS Things 3.3

 

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组件。

depends:

- 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执行成功;其他:失败

 

调用示例

/*参考代码*/
int ret;
void test_cmd(char *buf, int32_t len, int32_t argc, char **argv)
{
        /*test_cmd 命令实现*/
}


const struct cli_command cmd = { "test", "show test info", test_cmd };

ret = aos_cli_register_command(&cmd);
if (ret) {
        /*错误处理*/
}

 

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

API

入参

返回值

aos_cli_register_commands

1. cli_command*  2. 入参个数

0执行成功;其他:失败

调用示例

int ret;
/*参考代码*/
void test1_cmd(char *buf, int32_t len, int32_t argc, char **argv)
{
        /*test1_cmd 命令实现*/
}


void test2_cmd(char *buf, int32_t len, int32_t argc, char **argv)
{
        /*test2_cmd 命令实现*/
}


const struct cli_command cmds[] = {
         { "test1", "show test1 info", test1_cmd },
         { "test2", "show test2 info", test2_cmd },
};


ret = aos_cli_register_commands(&cmds, sizeof(cmds) / sizeof(struct cli_command));
if (ret) {
        /*错误处理*/
}

 

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

void test3_cmd(int32_t argc, char **argv)
{
        /* test3_cmd 命令实现 */
}

/* 宏的参数说明:
* 参数1. cmd具体实现
* 参数2. 在串口下输入的命令
* 参数3. cmd的描述信息
*/

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组件。

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

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

 

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

 

3.2.1、任务信息统计

tasklist

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

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

 

3.2.2、内存状态统计

dumpsys mm

 

上面截图中各字段的解释为:
HEAP中的内容含义:

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

 

3.2.3、任务负载统计 cpuusage

执行命令

cpuusage

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

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

 

当需要修改一个内存值(或者一个寄存器的值),可以通过m命令,如:下面演示了将位于
0x34027770的地址的值,从0x12345678修改为0xffffffff的过程

 

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


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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值