硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4947|回复: 4
收起左侧

[STM32H7] 终端命令解析器

[复制链接]

19

主题

72

回帖

129

积分

初级会员

积分
129
发表于 2021-2-8 13:23:01 | 显示全部楼层 |阅读模式
此处的终端可以是:串口,Telnet,SSH等等,对于单片机来说,一般我们会这么做:
  1. typedef bool (* callback_t)(int argc, char **argv);
  2. typedef struct
  3. {
  4.    int                       cmd;
  5.    callback_t callback;
  6. } console_t;

  7. static console_t cmd_items =
  8. {
  9. {...},
  10. };

  11. bool parser(const char *string, int length)
  12. {
  13.   argc = string_seperation(string, argv)

  14. // loop scan cmd_items
  15.   for (i = 0; i < (int)(sizeof(cmd_items) / sizeof(cmd_items[0])); ++i)
  16.   {
  17.     if(argv[0] == cmd_items[i].cmd)
  18.     {
  19.         if (cmd_items[i].callback)
  20.         {
  21.             cmd_items[i].callback(argc, argv);
  22.            break;
  23.         }
  24.     }
  25.   }

  26. ...
  27. }

复制代码

对于一般的单片机程序来说,这样处理就行了。


但是这样,对于多语言的支持是不够灵活的,要如何设计支持多语言的命令解析器呢?Linux下有yacc/lexx和flex/bison,但是对于单片机来说太大了,不太适合单片机。


找到几个其它的解析器:
LEMON
Ragel
re2c

硬汉哥,有较好的支持多语言的解析器吗?







回复

使用道具 举报

2

主题

272

回帖

278

积分

高级会员

积分
278
发表于 2021-2-8 21:55:55 | 显示全部楼层
LetterShell 你值得拥有,我移植了V7的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107626
QQ
发表于 2021-2-8 23:34:26 | 显示全部楼层
学习下,这些都没用过。
回复

使用道具 举报

74

主题

1225

回帖

1447

积分

至尊会员

积分
1447
发表于 2021-2-9 16:59:18 | 显示全部楼层
你好,能分享你的工程吗??谢谢
回复

使用道具 举报

19

主题

72

回帖

129

积分

初级会员

积分
129
 楼主| 发表于 2021-2-10 19:19:23 | 显示全部楼层
cctv180 发表于 2021-2-8 21:55
LetterShell 你值得拥有,我移植了V7的

对于多语言支持可不怎么好哦,,,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-8 07:15 , Processed in 0.165337 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表