摘要:Shell 作为 Huawei Liteos 在线调试工具,能够通过串口工具输入输出,反对罕用的根本调试性能。同时用户能够新增定制的命令,新增命令需从新编译烧录后能力执行
本文分享自华为云社区《LIteOS—-shell 利用(1)零碎 shell》,作者:o0 龙龙 0o。
前言:
很多时候咱们在调试应用程式时都无奈设置过多断点或是无奈观测程序真正的流程动向,哪些语句有没有执行,还有就是手动开启某个本人写的利用的等等,这时候就须要 shell 命令行的操作,他能够以命令行的形式拜访操作系统的性能和服务,接管用户的输出命令,对操作系统的输入进行打印。
1、Huawei Liteos 的 shell
Shell 作为 Huawei Liteos 在线调试工具,能够通过串口工具输入输出,反对罕用的根本调试性能。同时用户能够新增定制的命令,新增命令需从新编译烧录后能力执行
2、shell 性能关上办法
能够通过 make menuconfig 配置 Shell,菜单门路为:Debug —> Enable a Debug Version —> Enable Shell。
3、LiteOS 内设 Shell 命令
烧录新零碎镜像后,重启零碎,如果曾经关上 shell 性能,既能够从串口中应用零碎自带的 Shell 性能了。
- help、date、uname、task、free、memcheck、memused、hwi、queue、sem、mutex、dlock、swtmr、systeminfo、stack、cpup、watch 等
通过这些命令我就能够实现对系统的一些基本操作,比方查问工作执行的状况,内存的分配情况及各种命令的帮忙性能。
例如:help 命令,在命令行输出 help
零碎谁输入以后的所有 shell 命令:
Huawei LiteOS # help
*******************shell commands:*************************
cpup date dlock dmesg free help hwi
log memcheck mutex queue sem stack swtmr
systeminfo task uname watch
task 命令用于查问零碎工作信息
当输出 task [ID] 时,能够查问到 ID 为 ID 的工作信息
比方输出 task 0x01 时,零碎会打印出:
Huawei LiteOS # task 0x01
TaskName = SerialEntryTask
TaskId = 0x01
*******backtrace begin*******
traceback 0 -- lr = 0x1d804 fp = 0xa86bc
traceback 1 -- lr = 0x1da40 fp = 0xa86e4
traceback 2 -- lr = 0x20154 fp = 0xa86fc
traceback 3 -- lr = 0x258e4 fp = 0xa8714
traceback 4 -- lr = 0x242f4 fp = 0xa872c
traceback 5 -- lr = 0x123e4 fp = 0xa8754
traceback 6 -- lr = 0x2a9d8 fp = 0xb0b0b0b
大家能够尝试,本人发现这些零碎性能的的作用是什么,也在其实发现更好地利用。
4、定义命令函数
首先要有一个性能函数还解决命令,须要在头文件中申明性能函数原型。
比方这里定义
int osShellCmdLs(int argc, const char **argv);
个别这里函数须要包过两个参数,argc 和 argv 字符串指针。argc:Shell 命令的参数个数。个数中是否包含命令关键字,和注册命令时的命令类型无关。argv:为指针数组,每个元素指向一个字符串,该字符串就是执行 shell 命令时传入命令处理函数的参数。参数中是否包含命令关键字,和注册命令时的命令类型无关。
5、注册命令名称
LiteOS shell 有动态注册命令和零碎运行时动静注册命令两种注册形式。两种形式次要是内存设定和开释不同,动态注册要求在编译器和设置中关上相干的反对能力失效。个别倡议采纳动静 shell 注册,这样简略好操作。
6、用例
1、定义一个 shell 性能名称为 pf_best,性能是打印“We r best”,首先定义他的性能
#include "shell.h"
#include "shcmd.h"
int cmd_pfbest(void)
{printf("We r best!\n");
return 0;
}
因为不须要出入参数,这里的函数为 void 空类型。
2、注册命令
依照动静注册的要求。
#include "shell.h"
void cmd_init(void)
{osCmdReg(CMD_TYPE_EX, "pf_best", XARGS, (CMD_CBK_FUNC)cmd_pfbest);
}
编译下载后就能够应用这个命令进行交互了。
说完了 shell,大家是不是感觉很简略呢,都来试试吧
更多学习内容,请关注 IoT 物联网社区
增加华为云 IoT 小助手微信号(hwc-iot),回复“浏览”获取更多资讯
点击关注,第一工夫理解华为云陈腐技术~