共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 低功耗超声波液位测距仪(ESP32S3)被打赏¥27元 | |
| 在K230DBOX上实现多时段语音提示功能被打赏¥14元 | |
| 使K230DBOX实现相机持续拍照功能被打赏¥12元 | |
| 基于K230DBOX的文本管理器设计被打赏¥14元 | |
| 基于K230DBOX的彩色画板功能实现被打赏¥15元 | |
| 在K230DBOX上实现音乐播放器功能被打赏¥15元 | |
| NXP MCU系列开发板MCULink固件升级方法【VSCode】被打赏¥28元 | |
| 三分钟快速搭建NXP MCU开发环境(VSCode)被打赏¥22元 | |
| 为遥控小车巧添功能被打赏¥26元 | |
| 【S32K3XX】FlexCAN 模块配置使用被打赏¥30元 | |
我要赚赏金
