这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » C51 请教一个C51代码优化的问题

共2条 1/1 1 跳转至

C51 请教一个C51代码优化的问题

院士
2006-09-17 18:14:16     打赏
C51 请教一个C51代码优化的问题



关键词: 请教     一个     代码     优化     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 对于一个简单的C51函数,可以用函数的形式写,也可以用#define宏的形式写,请问这两
种形式编译器都是怎么处理的,哪一种比较好?为什么所有的书都推荐用宏啊?有什么奥
妙在啊?谢谢 1: 个人见解使用#define和函数的区别在于,在预编译时#define的东西被展开到你用到的地方,而函数则使用call...来调用,因此#define的东西有执行速度快的特点,但是如果你有多少个地方调用,就要多占(#define)个地址空间,而函数刚好相反;因此一般的规则就是相对短小而实时性要求高的场合(如中断中、端口操作等)一般使用#define,而在程序量相对大,调用平凡的场合一般使用函数。 2: re我覺得宏占用內存.但運行速度快. 而函數剛好相反. 不知對不對?
3: 同意coke观点 4: 宏占用内存,函数不占用内存了 5: 如果处理的东西不多使用宏定义好!!! 6: 调用的地方多用函数,少则用宏. 7: 这件事我遇到过先说个例子,大家都做过IIC程序吧,对于里面位间的延时程序,有2种方法如下:

1. #define nop()    _nop_();_nop_();_nop_();_nop_();_nop_;_nop_();_nop_();_nop_

2. #define    nop()  Delay50us(1)

如果说一个IIC程序调用的结果是第一种比第二种代码多300个字节,你信吗?呵呵

宏定义相当于调用的时候,就把你先前定义的冬冬,直接写到程序里面.所以当调用比较多的时候,代码的效率就会底很多,这和内存没有关系.和速度也没有关系,宏定义只是你偷懒,把应该逐个写的东西,用一个符合来替代而以,就象上面的例子一样,本来你每次延时的时候要写好多个_nop_(),后来我用一个符合替代呢,至于说效率和内存,要看定义的内容是什么.

如果是最简单的东西,比如说 写端口.当然是用宏定义比较简单,省了去传递参数和保存指针.这个选择要因事而定.

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]