搜索
bottom↓
回复: 41

【开源软件】单片机轻量命令解释器MicroScript

  [复制链接]

出0入0汤圆

发表于 2017-7-13 12:54:28 | 显示全部楼层 |阅读模式
本帖最后由 独孤帅 于 2017-7-13 15:22 编辑

最近项目中实现了一个适合单片机的轻量化命令解释器,这里给大家展示一下,整理好后会开源

我叫它MicroScript,取小脚本的意思
这个解释器主要实现:实际应用中上位机发来的字符串到下位机C语言函数之间的对应关系
特点:使用负担小,10分钟内移植并上手,对机器要求不高

如:按以下格式输入一个字符串 command para1,para2,para3......
解释器会到静态注册列表里去寻找"command"这条命令,如果找到了就执行它的回调函数,并传入参数

QQ群:640198673

使用方式:
1、实现处理命令的回调函数,类似C语言的主函数,有参数个数和参数字符串数组两个入口参数,返回0代表执行失败,返回1代表成功



2、在静态命令列表中填写命令名和执行命令的回调函数,并在头文件中声明原函数



3、调用MScript(char* Script, MError* Error)函数,如果脚本字符串中有相关命令及参数,则执行回调函数

我用串口写了一个demo,大家可以感受一下(另有变量系统施工中,下图有体现)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

 楼主| 发表于 2017-7-28 12:28:32 来自手机 | 显示全部楼层
测试版代码已放出,请各位加群讨论

出0入21汤圆

发表于 2017-7-13 12:59:47 | 显示全部楼层
表示看不大懂

出0入0汤圆

发表于 2017-7-13 13:11:56 | 显示全部楼层
感觉好像不是太灵活啊,变量和流程控制语句都没有?
我以前在 CSR1010 上移植了一个非常小的 Tcl 脚本解释器,变量、字符串和 if, while 等这些都支持,但还是非常难用的

出0入442汤圆

发表于 2017-7-13 13:19:31 来自手机 | 显示全部楼层
wudicgi 发表于 2017-7-13 13:11
感觉好像不是太灵活啊,变量和流程控制语句都没有?
我以前在 CSR1010 上移植了一个非常小的 Tcl 脚本解释 ...

很像uboot的env。。。

出0入0汤圆

 楼主| 发表于 2017-7-13 13:29:05 | 显示全部楼层
wudicgi 发表于 2017-7-13 13:11
感觉好像不是太灵活啊,变量和流程控制语句都没有?
我以前在 CSR1010 上移植了一个非常小的 Tcl 脚本解释 ...

这个tcl解释器需要多少内存?

我这里只是为了满足实际应用中简单的含参命令和变量控制,只有解释器里的字符串缓存占了0.5KB的内存
可以在十分钟内应用于调试、日志打印
把这个拿出来开源,主要是觉得这种解释器对使用者负担十分小,容易接受,移植和学习都是几分钟的事情,而且也不会太吃内存

出0入0汤圆

发表于 2017-7-13 13:37:34 | 显示全部楼层
楼主贴出QQ群是啥意思?不要ID了么

出0入0汤圆

发表于 2017-7-13 13:57:24 | 显示全部楼层
和正点原子那个USMART 有什么不一样么。
以下是找的usmart的介绍
USMART是由ALIENTEK开发的一个灵巧的串口调试互交组件,通过它你可以通过串口助手调用程序里面的任何函数,并执行。因此,你可以随意更改函
数的输入参数(支持数字(10/16进制)、字符串、函数入口地址等作为参数),单个函数最多支持10个输入参数,并支持函数返回值显示。

出0入0汤圆

 楼主| 发表于 2017-7-13 15:18:24 | 显示全部楼层
shower.xu 发表于 2017-7-13 13:57
和正点原子那个USMART 有什么不一样么。
以下是找的usmart的介绍
USMART是由ALIENTEK开发的一个灵巧的串口 ...

没有这么高级,主要是让上位机发字符串做一些控制,可以加上校验用于实际产品,也可以用于调试时做临时终端

特点:使用负担小,学习成本极低

出0入0汤圆

发表于 2017-7-13 15:25:11 | 显示全部楼层
和正点原子那个USMART 有什么不一样么?

出0入0汤圆

 楼主| 发表于 2017-7-13 15:27:49 | 显示全部楼层
Excellence 发表于 2017-7-13 15:25
和正点原子那个USMART 有什么不一样么?

最大特点是简单粗暴,占用小,10分钟内上手

出0入0汤圆

发表于 2017-7-13 15:28:45 | 显示全部楼层
感觉和那个qshell类似!!!!

出0入0汤圆

发表于 2017-7-13 15:30:28 | 显示全部楼层
最近用QT通过JLINK控制STM32F407...也是简单粗暴。

出870入263汤圆

发表于 2017-7-13 15:33:16 | 显示全部楼层
还是回调这样的更习惯:
int command_handler(int argc, void *argv[]);

出0入0汤圆

 楼主| 发表于 2017-7-13 15:38:06 | 显示全部楼层
armstrong 发表于 2017-7-13 15:33
还是回调这样的更习惯:
int command_handler(int argc, void *argv[]);

这不是防止有人说我雷同嘛

出0入0汤圆

 楼主| 发表于 2017-7-13 15:39:41 | 显示全部楼层
OneRain 发表于 2017-7-13 15:28
感觉和那个qshell类似!!!!

用我这个解释器,不需要修改代码,只需要把文件添加进工程,然后花10分钟熟悉一下怎么用即可

出0入0汤圆

发表于 2017-7-13 16:44:27 | 显示全部楼层
可扩展性很差,没有help

出0入0汤圆

发表于 2017-7-13 17:01:31 | 显示全部楼层
MicroScript貌似比C更难学吗?

出0入0汤圆

发表于 2017-7-13 17:01:33 | 显示全部楼层
关注一下!

出0入0汤圆

发表于 2017-7-13 17:02:31 | 显示全部楼层
很好  很强大!

出0入0汤圆

 楼主| 发表于 2017-7-13 17:05:25 | 显示全部楼层
weichao4808335 发表于 2017-7-13 17:01
MicroScript貌似比C更难学吗?

语法只有一条
command para1,para2,para3......
command是命令名,与参数列表用空格隔开

具体的内容在解释器内定义,一条条注册即可

出0入0汤圆

 楼主| 发表于 2017-7-13 17:05:41 | 显示全部楼层
heianshaonian 发表于 2017-7-13 16:44
可扩展性很差,没有help

可以具体说说吗

出0入0汤圆

发表于 2017-7-13 17:07:51 | 显示全部楼层
独孤帅 发表于 2017-7-13 17:05
语法只有一条
command para1,para2,para3......
command是命令名,与参数列表用空格隔开


如果能做的支持多一些指令就好了,并且带监控,可以在工控上替代PLC

出0入0汤圆

发表于 2017-7-13 17:08:34 | 显示全部楼层
Excellence 发表于 2017-7-13 15:30
最近用QT通过JLINK控制STM32F407...也是简单粗暴。

期待,分享

出0入0汤圆

发表于 2017-7-13 17:26:44 | 显示全部楼层

哈哈。我还下了你的控制运行停止软件。

出0入0汤圆

发表于 2017-7-13 17:47:24 | 显示全部楼层
Excellence 发表于 2017-7-13 17:26
哈哈。我还下了你的控制运行停止软件。

哦,好用吗?

出0入0汤圆

发表于 2017-7-13 19:00:49 | 显示全部楼层
水平有限,也没有看懂
不过还是支持楼主

出0入0汤圆

发表于 2017-7-13 19:58:33 | 显示全部楼层
独孤帅 发表于 2017-7-13 13:29
这个tcl解释器需要多少内存?

我这里只是为了满足实际应用中简单的含参命令和变量控制,只有解释器里的 ...

是这个 picol, a Tcl interpreter in 550 lines of C code
程序本身不算大,不过算上动态申请内存需要的空间肯定比你的 0.5KB 大了,毕竟功能也更多

出0入0汤圆

发表于 2017-7-14 08:25:54 | 显示全部楼层

好用。为啥不扩展功能?

出0入0汤圆

 楼主| 发表于 2017-7-14 11:52:08 | 显示全部楼层
weichao4808335 发表于 2017-7-13 17:07
如果能做的支持多一些指令就好了,并且带监控,可以在工控上替代PLC

这个只是解释器,指令的执行函数是自行实现的,按指定的原型实现程序,在注册表中注册后可以通过解释器用字符串访问
监控也是有的,但是具体做什么应用由用户决定,不是解释器的功能

出0入0汤圆

发表于 2017-7-14 12:00:32 来自手机 | 显示全部楼层
就是类似与cmd或者shell的交互系统,我记得rt-thread里也有类似这样的组件

出0入0汤圆

发表于 2017-7-15 17:08:59 来自手机 | 显示全部楼层
函数指针

出0入0汤圆

发表于 2017-7-16 09:35:03 来自手机 | 显示全部楼层
这个只是调用函数 没有流程控制语句么

出0入0汤圆

发表于 2017-7-16 14:02:53 来自手机 | 显示全部楼层
挺好的,比 usmart简单,移植也方便

出0入0汤圆

发表于 2017-7-16 19:18:50 来自手机 | 显示全部楼层
楼主提供了个思路,这个是是文字跟函数对应,

出0入0汤圆

发表于 2017-7-20 13:01:58 来自手机 | 显示全部楼层
值得借鉴,可用于串口通信处理中。

出0入0汤圆

发表于 2017-7-28 17:47:47 | 显示全部楼层
楼主,可以借鉴uboot的解析器

出0入0汤圆

发表于 2017-7-28 19:28:22 | 显示全部楼层
OneRain 发表于 2017-7-13 15:28
感觉和那个qshell类似!!!!

qshell不错,一直在用。

出0入8汤圆

发表于 2017-7-28 23:21:31 来自手机 | 显示全部楼层
好东西    学习

出100入101汤圆

发表于 2017-7-29 07:29:34 来自手机 | 显示全部楼层
还不错,脚本规则简单了些

出0入0汤圆

发表于 2017-9-2 10:24:27 | 显示全部楼层
mark!

辛苦了

出0入0汤圆

发表于 2017-9-2 13:45:33 | 显示全部楼层
shower.xu 发表于 2017-7-13 13:57
和正点原子那个USMART 有什么不一样么。
以下是找的usmart的介绍
USMART是由ALIENTEK开发的一个灵巧的串口 ...

我也感觉相似或者借鉴了部分...但是没明白怎么解析脚本,以及怎么执行的....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-28 19:36

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

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