MSH二级补全API使用示例

api/宏 说明
cmd_options_statement(name)
msh_opt_id_get(name)
msh_opt_dump(name)
cmd_options_node_start(name)
cmd_options_node(id, cmd, desc)
cmd_options_node_end
以上宏中 name 参数最好与命令函数字符串一致, 子选项固定为命令后的第一个字符串(argv[1])。
cmd_options_node:添加一个子选项, 第一个参数是子命令的id,这个宏必须在cmd_options_node_start 和 cmd_options_node_end之间。
msh_opt_id_get:用于检索子选项对应的id,也是cmd_options_node中填写的id,可以与switch配合使用。
cmd_options_statement:这个宏必须定义在命令函数实现之前,因为使用这个宏会创建一个结构体参数。
msh_opt_dump:用于dump出子命令及命令描述。
msh_cmd_export 和 msh_cmd_export_alias宏与之前兼容,如需使用二级补全,只需再添加一项参数,内容不限。
宏对比:
msh_cmd_export(command, desc) or msh_cmd_export(command, desc, opt)
msh_cmd_export_alias(command, alias, desc) or msh_cmd_export_alias(command, alias, desc, opt)
使用二级补全实现一个demo,用于读写内存
#include
#include
#include
static rt_uint64_t data[100];
int main(void)
{
printf(hello rt-threadn);
printf(data addr: %pn, data);
return 0;
}
cmd_options_statement(memroy_tools)
static int memroy_tools(int argc, char *argv[])
{
rt_uint64_t address, value;
if (argc >= 3)
{
address = strtoul(argv[2], rt_null, 0);
switch (msh_opt_id_get(memroy_tools))
{
case 1:
value = hwreg64(address);
rt_kprintf(addr:%p = %pn, address, value);
break;
case 2:
if (argc >= 4)
{
value = strtoul(argv[3], rt_null, 0);
hwreg64(address) = value;
rt_kprintf(addr:%p = %pn, address, value);
}
break;
default:
goto _usage;
break;
}
}
else
{
goto _usage;
}
return 0;
_usage:
rt_kprintf(usage: mt [options] address [value]n);
rt_kprintf([options]:n);
msh_opt_dump(memroy_tools);
return 0;
}
cmd_options_node_start(memroy_tools)
cmd_options_node(1, readq, read address)
cmd_options_node(2, writeq, write address value)
cmd_options_node_end
msh_cmd_export_alias(memroy_tools, mt, memroy tools, options);
测试日志:
| /
rt - thread operating system
/ | 5.0.1 build oct 8 2023 00:09:31
2006 - 2022 copyright by rt-thread team
file system initialization fail!
hello rt-threadmsh />
data addr: 0x40101008
msh />
msh />mt
usage: mt [options] address [value]
[options]:
readq - read address
writeq - write address value
msh />
msh />
msh />mt rea
readq
msh />mt readq 0x40101008
addr:0x0000000040101008 = 0x0000000000000000
msh />
msh />mt w
writeq
msh />mt writeq 0x40101008 0x1234
addr:0x0000000040101008 = 0x0000000000001234
msh />
msh />mt re
readq
msh />mt readq 0x40101008
addr:0x0000000040101008 = 0x0000000000001234

3G手机射频集成障碍
Yolov3&Yolov4核心基础知识
ios10.3.2公测版发布,是良心还是挖坑?重新支持32位设备,神速关闭ios10.2.1和ios10.3的系统验证通道
智能化汽车如何发展,四维智联提出智能座舱交互思考
如何使用ARM7-LPC2148微控制器中的PWM控制LED的亮度
MSH二级补全API使用示例
基于TMS320VC5402处理器实现无线定位模拟系统的设计
免驱动即插即用HDMI转VGA转换器的介绍
MAX3669 低功耗622Mbps激光驱动器
今年在两会上有哪些关于物联网的议题呢?
中商北斗和币安中国区块链研究院合作 助力中国数字经济发展
盘古大模型和混元模型的区别
机器人零拷贝数据传输编程开发
华勤H8230 4U8卡AI服务器,助力企业数字化转型价值提升
踏歌智行参编的《智能化矿山数据融合共享规范》正式发布
CNR插槽
英菲尼迪将推首款纯电动跑车 使用新平台打造
面向现场 三相永磁无刷电机的技术研究
能优异导热填料粉:片状氮化铝导热高于球形氮化铝吗?
金融街论坛会将采取线上和线下相结合方式,打造“全球金融云端盛会”