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

[复制链接]
2111|18
 楼主| 吾要单片机 发表于 2021-11-15 19:59 | 显示全部楼层 |阅读模式
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来说不叫事了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

447

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部