打印
[经验分享]

C51 内存优化

[复制链接]
楼主: biechedan
手机看帖
扫描二维码
随时随地手机跟帖
21
lihuami| | 2024-8-8 09:58 | 只看该作者 回帖奖励 |倒序浏览
递归函数会消耗大量堆栈空间。如果可能,使用迭代替代递归。

使用特权

评论回复
22
pentruman| | 2024-8-8 12:03 | 只看该作者
避免在内存中存储不必要的字符串常量。如果需要多次使用相同的字符串,可以考虑使用宏定义或者将字符串存储在程序存储器(ROM)中。

使用特权

评论回复
23
fengm| | 2024-8-8 14:07 | 只看该作者
静态存储:对于不会改变的变量,使用static关键字来声明,这样它们会被存储在数据内存而不是堆栈上。
全局变量:对于需要在多个函数间共享的变量,使用全局变量,但要注意作用域和命名冲突。
寄存器变量:对于频繁使用的变量,使用register关键字建议编译器将其存储在寄存器中(如果可能)。

使用特权

评论回复
24
yorkbarney| | 2024-8-8 15:32 | 只看该作者
减少不必要的循环迭代和函数调用,因为每次函数调用都会增加堆栈的使用。

使用特权

评论回复
25
mollylawrence| | 2024-8-8 22:40 | 只看该作者
了解单片机的内存映射,合理安排程序和数据在内存中的布局。

使用特权

评论回复
26
zerorobert| | 2024-8-8 22:52 | 只看该作者
数据定位:使用data, idata, bdata, xdata等关键字来指定变量的存储位置。
常量和只读数据:利用code关键字将常量和只读数据放在程序存储器中,这样可以节省RAM。

使用特权

评论回复
27
51xlf| | 2024-8-8 23:04 | 只看该作者
将常用的功能封装成函数,避免重复编写代码,减少代码量和内存占用。

使用特权

评论回复
28
1988020566| | 2024-8-8 23:17 | 只看该作者
使用最小的合适数据类型:例如,如果变量值的范围允许,使用char(8位)代替int(通常是16位)。
位变量:对于布尔变量或标志,使用位变量(使用sbit关键字)来节省空间。

使用特权

评论回复
29
updownq| | 2024-8-8 23:29 | 只看该作者
避免使用不必要的较大数据类型,以减少内存占用。

使用特权

评论回复
30
jackcat| | 2024-8-8 23:41 | 只看该作者
在进行内存优化时,需要平衡内存成本(如增加外部RAM的成本)和性能要求(如访问速度)。

使用特权

评论回复
31
uiint| | 2024-8-8 23:54 | 只看该作者
合理选择变量的存储类别(data、idata、xdata),以充分利用不同的内存区域。

使用特权

评论回复
32
mmbs| | 2024-8-9 00:05 | 只看该作者
尽量减少中断服务程序中的代码量,避免在中断服务程序中使用浮点运算和复杂的算法。

使用特权

评论回复
33
minzisc| | 2024-8-9 00:18 | 只看该作者
对不同访问频率和用途的变量指定具体的存储器类型,如data、idata、xdata等。

使用特权

评论回复
34
louliana| | 2024-8-9 00:31 | 只看该作者
关注编译器的警告和错误信息,及时解决可能导致内存泄漏或其他内存问题的代码。

使用特权

评论回复
35
mnynt121| | 2024-8-9 00:44 | 只看该作者
尽量让频繁访问的变量比如循环计数器、常用状态标志等使用直接寻址(data类型),以提升访问速度。

使用特权

评论回复
36
mattlincoln| | 2024-8-9 00:57 | 只看该作者
直接使用指针操作可以避免不必要的数据复制。

使用特权

评论回复
37
wangdezhi| | 2024-8-9 01:09 | 只看该作者
使用静态数组代替动态数组,因为静态数组在编译时分配内存,避免了动态分配的开销。

使用特权

评论回复
38
timfordlare| | 2024-8-9 01:23 | 只看该作者
C51单片机采用哈佛结构,即程序存储器和数据存储器物理上是分开的。程序存储器用于存储程序代码,而数据存储器(RAM)用于存储数据。

使用特权

评论回复
39
eefas| | 2024-8-9 01:35 | 只看该作者
对于全局变量、静态变量等,应明确指定其存储类型(如xdata、bdata等),以便合理分配内存。

使用特权

评论回复
40
bartonalfred| | 2024-8-9 01:47 | 只看该作者
全局变量和局部变量不会占用过多的内存空间。尤其是避免在全局变量中使用过大的数组或数据结构。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则