搜索
bottom↓
12
返回列表 发新帖
楼主: ilovepp

状态机代码自动生成工具

  [复制链接]

出0入0汤圆

发表于 2019-12-11 09:18:00 | 显示全部楼层
lib钱 发表于 2019-12-7 09:56
自动生成C++代码,然后手动改成C吗,不少台系单片机,内存小,C编译器功能弱,编译不了的吧。 ...


代码的生成是 python 脚本结合 mako 模板来做的,自己写个 C 语言版本的 Mako 模板就行。
照着 C++的版本照葫芦画瓢就行,去掉 QT 的东西。

  1. # coding: utf-8
  2. <%!
  3. from textwrap import wrap
  4. %>\
  5. #include <QVariant>
  6. #include <QQueue>
  7. #include <QPair>

  8. class ${machine.name} {
  9. public:
  10.     enum State {
  11.     % for s in machine.states[:-1]:
  12.             ${capitalCase(s.name)},
  13.     % endfor
  14.             ${capitalCase(machine.states[-1].name)}
  15.     };

  16.     enum Event {
  17.     % for e in machine.events[:-1]:
  18.             % for l in wrap(e.comment, 80):
  19.             //  ${l}
  20.             % endfor
  21.             ${capitalCase(e.name)},
  22.     % endfor
  23.             % for l in wrap(machine.events[-1].comment, 80):
  24.             //  ${l}
  25.             % endfor
  26.             ${capitalCase(machine.events[-1].name)}
  27.     };

  28.     class Delegate {
  29.         public:
  30.     % for i in machine.inputs:
  31.         %if i.comment:
  32.             %for l in wrap(i.comment, 80):
  33.         //  ${l}
  34.             %endfor
  35.         %endif
  36.         virtual bool ${i.name}(const QVariantMap& params) = 0;
  37.     % endfor

  38.     % for o in machine.outputs:
  39.         %if o.comment:
  40.                     % for l in wrap(o.comment, 80):
  41.         //  ${l}
  42.                     % endfor
  43.         % endif
  44.         virtual void ${o.name}(const QVariantMap& params) = 0;
  45.     % endfor
  46.     };

  47.         State currentState();
  48.         Delegate* delegate;
  49.         QQueue<QPair<Event, QVariantMap> > eventQueue;
  50.        
  51.        
  52.         ${machine.name}(Delegate * delegate);
  53.     void processEvent(Event event, const QVariantMap& params);
  54.     static QString stateName(State s);
  55.         State currentState() const;

  56. private:
  57.         void processEventInternal(Event event, const QVariantMap& params);
  58.     State _currentState;           
  59. };
复制代码

出200入0汤圆

发表于 2019-12-11 12:42:33 来自手机 | 显示全部楼层
mark 一下,谢谢分享

出0入0汤圆

发表于 2020-9-9 19:45:58 | 显示全部楼层
学习,学习,mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 16:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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