xiatian_xjtu 发表于 2024-3-15 15:25:17

介绍下我做的C语言解释器

非广告,纯技术交流,抛砖引玉。
大家来这个论坛,相信好多网友都和我一样都是因开发人机界面emwin的找到了这里。很佩服硬汉的实力和对技术的狂热!

做解释器的初衷来自看了arduino,micropython,lua等可以简单快速实现一些应用。我想把这思路用到电机控制上,其实电机一旦底层驱动调试好了,剩下的就是定义它的行为,如转多快,转多少圈等。如果能把应用功能和驱动分开,会很方便,即使不懂电机驱动的人也能开发应用功能。
由于是想用在电机控制上,自然想弄清楚这些解释器的全部细节,不然出问题的话电机驱动可能都烧掉了。一方面是个人能力精力有限,难以看懂全部细节,另一方面看着看着感觉这些动态语言不适合电机控制,任何一个变量首先是个对象(一个很复杂的结构体),简单一个加法还要判断加的是数字还是字符串,列表字典这些便利数据类型电机控制用不上,另外还有垃圾回收等太复杂。看了一些开源的东西,我萌生了开发一个C语言解释器的想法,主要是大部分开发单片机的人都熟悉C语言语法,再一个我想搞静态语言,机制越简单可靠性越高。

解释器的目标是将底层驱动与应用功能分离,以便无驱动经验人员开发应用功能。技术路线和python类似,解释器将脚本编译为字节码,单片机内置一个虚拟机解释执行字节码,电机控制或人机界面等驱动封装成系统运行时,以API的形式供脚本程序员调用。

套了一层解释器的壳,可以在PC上开发一个和单片机一样的虚拟机,这样PC和MCU都可以在同样的虚拟机上跑同样的解释器字节码,32bit模式PC和32bitArm单片机虚拟机程序几乎可通用。底层驱动不一样,PC是SDL2实现画点,MCU是LTDC外设画点,但使用同样的API后,可以实现一次编码,PC和MCU都能执行,效果完全一致。无论电机还是人机界面,都能无实体硬件在PC上仿真模拟。脚本程序设计在sram中运行,程序可快速加载或热更新。有了虚拟机,实现多任务也简单了,因为可以多分配几个虚拟机,每个虚拟机执行一个线程,有自己独立的栈。时间片一到,虚拟机就切换到下一个虚拟机(线程)。

后来有一天我看到一个介绍,才知道脚本语言这东西用的最多是游戏行业。自己做编译器、调试器、设计器、IDE等等,好处可以玩各种花样,例如我可以把常规的人机界面和控制器两个工程集成在一个工程里,可共享一个公共的模型数据,还可同时观察二者通信过程。目前我自我感觉成熟度也不够,通用化也欠缺,简单说还糙了点,暂不考虑开源。

搞工控自然离不开人机界面,很快我也开始尝试把解释器用于人界面开发。由于emwin不开源,我自己尝试搞了一套比较菜和粗糙的gui,大部分工控应用不考虑炫酷动画和色彩渲染的话也够用了。






eric2013 发表于 2024-3-15 16:05:39

{:8:}

楼主有可供测试的地址连接没。

tovinz 发表于 2024-3-15 16:56:32

666,这是在单片机里运行起来了个编译器啊。

这里还有一个很有意思的开源项目 https://github.com/rswier/c4

庄永 发表于 2024-3-15 17:53:55

厉害,有测试地址吗

春回大地 发表于 2024-3-15 18:58:31

之前有个用Lua解释器做PLC的想法,跟LZ有点类似,不过还没有动手写代码,哈哈
C语言解释器有很多比较著名的开源项目,没必要自己写,LZ可以专注框架和组件的实现

phy1335 发表于 2024-3-19 13:48:26

厉害了{:8:}

唐伯虎点蚊香 发表于 2024-3-19 14:06:47

论坛可真是卧虎藏龙
页: [1]
查看完整版本: 介绍下我做的C语言解释器