shell | LiteOS 物联网操作系统中的 shell 组件使用分享

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就会自动根据当前已有命令进行自动补全:

发布了162 篇原创文章 · 获赞 504 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/Mculover666/article/details/104080165