环境
系统版本:LiteOS Kernel Version : 5.1.0
硬件:STM32F103VE开发板
开发IDE:HUAWEI-LiteOS-Studio
需求
LiteOS支持Shell,用户可以自己定义Shell 命令。
LiteOS Shell使用文档地址:https://gitee.com/LiteOS/LiteOS/blob/master/shell/README_CN.md
需求:增加自定义的shell命令,我增加:【reboot】重启命令
操作方法
通过看文档,增加Shell命令的方法,有两种,静态与动态,这里使用动态的方式,增加代码如下:
修改:targets\STM32F103_FIRE_Arbitrary\Src\user_task.c
增加Shell 头文件:
#include "shell.h"
#include "shcmd.h"
#define SCB_AIRCR (*(volatile unsigned long *)0xE000ED0C) /* Reset control Address Register */
#define SCB_RESET_VALUE 0x05FA0004 /* Reset value, write to SCB_AIRCR can reset cpu */
INT32 sys_reboot(INT32 argc, const CHAR **argv)
{
if (argc == 0) {
SCB_AIRCR = SCB_RESET_VALUE;
return 0;
}
PRINTK("Reboot: invalid option %s\n"
"Reboot has NO ARGS.\n",
argv[0]);
return -1;
}
void UserShellCmdInit(void)
{
osCmdReg(CMD_TYPE_EX, "reboot", 0,(CMD_CBK_FUNC)sys_reboot);
}
修改:app_init
VOID app_init(VOID)
{
printf("Hello, welcome to liteos!\n");
LedTaskCreate();
#ifdef LOSCFG_SHELL
(VOID)ShellQueueCreat();
if (OsShellInit(0) != LOS_OK) {
PRINT_ERR("Shell init failed.\n");
}
#endif
UserShellCmdInit();
DemoEntry();
}
编译下载运行
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.1.0
build data : Jun 13 2021 11:59:52
**********************************
OsAppInit
cpu 0 entering scheduler
Hello, welcome to liteos!
Huawei LiteOS # Hello, welcome to liteos demo!
Huawei LiteOS # help
*******************shell commands:*************************
date free help hwi memcheck reboot swtmr systeminfo
task uname watch
Huawei LiteOS # reboot
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.1.0
build data : Jun 13 2021 11:59:52
**********************************
OsAppInit
cpu 0 entering scheduler
Hello, welcome to liteos!
Huawei LiteOS # Hello, welcome to liteos demo!
Huawei LiteOS #
通过串口shell,输入help,发现有了自己的命令:reboot,运行后,系统可以争的复位。
总结
后期可以根据需要,增加用户的命令,方便开发与调试。
静态初始化与动态初始化,其实功能差不多。
如果增加shell命令后,提示shell未初始化,需要手动初始化shell cmd
#ifdef LOSCFG_SHELL
(VOID)ShellQueueCreat();
if (OsShellInit(0) != LOS_OK) {
PRINT_ERR("Shell init failed.\n");
}
#endif