共2条
1/1 1 跳转至页
C51 请教一个C51代码优化的问题
问
对于一个简单的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_(),后来我用一个符合替代呢,至于说效率和内存,要看定义的内容是什么.
如果是最简单的东西,比如说 写端口.当然是用宏定义比较简单,省了去传递参数和保存指针.这个选择要因事而定.
种形式编译器都是怎么处理的,哪一种比较好?为什么所有的书都推荐用宏啊?有什么奥
妙在啊?谢谢 答 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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |