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软件包。