MSH_CMD_EXPORT_ALIAS() 函数接口详解
是,用于将自定义函数注册为 msh (Micro Shell) 命令。它允许开发者:创建自定义 shell 命令指定命令别名添加帮助文档实现函数与命令的绑定。
MSH_CMD_EXPORT_ALIAS() 是 RT-Thread 操作系统特有的宏,用于将自定义函数注册为 msh (Micro Shell) 命令。它允许开发者:
-
创建自定义 shell 命令
-
指定命令别名
-
添加帮助文档
-
实现函数与命令的绑定
函数原型
MSH_CMD_EXPORT_ALIAS(command_func, command_name, command_description);
参数说明:
| 参数 | 类型 | 说明 |
|---|---|---|
command_func |
函数指针 | 命令对应的执行函数(必须符合 int func(int argc, char **argv) 格式) |
command_name |
字符串 | 在 shell 中使用的命令名称 |
command_description |
字符串 | 命令帮助信息(显示在 help 命令中) |
使用示例分析:
int batt(int argc, char **argv);
MSH_CMD_EXPORT_ALIAS(batt, batt, cfg batt log command (batt log <1>(0:off 1:on)));
效果说明:
-
命令注册:
-
创建名为
batt的 shell 命令 -
执行该命令时会调用
batt()函数
-
-
帮助文档:
-
当用户输入
help时显示:batt - cfg batt log command (batt log <1>(0:off 1:on)) -
命令使用:
-
# 开启电池调试日志
batt log 1
# 关闭电池调试日志
batt log 0
运行时流程
-
用户输入
batt log 1 -
Shell 解析器在命令表中查找
batt -
找到对应的
batt()函数 -
构造参数:
-
argc = 3
argv[0] = "batt"
argv[1] = "log"
argv[2] = "1" -
执行
batt(3, argv)
关键特性
-
静态注册:
-
在编译时完成注册
-
不占用运行时资源
-
-
自动集成:
-
自动添加到 msh 命令系统
-
自动支持
help命令显示
-
-
别名机制:
-
支持命令别名(如可同时注册
batt和battery)
-
-
类型安全:
-
强制要求函数签名
int func(int, char**)
-
典型使用场景:
// 定义命令执行函数
int led_control(int argc, char **argv)
{
if(argc < 2) return -1;
if(strcmp(argv[1], "on") == 0) {
rt_pin_write(LED_PIN, PIN_HIGH);
} else {
rt_pin_write(LED_PIN, PIN_LOW);
}
return 0;
}
// 注册命令(带别名)
MSH_CMD_EXPORT_ALIAS(led_control, led, control LED: led [on/off]);
使用效果:
// 正确
int my_cmd(int argc, char **argv)
// 错误(会导致运行时崩溃)
void my_cmd(void);
-
字符串常量存储:
-
描述字符串存储在 ROM 区
-
需使用常量字符串(不能是动态分配)
-
-
多命令注册:
同一函数可注册多个别名
// 注册两个命令指向同一函数
MSH_CMD_EXPORT_ALIAS(led_control, led, ...);
MSH_CMD_EXPORT_ALIAS(led_control, light, ...);
与 MSH_CMD_EXPORT 的区别:
// 标准注册(使用函数名作为命令名)
MSH_CMD_EXPORT(led_control, control LED);
// 等效于
MSH_CMD_EXPORT_ALIAS(led_control, led_control, control LED);
该宏是 RT-Thread 开发中扩展系统功能的关键接口,通过它可快速构建交互式调试命令系统。
更多推荐



所有评论(0)