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

简介: AliOS Things 自带了调试诊断功能,提供了常见的CLI调试命令(可输入help查看)。
来源 | 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.         /*错误处理*/
  11. }

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

API

入参

返回值

aos_cli_register_commands

1. cli_command*  2. 入参个数

0执行成功;其他:失败

调用示例

  1. int ret;
  2. /*参考代码*/
  3. void test1_cmd(char *buf, int32_t len, int32_t argc, char **argv)
  4. {
  5.         /*test1_cmd 命令实现*/
  6. }
  7. void test2_cmd(char *buf, int32_t len, int32_t argc, char **argv)
  8. {
  9.         /*test2_cmd 命令实现*/
  10. }
  11. const struct cli_command cmds[] = {
  12.          { "test1", "show test1 info", test1_cmd },
  13.          { "test2", "show test2 info", test2_cmd },
  14. };
  15. ret = aos_cli_register_commands(&cmds, sizeof(cmds) / sizeof(struct cli_command));
  16. if (ret) {
  17.         /*错误处理*/
  18. }

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

  1. void test3_cmd(int32_t argc, char **argv)
  2. {
  3.         /* test3_cmd 命令实现 */
  4. }
  5. /* 宏的参数说明:
  6. * 参数1. cmd具体实现
  7. * 参数2. 在串口下输入的命令
  8. * 参数3. cmd的描述信息
  9. */
  10. 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. depends:
  2. - cli: rel_3.3.0  # helloworld_demo中添加cli组件
  3. - debug: rel_3.3.0   # helloworld_demo中添加debug组件

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

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

3.2.1、任务信息统计

tasklist

image.png

图中跑的是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

image.png

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


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

相关文章
|
算法 AliOS-Things 物联网
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
本文主要说开发调试过程中经常遇到的内存问题。
347 15
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
|
存储 物联网 Linux
AliOS Things 3.3.0 : 实战HaaS100扩展SD卡
HaaS100开发板提供了灵活的存储软硬件方案,硬件上包括内存、内置Nor Flash和外置SD-Card,软件上提供内存文件系统、Flash文件系统和SD卡文件系统。其中扩展SD卡可以支持上百G的存储,可适用于需要存储图片、音视频等较大数据的场景。
AliOS Things 3.3.0 : 实战HaaS100扩展SD卡
|
移动开发 运维 监控
AliOS Things 3.3.0:HaaS100快速上云
AliOS Things 3.3.0:HaaS100快速上云
AliOS Things 3.3.0:HaaS100快速上云
|
IDE AliOS-Things 物联网
AliOS Things 3.3.0:HaaS100 快速上手
AliOS Things 3.3.0:HaaS100 快速上手
AliOS Things 3.3.0:HaaS100 快速上手
|
传感器 消息中间件 物联网
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
|
AliOS-Things 物联网 编译器
使用HaaS Studio开发AliOS Things C/C++应用
本文章将介绍使用HaaS Studio 进行AliOS-Things C/C++应用开发。
使用HaaS Studio开发AliOS Things C/C++应用
|
NoSQL 物联网
使用线上的开发板做开发调试 |《AliOS Things快速开发指南》
当您手上没有现成可用的开发板时,也可以使用线上的开发板来调试验证您的程序。本文主要介绍线上开发板的使用流程。
使用线上的开发板做开发调试 |《AliOS Things快速开发指南》
|
监控 AliOS-Things 物联网
使用线下开发板进行开发调试 |《AliOS Things快速开发指南》
本文主要介绍如何使用VSCode进行项目编译、固件烧录及串口监控。
使用线下开发板进行开发调试 |《AliOS Things快速开发指南》
|
域名解析 JSON AliOS-Things
AliOS Things 开发:让你的开发板支持 AliOS Studio 烧录
本文主要为大家讲解如何进行 AliOS Studio 烧录。
1117 0
AliOS Things 开发:让你的开发板支持 AliOS Studio 烧录
|
物联网 NoSQL Windows
AliOS Things开发:让你的开发板支持AliOS Studio调试
在AliOS-Things 2.1版本之后,AliOS Studio提供了一套简单易懂的接口可以让开发者很容易适配开发板支持调试功能。
AliOS Things开发:让你的开发板支持AliOS Studio调试