[讨论]用C语言写代码,如何优化代码尺寸大小

[复制链接]
 楼主| 古道热肠 发表于 2009-6-29 15:19 | 显示全部楼层 |阅读模式
用C语言做开发,开发速度是快,但写出的代码稍不留心,就做成一个大胖子了.在嵌入式应用中,有时很关注成本与性价比,往往希望能在性价比上找到平衡点,代码尺寸的优化就显得很重要了.
当然,针对熟悉的8位51单片机,大家都知道的方法和原则我先列几个,不在讨论之列
俺常用的瘦身密绝
1.能用unsigned char 的不用unsinged int,依些类推到ulong
2.能定义到data空间的不用定义到idata,更不要定义到Xdata
3........
哈哈,大家补充.
 楼主| 古道热肠 发表于 2009-6-29 15:31 | 显示全部楼层

俺觉得合理使用函数的入口参数作变量较为有效

因为C语言在函数调用时是采用复制变量的数据传递机制,入口变量可放心大胆地用.
比如如下写法就较小的代码尺寸
ComShowString(uchar ucCount; uchar *ucDataBuf)
{
    while(ucCount--)
   {
     WriteComOneByte(*ucDataBuff++);
   }
}
computer00 发表于 2009-6-29 15:55 | 显示全部楼层

做大事者,不拘小节~~~~

 楼主| 古道热肠 发表于 2009-6-29 16:33 | 显示全部楼层

哈哈,精益求精的精神不能丢

虽然有n多个理由可能不必关心代码太小,但俺在过去的确遇到过代码胖到接近64K,弄得稍微改一改功能,就编译超空间的应用实例.假如从一开始就形成良好的代码编写习惯,也许可以延长那个产品的寿命.
哈哈,还是瘦点好.
 楼主| 古道热肠 发表于 2009-6-29 16:39 | 显示全部楼层

"细节决定成败",这句话貌似很流行,没看过那本书

呆板书生 发表于 2009-6-29 19:53 | 显示全部楼层

.

计数器能做减法的就尽量用减法

小心某人谴责我们搞技巧,闪...
ayb_ice 发表于 2009-6-29 20:57 | 显示全部楼层

使用特定指针

lelee007 发表于 2009-6-30 03:27 | 显示全部楼层

3L正解

不过51的时代过去了,现在差不多成肥猪流了吧

现在主流的单片机,RAM,ROM,大把大把的空间

放心的奔吧,就像圈圈说的那样,哈哈哈哈哈
 楼主| 古道热肠 发表于 2009-6-30 12:08 | 显示全部楼层

记得有人说过指针比数组更省代码,大家以为呢?

在C51中对指针进行限定,更能节省空间和提高速度,8楼所提到的确是优化速度和代码的绝招,就是可移植性变差了,当然,在关注代码尺寸时,不能兼顾可移植性了.
McuPlayer 发表于 2009-6-30 12:34 | 显示全部楼层

为什么非把数组和指针独立起来?

数组的名字(保存首地址常量)就是指针,而且是个死指针,不会挪动的const指针
下面这个用法恐怕很多人用过吧,这不正是数组和指针的成功合作嘛。

u8 myBytes[4] = {0x00,0x10,0xAA,0x55};
u16 myWord;

myWord = * ( (u16*)(myBytes+2) );

当然也可以写成
myWord = ((u16)myByte[3]<<8) | (u16)myByte[2];
McuPlayer 发表于 2009-6-30 12:37 | 显示全部楼层

还有一点忘记了

指针进行类型转换的时候一定要注意大小端的问题

Keil的C51是大端模式,他延续了Intel在MCS51工具上的当年的做法
我个人比较喜欢小段模式,ARM最好了,大小端任你选,没人有意见了
将军令 发表于 2009-6-30 14:02 | 显示全部楼层

省下几个自己的memory会发财吗?

不要为了几个字节memory space为难自己
huangqi412 发表于 2009-6-30 14:12 | 显示全部楼层

写过次衣隆,打死不干这事了,...

Txapp 发表于 2009-6-30 15:07 | 显示全部楼层

optimizing

在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效率,不要一味追求紧凑的代码
 楼主| 古道热肠 发表于 2009-6-30 15:40 | 显示全部楼层

一场势均力敌的象棋的比赛,有时就赢在是否用好一个小兵上

本贴重点是讨论代码尺寸优化问题,大家不要跑题.
 楼主| 古道热肠 发表于 2009-6-30 15:50 | 显示全部楼层

俺觉得用好全局变量也能优化代码尺寸

如果变量由主调上层函数到底层函数通过入口参数传递了很多次,内存够用的话,可以考虑用全局变量来替代,使函数进入与返回时不用做很多传入与传出的操作.
ayb_ice 发表于 2009-7-1 21:15 | 显示全部楼层

良好的程序架构是最好的优化程序

另外注意指针别名操作,其实变量也有别名操作
delin17 发表于 2009-7-1 22:43 | 显示全部楼层

仰望高人

仰望高人,曾因ROM爆掉,一改再改程序。。
有很多时候还是要注意程序大小的
itelectron 发表于 2009-7-1 23:15 | 显示全部楼层

同18 楼良好的程序架构是最好的优化程序

同18 楼良好的程序架构是最好的优化程序
------------------------------------------
能不用全局变量  就 尽量 不用!
耦合严重 会出现预想不到的 效果!!!
zoupeng139 发表于 2009-7-2 08:55 | 显示全部楼层

我得有时候内部RAM不够了

造成显示部分有时候会错乱执行
不知是不是内部ram少的原因还是没有加程序冗余的原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

284

主题

6411

帖子

16

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