Skip to content

Repository files navigation

作者吐槽1

        在这里,我先 DISS 一下这篇文章https://zhuanlan.zhihu.com/p/141409031还有这份代码https://github.com/jiejieTop/cmd-parser

        为什么 DISS 这份文章和代码呢?

        缘由是这样的,我需要个如同终端这样的字符解释器,根据我输入的字符来调用不同的函数,对板子进行调试,搜索了一些词条,但都是关于Power Shell亦或者是Unix shell的命令表格,跟我的需求都不搭边,唯一符合的就只有以上的这个知乎的文章链接。

        一开始我看见了这个符合我预期的东西还是挺开心的,但是点进GitHub仓库一看,好家伙,几个issue都没有处理,关键是这几个issue都是关于代码移植以后各种报错、跑不起来,还有几个pull request都没有处理,这完全是没人管的一个东西。再细看代码,发现在line:67处有这么一句,

 printf("%s -->%s\n",index->cmd,index->desc);

而这个index的定义是这样的

typedef void (*cmd_handler)(void);

typedef struct cmd {
    const char*     cmd;
    const char*     cmd_mess;
    unsigned int    hash;
    cmd_handler     handler;
} cmd_t;


static void _list(void)
{
    cmd_t *index;
    for (index = _cmd_begin; index < _cmd_end; index = _get_next_cmd(index)) {
        printf("%s -->%s\n",index->cmd,index->desc);
    }
}

于是我自己写了这个能满足我需求的终端。


创建于2024-11-11 20:44

修改时间2024-11-18 6:37


作者吐槽2

        原本在ESP32上使用这个链表命令解析器用得还挺好的,直到更换了SRAM更低的MCU,比如我最近用的这个WCH-571F,只要一旦启用了BLE功能,动不动就会出现堆栈踩踏的现象,导致原本申请的堆空间被破坏导致程序跑飞了。

        无奈之下只好再搞个HASH版本的命令解析器,解决了字符串占用大量堆空间的问题,也简化了节点的结构复杂度,进一步减少对SRAM的占用。

        后面发现WCH-571FSRAM还是太有限(18KB)了,想要遍历BLE服务都做不了,而且即便我用了这个版本的命令解析,依旧会有部分命令被覆盖,又转而用WCH-582M(32KB)才缓解了这个问题。

修改时间2025-10-02 18:34


作者吐槽3

    现在用上了CH585M,在家里啃老又过了一年哩,还是啃老舒服呢。

    说正事,原本CH571F转到CH582F上用了,但是需求又增了,现在为了配合别的外设,得共用同一套文件系统,也为了显示图片,升级到了CH584F,随着提出的需求越来越多,我的工作量也随之水涨船高,当真是提出线性升级需求,工作量如指数级增长。

    这次是因为指令解析只带了一个HandleFn,面对需要借助指令来区分现在是什么数据传输模式,就不能达到工作预期,只能强行通过外部数据结构将其捆绑在一块(状态机),需要我手动去维护这个指令处理&数据处理的表,这次就需要为它增加不限制数量的数据处理functions

修改时间2026-07-13 08:23

📖 命令解析器已升级至 cmdTree v2.0(树形路由 + BLE 数据回调自动绑定)

🍚 新手入门请阅读 食用手册(环境搭建 + 编译运行测试)

About

用于单片机上的简易命令行( Simple CMD )

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages