搜索
bottom↓
回复: 7

有人问我,54K代码量的MSP430能否被压缩进32Kflash的M0?-我说了瞎话。

[复制链接]

出0入0汤圆

发表于 2011-4-15 22:15:52 | 显示全部楼层 |阅读模式
前天,有人问我,他手头有一个50+K代码量的MSP430的仪表,可否用一颗只有32K flash 的M0或则M3替换掉?该仪表主要实现的是控制类和显示类功能,并不涉及任何高级算法。

我想了想,不敢很正面回答。因为确实没有做过任何比较。但是我想了想,记得Thumb2指令的密度很高,所以,我想应该可以压缩一些,但是从50+压缩到32K的可能性应该比较低吧。

后来想想,没有做过实验,还是不太靠谱啊。所以,就拿了他的那个仪表程序,把所有有关430寄存器操作的语句屏蔽掉之后,用IAR for 430编译。另外,用这段屏蔽寄存器操作的代码新建一个基于EFM32的工程,然后再编译。最后,把EFM32换成了新唐M0,再次编译。才发现,其实我说的是瞎话。

大家觉得,是430编译出来的多还是M3编译出来的代多?以下就是编译出来的结果。优化选项全部选择为High - Size。

同样的,也经常碰到这样的问题,例如:原先使用的是8位的MCU,代码量7+多,能否使用4KFlash的16机代替等等。从这个比较的例子中也能看出一二吧。

但是,我不知道我这样的对比是否正确,也请各位大侠询问一下。谢谢。


(原文件名:同一个工程文件.jpg)
选择同样的源代码文件


(原文件名:msp430.jpg)
MSP430编译结果 - 47204 Bytes Code memory


(原文件名:M3.jpg)

EFM32(M3内核) - 50126 Bytes


(原文件名:M0.jpg)
把工程选项切换为新唐M0,貌似要多一些 - 51842 Bytes

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-4-15 22:38:46 | 显示全部楼层
是否可以在代码上针对不同的MCU做一些优化更改,而且某些关键地方可以用汇编来代替,代码优化后的容量应该是可以适当减小的,但是减小20+k可能还需要试验验证下

出0入24汤圆

发表于 2011-4-15 22:38:59 | 显示全部楼层
比较 Debug版的代码大小干嘛? 试试看 release 版的有多大差异

出0入0汤圆

 楼主| 发表于 2011-4-15 22:52:10 | 显示全部楼层
回复【2楼】20061002838
-----------------------------------------------------------------------

LS,MSP430 Release版本,代码量无增无减。因为我的程序内部,没有使用调试用的代码。。嘻嘻。


(原文件名:Release.jpg)

EFM32 Release 版本:少了几十个字节(看来IAR还是加料了啊)。


(原文件名:M3release.png)

出0入22汤圆

发表于 2011-4-15 22:59:00 | 显示全部楼层
其实应该对程序中的代码做硬件级的优化。不然反而会增加。。

一个变量的优化就可以节省很多代码。

出0入0汤圆

发表于 2011-4-15 23:00:22 | 显示全部楼层
我的理解是这样的,CORTEX M0 或M3自称代码密度高,应该是相对于ARM7这类传统的ARM核或者其他32位MCU而言的。
相对于16位的430,M0和M3本身32位的架构可能在执行相同的C代码的时候可以用更少数量的机器指令,但是每一条指令的长度要比16位机长,ARM指令32位?thumb指令16位?thumb2是16位和32位混合?
个人理解,不知道对不对

出0入0汤圆

 楼主| 发表于 2011-4-15 23:19:19 | 显示全部楼层
回复【4楼】lixin91985
-----------------------------------------------------------------------

您说的硬件级的优化,是指例如调用硬件乘法器等这些优化吗?因为我吧所有的寄存器操作全部屏蔽了。相当于普通的C代码。

确实,优化有很多种,对于50+k的代码,肯定有很多地方可以进行程序优化。特别是一些逻辑判断等。但是这样的优化,就得需要看懂

原先的代码哦。。您说呢。


回复【5楼】alengend
-----------------------------------------------------------------------

我现在的感觉也是这样。所以,我想用帖子来确认一下,或则是大家讨论一下。

出0入24汤圆

发表于 2011-4-16 00:33:31 | 显示全部楼层
回复【楼主位】zerolee
-----------------------------------------------------------------------

我是没有做过LZ你这方面的测试的

如果仅仅从指令长度分析的话,基本情况如下,MSP430的指令长度大多数都是16位的,cortex-M3的指令大多数也是16位的,部分是32位的,这方面二者平手。但是从指令集的效率来讲,cortex-M3的指令比430的指令丰富多了,很多cortex-M3只需要一条指令就能完成的事情,对于430来讲却需要多条指令才能完成,这方面来讲cortex-M3效率比430高出很多,综合起来应该能够得出cortex-M3代码密度更高的结论,不知道这样分析正确不?

另外我用IAR编译STM32的程序,移植ucos的,debug和release的相差很大,不开优化的情况下代码大小分别是17K/12K,优化最高级是15K/10K
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-3 19:12

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

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