RTT笔记-shell
模式切换
finsh同时支持c-c-style模式和msh模式,默认进入msh模式,在该模式下输入exit则进入c-style模式,在c-style模式下输入msh()则进入msh模式
c-style模式
C语言解释器模式,在程序中可以通过宏定义,对其添加函数或者变量
//函数宏
//name 函数指针,一般为函数名
//desc 针对这个函数命令的描述信息,desc一般为一段字符串,中间不可以有逗号,两边也没有引号
#include <finsh.h>
FINSH_FUNCTION_EXPORT(name, desc)
--------------------------------------
//变量宏
//name 变量名
//type 变量类型
//desc 变量描述
//类型列表
enum finsh_type{
finsh_type_unknown = 0, /**< unknown data type */
finsh_type_void, /**< void */
finsh_type_voidp, /**< void pointer */
finsh_type_char, /**< char */
finsh_type_uchar, /**< unsigned char */
finsh_type_charp, /**< char pointer */
finsh_type_short, /**< short */
finsh_type_ushort, /**< unsigned short */
finsh_type_shortp, /**< short pointer */
finsh_type_int, /**< int */
finsh_type_uint, /**< unsigned int */
finsh_type_intp, /**< int pointer */
finsh_type_long, /**< long */
finsh_type_ulong, /**< unsigned long */
finsh_type_longp, /**< long pointer */
};
FINSH_VAR_EXPORT(name, type, desc)
举例
#include <finsh.h>
int var;
int hello_rtt(int a)
{
rt_kprintf("hello, world! I am %d\n", a);
return a;
}
FINSH_FUNCTION_EXPORT(hello_rtt, say hello to rtt)
FINSH_VAR_EXPORT(var, finsh_type_int, just a var for test)
msh模式
添加msh命令:
使用宏,参数一是函数名字,参数二是说明
MSH_CMD_EXPORT(hello , say hello to RT-Thread);
无参函数:void hello(void)
有参函数:static void hello(int argc, char**argv)
例
static void main_log(int argc, char**argv)
{
rt_kprintf("argc :%d\n",argc);
rt_kprintf("1 :%s\n", &argv[0][0]);
rt_kprintf("2 :%s\n", &argv[1][0]);
}
MSH_CMD_EXPORT(main_log, ulog_test);
输出结果
发→◇main_log 1234
收←◆main_log 1234
argc :2
1 :main_log
2 :1234
使用举例,参数是一个字符串和数字
static void main_log(int argc, char**argv)
{
char name[10];
uint8_t level;
if(argc!=3)
{
LOG_I("main_log arg size");
return;
}
rt_kprintf("argc :%d\n",argc);
rt_kprintf("1 :%s\n", &argv[0][0]);
rt_kprintf("2 :%s\n", &argv[1][0]);
rt_kprintf("3 :%s\n", &argv[2][0]);
rt_memcpy(name,&argv[1][0],rt_strlen(&argv[1][0])+1);
rt_kprintf("name :%s\n", name);
level = atoi(&argv[2][0]);
rt_kprintf("level :%d\n", level);
if(ulog_tag_lvl_filter_set(name,level) ==0)
{
LOG_I("main_log set ok");
}
else
{
LOG_I("main_log arg error");
}
}
MSH_CMD_EXPORT(main_log, ulog_test);
基本命令
list_thread
返回结果:
msh />list_thread
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
tshell 20 ready 0x00000118 0x00001000 29% 0x00000009 000
tidle 31 ready 0x0000005c 0x00000200 28% 0x00000005 000
timer 4 suspend 0x00000078 0x00000400 11% 0x00000009 000
字段 | 描述 |
---|---|
thread | 线程的名称 |
pri | 线程的优先级 |
status | 线程当前的状态 |
sp | 线程当前的栈位置 |
stack | size 线程的栈大小 |
max | used 线程历史中使用的最大栈位置 |
left tick | 线程剩余的运行节拍数 |
error | 线程的错误码 |
显示信号量状态
使用 list_sem 命令来显示系统中所有信号量信息,包括信号量的名称、信号量的值和等待这个信号量的线程数目。
msh />list_sem
semaphore v suspend thread
-------- --- --------------
shrx 000 0
e0 000 0
字段 | 描述 |
---|---|
semaphore | 信号量的名称 |
v | 信号量当前的值 |
suspend thread | 等待这个信号量的线程数目 |
显示动态内存状态
msh />free
total memory: 7669836
used memory : 15240
maximum allocated memory: 18520
字段 | 描述 |
---|---|
total memory | 内存总大小 |
used memory | 已使用的内存大小 |
maximum allocated memory | 最大分配内存 |
网友评论