天天看點

一文輕松入門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、總結開發者支援

繼續閱讀