3.1注冊Shell命令
以LED外設為例,注冊三個控制LED的Shell命令:led_on、led_off和led_toggle。
1、首先定義led shell命令表,命令表實際是一個結構體數組,數組中每個元素就是一個shell命令對象,它包含命令名稱、命令描述,和命令要執行的函數。如程序清單 6。
程序清單6 定義led shell命令表
2、定義 led shell 命令對應的功能函數 __shell_led_on、__shell_led_off和__shell_led_toggle。這三個函數定義基本相同,本文僅列出__shell_led_on函數定義如程序清單 7,其他兩個函數定義將程序清單 7中的 aw_led_on() API 替換即可。
程序清單7 __shell_led_on函數定義
__shell_led_on 函數類型和 aw_shell_printf () API 說明請查閱 aw_shell.h。aw_led_on API說明請查閱 aw_led.h。該函數執行過程中需要匹配一個參數,所以 led shell命令使用時,要攜帶LED編號參數:"LED_RUN" 或者 "LED_ERR"。
3、 注冊Shell命令。
程序清單8 注冊led shell命令
AW_SHELL_REGISTER_CMDS 是注冊shell 命令的宏函數,此過程將led shell命令插入總的shell 命令鏈表中。
打開shell Serial命令終端,建立連接。編譯、燒寫并啟動程序,按下Tab鍵,可見 led shell命令已經注冊成功如圖5LED 命令。
圖5 LED 命令
led_on
命令描述:點亮LED燈。
使用實例:
led_off
命令描述:關閉LED燈。
使用實例:
led_toggle
命令描述:翻轉LED燈。
使用實例:
3.2注冊Shell命令集
本文自定義一個demo shell命令集,在demo 命令集下包含func1、func2和func3三個命令。
1、定義命令集對象,命令集對象必須包括進入命令集名稱、退出命令集名名稱和命令集描述,其他屬性為可選項,如程序清單 9。
程序清單9 shell命令集對象
2、定義demo shell命令集包含的命令表,如程序清單10。
程序清單10 demo shell命令集包含的命令表
3、定義命令表中 func1和func2命令對應的功能函數__demo_func1和__demo_func2,如程序清單 11和如程序清單 12。
程序清單11 __demo_func1函數定義
程序清單12 __demo_func2函數定義
4、定義命令表中 func3 命令對應的功能函數__demo_func3,如程序清單 13。
程序清單 13 __demo_func3函數定義
該函數定義較為復雜,執行過程中需要匹配選項 '-w'、'-r'、'-d',各個選項后必須攜帶固定數量的參數。
5、注冊demo shell命令集。
程序清單14 注冊shell命令集
AW_SHELL_REGISTER_CMDSET是注冊命令集的宏函數,此過程將 .demo 命令集插入shell命令總鏈表中。
6、打開 Shell Serial 命令終端,建立連接。編譯、燒寫并啟動程序,按下Tab鍵,可見 demo shell命令集已經注冊成功如圖 6。
圖6 demo命令集
進入 .demo 命令集
按下Tab鍵,顯示 .demo命令集包含的命令表,如圖 7。
圖7 demo命令集包含的命令表
func1命令
命令描述:打印輸出。
使用實例:
func2命令
命令描述:打印輸出。
使用實例:
func3命令
命令描述:打印輸出
使用實例:
.exit
命令描述:退出 .demo 命令集。
使用實例:
本文使用的硬件平臺為M1052_EV_Board開發板,購買可咨詢ZLG銷售人員;軟件平臺為 aworks_m105x_sdk_1.0.4-alpha軟件包。