天气预报
百宝日历
载入中...
百宝专栏
载入中...
最新货色
载入中...
粉丝评论
载入中...
百宝信息
载入中...
百宝流量
(2006-07-01开始)
匠人手记
一个有趣的关于C宏的题目及巧解。(建议您不要看答案,先尝试自己做做看) 程序匠人 发表于 2008-6-14 22:32:00 阅读全文 | 回复(1) | 引用通告 | 编辑
一个有趣的关于C宏的题目及巧解。(建议您不要看答案,先尝试自己做做看)
文章发表于:2008-06-03 03:35
ayb_ice 发表于 2008-6-2 21:09 侃单片机 ←返回版面
楼主: 给大家出道题吧
定义一个C宏,实现插入0~255个NOP指令。 几天后公布答案。 比如:_nopx(3);// 插入3个NOP
(建议您不要看答案,先尝试自己做做看。做完后向下翻看匠人的答案。)
……
……
……
……
……
……
……
……
……
(不要偷看答案!)
……
……
……
……
……
……
……
……
……
……
(你确定要看答案吗?)
……
……
……
……
……
……
……
……
(好吧,现在公布答案。)
程序匠人 发表于 2008-6-3 12:35 侃单片机 ←返回版面
30楼: 任务完成,匠人的答案如下:
//宏定义方法: #define __NOP1__ asm("nop"); #define __NOP2__ __NOP1__ __NOP1__ #define __NOP4__ __NOP2__ __NOP2__ #define __NOP8__ __NOP4__ __NOP4__ #define __NOP16__ __NOP8__ __NOP8__ #define __NOP32__ __NOP16__ __NOP16__ #define __NOP64__ __NOP32__ __NOP32__ #define __NOP128__ __NOP64__ __NOP64__ #define __NOPX__(a) \ if ((a)&(0x01)) {__NOP1__} \ if ((a)&(0x02)) {__NOP2__} \ if ((a)&(0x04)) {__NOP4__} \ if ((a)&(0x08)) {__NOP8__} \ if ((a)&(0x10)) {__NOP16__} \ if ((a)&(0x20)) {__NOP32__} \ if ((a)&(0x40)) {__NOP64__} \ if ((a)&(0x80)) {__NOP128__} //宏引用方法(举例): __NOPX__(13)//编译结果: 138: __NOPX__(13) 051D 0000 NOP 051E 0000 NOP 051F 0000 NOP 0520 0000 NOP 0521 0000 NOP 0522 0000 NOP 0523 0000 NOP 0524 0000 NOP 0525 0000 NOP 0526 0000 NOP 0527 0000 NOP 0528 0000 NOP 0529 0000 NOP//说明,此宏在PICC中编译通过 //程序匠人 于 2008-06-03
* - 本贴最后修改时间:2008-6-3 12:36:07 修改者:程序匠人
签名:
____________________________ ∽∽∽ / \ ( 。 。) ( 看匠人手记,与匠人同行! ) -oOOo-∪-oOOo-\ ___________________________/ |/
《匠人手记》热卖中。。。。。。。
看《匠人手记》,与匠人同行!北航出版,正在热卖!
Re:一个有趣的关于C宏的题目及巧解。(建议您不要看答案,先尝试自己做做看) 比尔熊(游客) 发表评论于2008-10-22 23:27:00 个人主页 | 引用 | 返回 | 删除 | 回复
不错,学习了
看《匠人手记》,与匠人同行!北航出版,正在热卖!
广告5号位 [投放 ]
学习板、开发板、编程器、下载器、仿真器 (查看详情……)