摘要: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),回復“閱讀”獲取更多資訊