MSH_CMD_EXPORT_ALIAS() 是 RT-Thread 操作系统特有的宏,用于将自定义函数注册为 msh (Micro Shell) 命令。它允许开发者:

  1. 创建自定义 shell 命令

  2. 指定命令别名

  3. 添加帮助文档

  4. 实现函数与命令的绑定

函数原型

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)));

效果说明:
  1. 命令注册

    • 创建名为 batt 的 shell 命令

    • 执行该命令时会调用 batt() 函数

  2. 帮助文档

    • 当用户输入 help 时显示:batt - cfg batt log command (batt log <1>(0:off 1:on))

    • 命令使用

                # 开启电池调试日志
                batt log 1

                # 关闭电池调试日志
                batt log 0

运行时流程
  1. 用户输入 batt log 1

  2. Shell 解析器在命令表中查找 batt

  3. 找到对应的 batt() 函数

  4. 构造参数:

  5. argc = 3
    argv[0] = "batt"
    argv[1] = "log"
    argv[2] = "1"

  6. 执行 batt(3, argv)

关键特性

  1. 静态注册

    • 在编译时完成注册

    • 不占用运行时资源

  2. 自动集成

    • 自动添加到 msh 命令系统

    • 自动支持 help 命令显示

  3. 别名机制

    • 支持命令别名(如可同时注册 batt 和 battery

  4. 类型安全

    • 强制要求函数签名 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);

  1. 字符串常量存储

    • 描述字符串存储在 ROM 区

    • 需使用常量字符串(不能是动态分配)

  2. 多命令注册

    同一函数可注册多个别名

    // 注册两个命令指向同一函数

    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 开发中扩展系统功能的关键接口,通过它可快速构建交互式调试命令系统。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐