XCMD ,针对mcu的命令行解释器

编程入门 行业动态 更新时间:2024-10-11 13:22:23

XCMD ,针对mcu的<a href=https://www.elefans.com/category/jswz/34/1771327.html style=命令行解释器"/>

XCMD ,针对mcu的命令行解释器

目录

介绍

源码获取

移植

Linux平台移植

Arduino平台移植

ESP32 平台移植

配置

注册自定义命令

注册自定义快捷键


介绍

        简易的单片机命令行工具,移植十分方便,可扩展性强;支持历史记录,支持注册快捷键。目前已经在Linux、STM32、ESP32、arduino等平台上进行了移植和验证。持续更新中。

源码获取

        xcmd源码地址

移植

        需要在初始化的时候提供字符输入输出函数即可

Linux平台移植

    /* 例如移植到linux平台 */int cmd_get_char(uint8_t *ch){*ch = getch();return 1;}int cmd_put_char(uint8_t ch){putchar(ch);return 1;}int main(void){/*调用初始化函数的时候传入字符输入输出函数*/xcmd_init(cmd_get_char, cmd_put_char);while(1){xcmd_task();}}

Arduino平台移植

/* 例如移植到Arduino平台 */
int cmd_get_char(uint8_t *ch)
{if(Serial.available()){*ch =  Serial.read();return 1;}else{return 0;}
}int cmd_put_char(uint8_t ch)
{Serial.write(ch);return 1;
}void setup() {Serial.begin(115200);xcmd_init(cmd_get_char, cmd_put_char);
}void loop() {xcmd_task();
}

ESP32 平台移植

int cmd_get_char(unsigned char *ch)
{*ch = getc(stdin);return 1;
}int cmd_put_char(unsigned char ch)
{putchar(ch);return 1;
}void app_main(void)
{xcmd_init(cmd_get_char, cmd_put_char);test_cmd_init();test_keys_init();while(1){xcmd_task();vTaskDelay(pdMS_TO_TICKS(10));}
}

配置

        用户可以在src/xcmd_config.h文件中进行裁剪,以支持更小内存空间的MCU;

#define XCMD_LINE_MAX_LENGTH    (32) /* 命令行支持的最大字符数 */
#define XCMD_HISTORY_MAX_NUM    (8)  /* 支持的历史记录个数,0为不支持 */
#define XCMD_PARAM_MAX_NUM      (4)  /* 支持输入的参数个数 */

注册自定义命令

        参考模板如下:

static void cmd_echo(int argc, char* argv[])
{if(param_check(1, argc, argv)){printf("%s\r\n", argv[1]);}
}static void cmd_example(int argc, char* argv[])
{uint8_t i;if(param_check(1, argc, argv)){if(strcmp(argv[1], "str") == 0){for(i=2; i<argc; i++){printf("%s\r\n", argv[i]);}}if(strcmp(argv[1], "int") == 0){for(i=2; i<argc; i++){printf("%d\r\n", atoi(argv[i]));}}if(strcmp(argv[1], "float") == 0){for(i=2; i<argc; i++){printf("%f\r\n", atof(argv[i]));}}}
}static xcmd_t cmds[] = 
{{"echo", cmd_echo, "print anything", NULL},{"example", cmd_example, "example [-f|-i|-s] [val]", NULL},
};void test_cmd_init(void)
{xcmd_register(cmds, sizeof(cmds)/sizeof(xcmd_t));
}

注册自定义快捷键

        模板如下:

int cmd_ctr_a(void* pv)
{printf("this is ctr+a\n");
}int cmd_ctr_c(void* pv)
{exit(0);
}static xcmd_key_t user_keys[] = 
{{CTR_A, cmd_ctr_a,  NULL},{CTR_C, cmd_ctr_c, NULL},
};void test_keys_init(void)
{xcmd_key_register(user_keys, sizeof(user_keys)/sizeof(xcmd_key_t));
}

更多推荐

XCMD ,针对mcu的命令行解释器

本文发布于:2024-02-27 00:29:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1704551.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:命令行   XCMD   mcu

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!