一个c51程序移植到ARM,编译的code差别很大
keil c51编译的code是7884字节,而移植到ARM(M0内核),code是14094字节,怎么多出那么多呢?arm的代码密度也不高啊。 14KB的代码长度还没有包含RO的长度呢,RO是1.2KB 这不稀奇,M0本身就不怎么样,特别是GPIO操作又慢又费空间 51是8位单片机,指令长度是8位的,而arm是32位单片机,指令长度32位,当然也支持16位的Thumb,所以相同的代码,在arm上比51上大一倍是正常的 是不是还有人家arm芯片的库文件代码吧? 够用就行优化等级呢? -O3,op for size试试。 51一般默认开到8级优化。 xinyue_z 发表于 2021-11-16 08:54
51是8位单片机,指令长度是8位的,而arm是32位单片机,指令长度32位,当然也支持16位的Thumb,所以相同的代 ...
你这个算法是不对的,51花指令,指令长度1~n字节不等。 M0 thumb2,绝大多数指令2字节,部分4字节。 区别最大的是指令效率。 M0算个uint32加法,一条指令,51要十几条。其他的多字节运算都差不多这样。 51是CISC。感觉51的寿命会比Cortex-M要长。 不知道有没有用library aple0807 发表于 2021-11-16 11:26
你这个算法是不对的,51花指令,指令长度1~n字节不等。 M0 thumb2,绝大多数指令2字节,部分4字节。 区别 ...
一般都都是8和16的变量用得多,特别是楼主原来是51的,可能还有很多1bit的变量,这个转到32就更多指令了. 只要不是16位或32位的数据运算,ARM代码密度远不如C51 用了库的吧, 指令长度不一样 aple0807 发表于 2021-11-16 11:26
你这个算法是不对的,51花指令,指令长度1~n字节不等。 M0 thumb2,绝大多数指令2字节,部分4字节。 区别 ...
c51上单字节和双字节指令占了绝大多数,参考https://blog.csdn.net/oNicolasCage/article/details/46228269,另外请确认两者设定的编译优化选项是否相同。如果实在想搞清楚到底区别在哪里,可以分析一下.map文件,里面每一个函数占用的字节数都有详细的数据 两个速度都不一样 代码库占了很大空间 我觉得现在MCU性能过剩的情况下(相对以前)这些都可以不考虑 这些对于arm来说不叫事了
页:
[1]