Shell:Lite OS線上除錯工具知多少
摘要:Shell作為Huawei Liteos線上除錯工具,可以通過串列埠工具輸入輸出,支援常用的基本除錯功能。同時使用者可以新增定製的命令,新增命令需重新編譯燒錄後才能執行
本文分享自華為雲社群《LIteOS----shell應用(1)系統shell》,作者:o0龍龍0o 。
前言:
很多時候我們在除錯應用程式時都無法設定過多斷點或是無法觀測程式真正的流程動向,哪些語句有沒有執行,還有就是手動開啟某個自己寫的應用的等等,這時候就需要shell命令列的操作,他可以以命令列的方式訪問作業系統的功能和服務,接收使用者的輸入命令,對作業系統的輸出進行列印。
1、Huawei Liteos 的shell
Shell作為Huawei Liteos線上除錯工具,可以通過串列埠工具輸入輸出,支援常用的基本除錯功能。同時使用者可以新增定製的命令,新增命令需重新編譯燒錄後才能執行
2、shell功能開啟方法
可以通過make menuconfig配置Shell,選單路徑為:Debug ---> Enable a Debug Version ---> Enable Shell。
3、LiteOS 內設Shell命令
燒錄新系統映象後,重啟系統,如果已經開啟shell功能,既可以從串列埠中使用系統自帶的Shell功能了。
- help、date、uname、task、free、memcheck、memused、hwi、queue、sem、mutex、dlock、swtmr、systeminfo、stack、cpup、watch等
通過這些命令我就可以完成對系統的一些基本操作,比如查詢任務執行的情況,記憶體的分配情況及各種命令的幫助功能。
例如:help命令,在命令列輸入help
系統誰輸出當前的所有shell命令:
Huawei LiteOS # help *******************shell commands:************************* cpup date dlock dmesg free help hwi log memcheck mutex queue sem stack swtmr systeminfo task uname watch
task命令用於查詢系統任務資訊
當輸入 task [ID]時,可以查詢到ID為ID的任務資訊
比如輸入task 0x01時,系統會打印出:
Huawei LiteOS # task 0x01
TaskName = SerialEntryTask
TaskId = 0x01
*******backtrace begin*******
traceback 0 -- lr = 0x1d804 fp = 0xa86bc
traceback 1 -- lr = 0x1da40 fp = 0xa86e4
traceback 2 -- lr = 0x20154 fp = 0xa86fc
traceback 3 -- lr = 0x258e4 fp = 0xa8714
traceback 4 -- lr = 0x242f4 fp = 0xa872c
traceback 5 -- lr = 0x123e4 fp = 0xa8754
traceback 6 -- lr = 0x2a9d8 fp = 0xb0b0b0b
大家可以嘗試,自己發現這些系統功能的的作用是什麼,也在其實發現更好地應用。
4、定義命令函式
首先要有一個功能函式還處理命令,需要在標頭檔案中宣告功能函式原型。
比如這裡定義
int osShellCmdLs(int argc, const char **argv);
一般這裡函式需要包過兩個引數,argc 和argv字串指標。argc:Shell命令的引數個數。個數中是否包括命令關鍵字,和註冊命令時的命令型別有關。argv:為指標陣列,每個元素指向一個字串,該字串就是執行shell命令時傳入命令處理函式的引數。引數中是否包括命令關鍵字,和註冊命令時的命令型別有關。
5、註冊命令名稱
LiteOS shell有靜態註冊命令和系統執行時動態註冊命令兩種註冊方式。兩種方式主要是記憶體設定和釋放不同,靜態註冊要求在編譯器和設定中開啟相關的支援才能生效。一般建議採用動態shell註冊,這樣簡單好操作。
6、用例
1、定義一個shell 功能名稱為 pf_best,功能是列印“We r best” ,首先定義他的功能
#include "shell.h"
#include "shcmd.h"
int cmd_pfbest(void)
{
printf("We r best!\n");
return 0;
}
因為不需要出入引數,這裡的函式為void空型別。
2、註冊命令
按照動態註冊的要求。
#include "shell.h"
void cmd_init(void)
{
osCmdReg(CMD_TYPE_EX, "pf_best", XARGS, (CMD_CBK_FUNC)cmd_pfbest);
}
編譯下載後就可以使用這個命令進行互動了。
說完了shell ,大家是不是感覺很簡單呢,都來試試吧
更多學習內容,請關注IoT物聯網社群
新增華為雲IoT小助手微訊號(hwc-iot),回覆“閱讀”獲取更多資訊