吾要单片机 发表于 2021-11-15 19:59

一个c51程序移植到ARM,编译的code差别很大

keil c51编译的code是7884字节,而移植到ARM(M0内核),code是14094字节,怎么多出那么多呢?arm的代码密度也不高啊。

吾要单片机 发表于 2021-11-15 20:19

14KB的代码长度还没有包含RO的长度呢,RO是1.2KB

ayb_ice 发表于 2021-11-16 08:35

这不稀奇,M0本身就不怎么样,特别是GPIO操作又慢又费空间

xinyue_z 发表于 2021-11-16 08:54

51是8位单片机,指令长度是8位的,而arm是32位单片机,指令长度32位,当然也支持16位的Thumb,所以相同的代码,在arm上比51上大一倍是正常的

前功尽弃 发表于 2021-11-16 10:12

是不是还有人家arm芯片的库文件代码吧?

keer_zu 发表于 2021-11-16 11:20

够用就行

aple0807 发表于 2021-11-16 11:20

优化等级呢? -O3,op for size试试。 51一般默认开到8级优化。

aple0807 发表于 2021-11-16 11:26

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要十几条。其他的多字节运算都差不多这样。

imdx 发表于 2021-11-16 12:15

51是CISC。感觉51的寿命会比Cortex-M要长。

海洋无限 发表于 2021-11-16 12:19

不知道有没有用library

e21 发表于 2021-11-16 12:22

aple0807 发表于 2021-11-16 11:26
你这个算法是不对的,51花指令,指令长度1~n字节不等。 M0 thumb2,绝大多数指令2字节,部分4字节。 区别 ...

一般都都是8和16的变量用得多,特别是楼主原来是51的,可能还有很多1bit的变量,这个转到32就更多指令了.

吾要单片机 发表于 2021-11-16 12:44

只要不是16位或32位的数据运算,ARM代码密度远不如C51

lu50211 发表于 2021-11-16 13:07

用了库的吧,

m564522634 发表于 2021-11-16 13:41

指令长度不一样

xinyue_z 发表于 2021-11-16 15:25

aple0807 发表于 2021-11-16 11:26
你这个算法是不对的,51花指令,指令长度1~n字节不等。 M0 thumb2,绝大多数指令2字节,部分4字节。 区别 ...

c51上单字节和双字节指令占了绝大多数,参考https://blog.csdn.net/oNicolasCage/article/details/46228269,另外请确认两者设定的编译优化选项是否相同。如果实在想搞清楚到底区别在哪里,可以分析一下.map文件,里面每一个函数占用的字节数都有详细的数据

trucyw 发表于 2021-11-16 16:24

两个速度都不一样

xiaofei558008 发表于 2021-11-16 19:05

代码库占了很大空间

90houyidai 发表于 2021-11-16 23:20

我觉得现在MCU性能过剩的情况下(相对以前)这些都可以不考虑

qin552011373 发表于 2021-11-18 15:47

这些对于arm来说不叫事了
页: [1]
查看完整版本: 一个c51程序移植到ARM,编译的code差别很大