发新帖本帖赏金 80.00元(功能说明)我要提问
返回列表
打印
[麦麦茶水间]

代码密度问题:MCU的ROM空间容量你装得下吗?

[复制链接]
926|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 poison0 于 2023-9-8 00:08 编辑

#申请原创# @21小跑堂


嗨,各位电子工程师和代码骑士们!
今天,我们要来谈谈一个电子工程师生活中常见的问题:代码密度。
是的,就是那个会让你的MCU(微控制器单元)的ROM空间不够用,使你束手无策的可怕问题。
但别担心,我会在这里跟大家一起探讨这个问题,同时也分享一些优化的土点子。

首先我们正视现实:
MCU的ROM空间总是有限的,有时候甚至小到只能容纳几个月前的潮流歌曲。
所以,我们必须学会优化我们的代码,让它更加紧凑,节省空间,让那些魔幻的功能和神奇的算法都能装得下。


问题1:代码密度难题

让我们先谈谈我自己遇到的代码密度难题。有一次,我写了一个简单的温度控制器程序,要在一个微小的MCU上运行。我一开始很得意,觉得我是编程界的Picasso,但当我尝试将程序下载到MCU时,出现了错误:ROM空间不足。我慌了,真的,慌得像只被发现偷吃饼干的小狗一样。

我给出的解决方案是:尽量的优化代码

面对这个问题,我首先想到的是优化代码。
重新审视我的代码,找到了一些可怕的浪费空间的地方。
去掉那些不必要的注释,将变量名从"temperature_reading"缩短成了"temp"(切勿在正式项目中这么做,这只是为了缩减而已,正式项目几乎也不可能ROM空间不足。),使用更高效的算法。可能会节省了一些宝贵的ROM空间。

问题2:对于浪费空间的疑虑

如果我的代码中还有哪些浪费空间的地方我没有发现,这个疑虑就会困扰着我,就像一只嗅觉灵敏的小狗,不停地嗅嗅四周,找到一些隐藏的代码碎片。


解决方案:静态分析工具(强迫症神器)

我找到了一个救星:静态分析工具。
这种神奇的工具可以帮助工程师们,找出咱们代码中存在的潜在问题,包括浪费空间的地方。
静态分析工具就像是一支代码探照灯,能够帮助你发现隐藏在黑暗中的问题。
使用静态分析工具的时候我找到了一些未使用的变量和函数,就会让我感觉好像找到了宝藏一样!

问题3:内存碎片化的担忧

现在,我基本上已经充分利用了我的ROM空间,但还有一个问题:内存碎片化。
如果你不小心,在已经完成的的代码中内存中留下一些碎片,那会使得ROM空间被不连续的小块代码占用,而无法被更大的功能使用。
这就好比在婴儿床上堆积了一堆拼图碎片,你也找不到完整的拼图。会让人十分苦恼。

解决方案:内存分配策略

我开始学习如何制定内存分配策略,确保代码在ROM中是连续的。
这就好像是在拼图上留下一个完整的拼图,而不是一堆碎片。
我使用了编译器的选项来帮助我控制代码的排列方式,确保它们在ROM中是有序的,没有留下空隙。
这需要亿点点耐心。。。亿点点。。。就亿点点耐心就好。。。。

问题:未来的不确定性

最后,我还有一个未来的不确定性:随着项目的不断发展,我可能需要添加更多功能。那时,我应该怎么办?难道要一直挤压我的代码,直到没有空间为止吗?



解决方案:模块化和动态加载

这时候,我想到了模块化和动态加载。我可以将代码划分为模块,只加载需要的模块,而不是将所有代码一次性加载到ROM中。这就好比是在一个小房间里存放各种玩具,只有当需要时才将它们取出来。这种方式可以帮助我更有效地利用ROM空间,同时保持未来的可扩展性。

总结

各位工程师们,面对代码密度的问题,不要绝望,也不要让它变成你的噩梦。
优化代码,使用静态分析工具,制定内存分配策略,以及考虑模块化和动态加载,都是解决代码密度难题的方法。
让我们像小狗一样,嗅嗅四周,发现那些浪费空间的地方,并且在ROM的小房间里巧妙地存放玩具。
愿你的MCU不再面临ROM空间不足的问题,而你的代码将紧凑而高效!



使用特权

评论回复

打赏榜单

21小跑堂 打赏了 80.00 元 2023-09-15
理由:恭喜通过原创审核!期待您更多的原创作品~

评论
xu@xupt 2023-9-17 08:26 回复TA
很好的资源,学习啦~~ 
21小跑堂 2023-9-15 10:29 回复TA
一个很好的话题,在有限的ROM空间填塞很多的代码,看起来似乎现在的MCU空间很大,不需要考虑空间的问题,实际上涉及到成本以及PCB尺寸的问题,ROM空间的问题还在持续困扰很多人,作者提出很多的论述,很有借鉴意义。 
沙发
dongnanxibei| | 2023-9-8 11:47 | 只看该作者
现在都挺大的, 没装不下的情况。

使用特权

评论回复
板凳
huixuhong| | 2023-9-19 11:35 | 只看该作者
思考许久还是选择回复:概念都是错的。改变量名称能改变程序rom大小 ,还是第一次听说。

使用特权

评论回复
地板
lb1057907736| | 2023-9-26 15:57 | 只看该作者
huixuhong 发表于 2023-9-19 11:35
思考许久还是选择回复:概念都是错的。改变量名称能改变程序rom大小 ,还是第一次听说。 ...

赞同。

使用特权

评论回复
5
poison0|  楼主 | 2023-10-1 01:08 | 只看该作者
huixuhong 发表于 2023-9-19 11:35
思考许久还是选择回复:概念都是错的。改变量名称能改变程序rom大小 ,还是第一次听说。 ...

哈哈哈。宝子,那里是做比喻的,后面都加括号说明是玩笑了,干嘛纠结。

使用特权

评论回复
6
tpgf| | 2023-10-11 18:59 | 只看该作者
我们如何有效的提高代码密度呢

使用特权

评论回复
7
zljiu| | 2023-10-11 19:27 | 只看该作者
更改变量名提高密度的做法效果不是很明显

使用特权

评论回复
8
tfqi| | 2023-10-11 19:39 | 只看该作者
代码密度与编译器有关,对于同样的代码和单片机,使用不同的编译器得到的目标代码长度可能不一样,编译器的优化项也对代码密度有影响

使用特权

评论回复
9
aoyi| | 2023-10-11 20:23 | 只看该作者
我们应该如何衡量代码的密度呢 有标准或者规定吗

使用特权

评论回复
10
nawu| | 2023-10-11 21:00 | 只看该作者
对于代码优化 有很多优化级别  这个度如何掌握比较好呢

使用特权

评论回复
11
gwsan| | 2023-10-11 21:31 | 只看该作者
同样的一段代码,对于不同的单片机来说,编译之后多数情况下占用的空间是不相同的。占用的空间越大,则说明代码密度越低,反之异然

使用特权

评论回复
发新帖 本帖赏金 80.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

615

帖子

2

粉丝