搜索
bottom↓
回复: 12

【原创】可能是目前运行最快最小的Cortex M脚本

[复制链接]

出0入93汤圆

发表于 2021-5-19 06:31:59 | 显示全部楼层 |阅读模式
大概目前全网也找不到比我这个更快的了,虽然还有很大的局限性...

首先是大家关注的资源占用:ROM 几十字节,RAM 0~若干字节。为什么说ROM有几十字节呢,因为要交互,某些必要的坏境还是要的。脚本自己完全不使用RAM,全部依赖宿主。然后是运行速度,可以肯定和lua、micropython不是一个等级,比luajit强点,大概能达到未优化的C水平。
为什么说是大概呢,因为它达到了Keil MDK的O0水平,有一点点优化但可以认为是没有。这就是一个还算完整的C语言编译器吧,当然也可以直接写汇编,最终生成hex文件,我做成一个批处理了,cm0cc *.c,或者简单点直接把c文件拖到cm0cc.cmd上面就可以。除了hex文件外还额外生成两个文件,一个是目标文件,另一个是反汇编文件。方便查看。

凡事都有规范,这个也不例外。基本上符合所有合法的C89语法,支持部分C99语法。局限就多了:只支持一个c文件,可以通过#include包含其他文件;完全禁止全局变量、静态变量;禁止声明数组、结构、联合时赋初值,简单类型可以直接赋初值;long long类型可能不见得正确;浮点要引入函数但我没有实现最好通过宿主API实现;程序入口并不是main函数,而是C文件的第一个函数,所以可以没有main函数可以随便命名。
所有变量都是局部变量,禁止全局变量和静态变量,否则生成hex文件空间重叠,呵呵。局部变量全部位于堆栈,没使用的也占空间,基本没有优化。没有全局变量/静态变量我弄了个Global*指针曲线救国,空间由宿主分配,脚本不分配。因为不占用RAM所以RAM地址无关。生成的代码是地址无关的,随便放哪儿都能运行。

当然也可以用Keil、IAR、GCC直接编译,这样更优化,但是它们的编译器太大了,生成脚本代码未免有杀鸡牛刀之嫌。我这个400kB左右。

编译器放上来,里面有个我写的范例n.c,生成的hex文件、目标文件n.o、反汇编文件n.ls都有。hex文件可以和n.ls对照。应该直接从.ls文件生成.bin文件的,懒得搞了。



如果需要带有源代码的Cortex M jit编译器,可以看看c5x86那个版本,然后把生成x86的代码改成生成cm0就好了。c5x86我测试了斐波那契数列递归,直接生成x86代码的,比luajit、V8都快那么一点点,和tcc生成的差不多。不需要jit的话,c4就差不多了。

本帖子中包含更多资源

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

x

出0入4汤圆

发表于 2021-5-19 07:02:04 | 显示全部楼层
大牛

出0入135汤圆

发表于 2021-5-19 08:42:43 来自手机 | 显示全部楼层
大神都做出来免费分享了,我居然看不懂是干啥用的,有时候感觉自己一无是处

出0入0汤圆

发表于 2021-5-19 09:10:56 | 显示全部楼层
yelong98 发表于 2021-5-19 08:42
大神都做出来免费分享了,我居然看不懂是干啥用的,有时候感觉自己一无是处 ...

我都感觉自己是个文盲,哈哈哈

出0入0汤圆

发表于 2021-5-19 09:15:20 | 显示全部楼层
我也没看明白

出95入100汤圆

发表于 2021-5-19 09:19:53 | 显示全部楼层
一个400k的内嵌的c语言解释执行器?

出0入93汤圆

 楼主| 发表于 2021-5-19 09:44:17 来自手机 | 显示全部楼层
lhj200304 发表于 2021-5-19 09:19
一个400k的内嵌的c语言解释执行器?

怎么可能是解释执行的,解释执行能说速度吗。编译生成Thumb-2指令直接执行的。

出0入0汤圆

发表于 2021-5-19 10:02:35 | 显示全部楼层
看明白了。  就是在上位机上 ,有一个 400k的程序 ,可以生成  接近 c 效率的 位置无关的hex代码 。 这个代码可以下载到下位机执行。
方便后期下位机升级功能用 。
本质就是一个灵巧的 c编译器。 不用安装庞大的keil c等。

出0入147汤圆

发表于 2021-5-19 10:07:29 | 显示全部楼层
这个不能说是脚本,可以算是简化版的动态库编译器了, 从实现的功能看,这个应该是为自动化代码生成服务的, 手写代码很难满足同时这些限制

出615入1076汤圆

发表于 2021-5-19 10:17:56 来自手机 | 显示全部楼层
gcc 不香嗎?

出0入0汤圆

发表于 2021-5-19 11:49:20 | 显示全部楼层
看标题像是开发了一个小巧的脚本解释器,看内容却是一个残缺的C编译器。

出0入4汤圆

发表于 2021-5-19 11:58:47 | 显示全部楼层
takashiki 发表于 2021-5-19 09:44
怎么可能是解释执行的,解释执行能说速度吗。编译生成Thumb-2指令直接执行的。 ...


如果方便的话,方便分亨用的编译器吗,相关的编译参数呢?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-18 17:36

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

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