天天看点

【LiteOS】第 3 章

基本知识

静态注册命令使用 ​

​SHELLCMD_ENTRY​

​ 接口。

第一个入参:命令变量名,用于设置链接选项(build/mk/liteos_tables_ldflags.mk的LITEOS_TABLES_LDFLAGS变量)。例如变量名为ls_shellcmd,链接选项就应该设置为:LITEOS_TABLES_LDFLAGS += -uls_shellcmd。这个入参是静态注册独有的,动态注册中没有这个入参。
第二个入参:命令类型,目前支持两种命令类型。
  CMD_TYPE_EX:不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉。例如:输入ls /ramfs,传入给命令处理函数的参数只有/ramfs,对应于命令处理函数中的argv[0],而ls命令关键字并不会被传入。
  CMD_TYPE_STD:支持的标准命令参数输入,所有输入的字符都会通过命令解析后被传入。例如:输入ls /ramfs,ls和/ramfs都会被传入命令处理函数,分别对应于命令处理函数中的argv[0]和argv[1]。
第三个入参:命令关键字,是命令处理函数在Shell中对应的名称。命令关键字必须唯一,即两个不同的命令项不能有相同的命令关键字,否则只会执行其中一个。Shell在执行用户命令时,如果存在多个命令关键字相同的命令,只会执行在“help”命令中排在最前面的那个。
第四个入参:命令处理函数的入参最大个数。
  静态注册命令暂不支持设置。
  动态注册命令支持设置不超过32的入参最大个数,或者设置为XARGS(其在代码中被定义为0xffffffff)表示不限制参数个数。
第五个入参:命令处理函数名,即在Shell中执行命令时被调用的函数。      

实战环节

静态注册一个 shell 命令

仅打印输出提示信息。

  1. 新建 hello_shell.c 文件
LiteOS/shell/src/cmds/hello_shell.c
#include "shell.h"
#include "shcmd.h"

INT32 OsShellCmdHello(INT32 argc, const CHAR **argv)
{
    printf("hello jiaming!\n");
    return 0;
}

SHELLCMD_ENTRY(hello_shellcmd, CMD_TYPE_STD, "hello", XARGS, (CmdCallBackFunc)OsShellCmdHello); // 接口      
  1. 在链接选项中添加链接该新增命令项参数
LiteOS/build/mk/liteos_tables_ldflags.mk