1. 为什么使用shell组件
2. LiteOS中的shell组件
2.1. 源码
LiteOS中的shell组件源码如图:
这三个C文件是shell组件的实现文件,使用时只需要包含头文件<shell.h>
即可,shell.h的位置如下:
2.2. 组件自动初始化
shell组件在使用前需要调用shell_init()
函数进行组件初始化,该函数在shell_main.c
中,源码如下:
/*******************************************************************************
function :this is the shell module initialize function
parameters :
instruction :if you want use shell,you should do two things
1,make CFG_SHELL_ENABLE true in target_config.h
2,call shell_init in your process:make sure after the system has
been initialized
*******************************************************************************/
void shell_init()
{
shell_cmd_init();
osal_task_create("shell_server",shell_server_entry,NULL,\
CN_SHELL_STACKSIZE+CN_CMD_CACHE*CN_CMDLEN_MAX,NULL,10);
}
在link_main.c
文件中,可以看到,如果使能了宏定义CONFIG_SHELL_ENABLE
,则shell组件会自动进行初始化:
2.3. 使用方法
shell组件目前目前支持tab补全(找到最像的一条),支持上下键切换历史命令,用户可以进行下面的两个操作:
添加全局变量
可以添加全局变量,可以使用shell入口为全局变量赋值,添加方法如下:
OSSHELL_EXPORT_VAR(var,varname,varhelp)
其中:
- var为需要添加的全局变量
- varname为该全局变量的名字
- varhelp为该全局变量的描述
添加shell命令
OSSHELL_EXPORT_CMD(cmdentry,cmdname,cmdhelp)
其中:
- cmdentry:shell命令入口函数,函数模型为
typedef int (*fn)(int argc, const char *argv[])
; - cmdname:shell命令名字(执行该命令时需要输入的字符串);
- cmdhelp,:shell命令的帮助信息;
3. shell组件使用示例
3.1. 编写测试文件
编写测试文件:
#include <osal.h>
#include <shell.h>
static uint32_t shell_test_var = 0x01234567;
int shell_test_func(int argc, const char *argv[]){
int i = 0;
printf("argc:%d\r\n",argc);
for(i=0;i<argc;i++){
printf("%s\r\n",argv[i]);
}
return 0;
}
int standard_app_demo_main()
{
return 0;
}
/* 向shell组件中添加全局变量 */
OSSHELL_EXPORT_VAR(gs_shell_test_var,"shell_test_var","shell test var");
/* 向shell组件中添加函数 */
OSSHELL_EXPORT_CMD(shell_test_func,"shell_test_func","shell test func");
3.2. 实验结果
编译,下载之后,使用串口终端软件(不推荐直接使用串口助手,要使用类似xshell的串口终端软件)查看:
3.3.shell支持的命令
help-查看当前所有命令
使用help
查看当前shell中的所有命令:
shellversion-查看shell版本
task_info-查看当前系统中的任务信息
这是一个非常有效的命令,一般在创建任务的时候,并不知道该任务执行时用到的栈空间大小是多少,只能大概指定一个尽可能大的数字,但是这样会造成栈空间的极大浪费,所以:
可以先设置一个比较大的值,然后使用该命令查看具体用了多少,再去设置一个相对准确的栈空间大小。
heapinfo-查看当前堆空间使用情况
reboot-重启系统
shell_test_var - 自定义命令
shell_test_func - 自定义命令
自动补全功能测试
输入之后按tab,shell就会自动根据当前已有命令进行自动补全: