takashiki 发表于 2021-5-19 06:31:59

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

大概目前全网也找不到比我这个更快的了,虽然还有很大的局限性...

首先是大家关注的资源占用: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就差不多了。

baal 发表于 2021-5-19 07:02:04

大牛{:lol:}

yelong98 发表于 2021-5-19 08:42:43

大神都做出来免费分享了,我居然看不懂是干啥用的,有时候感觉自己一无是处

stely 发表于 2021-5-19 09:10:56

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

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

rhyme 发表于 2021-5-19 09:15:20

我也没看明白{:dizzy:}

lhj200304 发表于 2021-5-19 09:19:53

一个400k的内嵌的c语言解释执行器?

takashiki 发表于 2021-5-19 09:44:17

lhj200304 发表于 2021-5-19 09:19
一个400k的内嵌的c语言解释执行器?

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

trigrass12 发表于 2021-5-19 10:02:35

看明白了。就是在上位机上 ,有一个 400k的程序 ,可以生成接近 c 效率的 位置无关的hex代码 。 这个代码可以下载到下位机执行。
方便后期下位机升级功能用 。
本质就是一个灵巧的 c编译器。 不用安装庞大的keil c等。

dreampet 发表于 2021-5-19 10:07:29

这个不能说是脚本,可以算是简化版的动态库编译器了, 从实现的功能看,这个应该是为自动化代码生成服务的, 手写代码很难满足同时这些限制

dukelec 发表于 2021-5-19 10:17:56

gcc 不香嗎?

michael.yang 发表于 2021-5-19 11:49:20

看标题像是开发了一个小巧的脚本解释器,看内容却是一个残缺的C编译器。

kyq_linux 发表于 2021-5-19 11:58:47

takashiki 发表于 2021-5-19 09:44
怎么可能是解释执行的,解释执行能说速度吗。编译生成Thumb-2指令直接执行的。 ...

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

wele 发表于 2021-5-19 12:37:33

不明觉厉,看起来高级,不知道怎么用
页: [1]
查看完整版本: 【原创】可能是目前运行最快最小的Cortex M脚本