Board logo

标题: 在单片机C语言编程中的心得体会 [打印本页]

作者: labs    时间: 2010-8-27 09:52     标题: 在单片机C语言编程中的心得体会

作者:彭树林
  在单片机C语言编程中使用恰当的优化手段,可以写出简洁高效的代码。以下是笔者在C51编程过程中的一点心得体会。
  1.尽量使用短的数据类型。如uchar、bit、uint,有时需要对uchar数据类型进行按位访问,可将其定义在bdam区间。慎重使用float数据类型,有时它可以转化成int数据类型来代用。
  2.熟练指针的使用。例如Uint是由双字节拼接而成,有时用来存放16位地址。获取其高八位和低八位地址的方法为:只要用uchar *p;p=&int0,则*p表示其高八位,*(++p)表示其低八位,非常方便。
  3.使用自加、自减的方法为:a++;a-,它会调用INC、DEC指令,效率远比a=a+1;a=a-1高。
  4.循环:使用uchar a;for(a=1;a≤8;a++)…时,条件a<=8编译后代码比较繁琐,可用for(a=8;a=a-1)…来代替,充分利用单片机的为零跳转指令。同样,在do{…}while()中也适用。
  5.  当多个条件判别时,if(A&&B&&C&&D),只要第一个条件A不符合,程序是不管后面的条件的,所以可把最可能出错的条件排在前面处理。
  6.子程序的参量。调用子程序时若带参量,程序会开辟存储空间(如Rn)来存放参量,这个空间是可以充分利用的。如延时子程序void delay(uehar time){while(time一);J,可以延时相当短的时间。
  7.空指令NOP在C中用_nop一0实现,定义在中。
  8.求余运算“%”操作是调用子程序来完成的,效率低。如果是求2的n次方的余数,可使用位操作来代替。如:a=a%8可改用8=a&7,效率明显提高。同样2xN的乘除运算可用移位来实现。如:a=a*2;b=h/2可改为a=a《1;b=b》1。
  9.使用结构体类型数组时,在查找第n个值时要利用乘法指令(序号乘以类型宽度),当程序高速运行时,可能会影响其速度。
  10.Keil的软件调试非常有用。笔者常将编译后的程序与C源程序对照,查看汇编代码、检查不恰当之处。有时还可用来计算子程序执行时间(在确定精确延时程序参数时非常有用)。
作者: brhubarb    时间: 2010-9-29 22:26

没有什么作用
作者: tablexp    时间: 2010-10-1 21:48

顶一下,顶一下,
作者: hendi1    时间: 2010-10-15 20:39

呵呵~又是一杯具!顶一下了。  
   
   
   
   
   
   
  
  
  
  
  

全能特工 无上真身 焚尽八荒 大道 化龙道 当爱情来敲门 傲剑凌云 重生之红星传奇 千夫斩 间客 从政 遭遇星外文明 都市全异能大师 不灭传说 山窝里的科技强国 混迹在美女如云的公司 外星文明继承者 超级模仿 位面农场 九彩神 魔骸 左道旁门 1895淘金国度 异化 唐朝好医生 杂牌救世主 穿越在动漫 英雄无敌之尸山骨海 传奇永恒的经典 重生之资源大亨  图腾
作者: J.gao    时间: 2010-10-20 09:21

学习了,我学习中注意
作者: shseo    时间: 2010-10-20 10:37













------------------------------用户言论/签名并不代表本站观点
title="上海网站优化"
title="上海百度优化"




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0