一文轻松入门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问题
本文主要说开发调试过程中经常遇到的内存问题。
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
|
NoSQL 物联网 AliOS-Things
HaaS100开发调试系列 之 使用AliOS Things诊断调试组件定位Bug
一个更方便定位系统异常死机的方法——AliOS Things的诊断调试组件
HaaS100开发调试系列 之 使用AliOS Things诊断调试组件定位Bug
|
物联网 Linux
【AliOS Things学习笔记】为你的AliOS Things应用增加自定义cli命令
怎么才能在RTOS系统中,通过 串口shell控制LED的开关。
3587 0
|
AliOS-Things 物联网 编译器
使用HaaS Studio开发AliOS Things C/C++应用
本文章将介绍使用HaaS Studio 进行AliOS-Things C/C++应用开发。
使用HaaS Studio开发AliOS Things C/C++应用
|
传感器 存储 移动开发
使用AliOS Things快速构建温度计应用 |《AliOS Things快速开发指南》
本文是基于AliOS Things 3.1快速构建温度计的应用场景。涉及AliOS Things组件开发,构建AliOS Things用户项目,AliOS Things HAL API使用,向AliOS Things中添加并使用组件。用到的硬件设备有半导体开发板、温度传感器、数码管显示器。
使用AliOS Things快速构建温度计应用 |《AliOS Things快速开发指南》
|
域名解析 移动开发 数据可视化
使用 AliOS Things 3.0 快速构建用户应用 BlinkAPP
AliOS Things 3.0版本于去年9月份在云栖大会正式发布,在新版本中带来了全新的应用开发框架,帮助用户快速构建自己的应用。使用户可以更专注于自身应用的开发。本文将已BlinkAPP为例,为大家演示如何快速使用应用开发框创建项目并完成应用代码编写。
913 0
使用 AliOS Things 3.0 快速构建用户应用 BlinkAPP
|
物联网 AliOS-Things 机器人
AliOS Things 3.0 应用笔记:摄像头配网 + 钉钉群通知 + 天气显示
距离 AliOS Things 3.0 上线已经有一段时间了,新版的 AliOS Things 3.0 体验感到底如何呢?本文将为大家详细讲解其应用实例,我们分别从运行流程、效果展示、操作流程以及源码讲解四个方面进行了阐述。
1705 0
|
物联网 传感器 API
AliOS Things 3.0应用笔记:http client简单应用
AliOS Things 3.0版本新增加了httpc组件(http 客户端组件),httpc组件支持多种RESTful的API调用,包括GET、POST、PUT、HEAD等,也支持https安全协议。
12217 1
|
物联网 机器人 AliOS-Things