原创 一个有趣的关于C宏的题目及巧解。(建议您不要看答案,先尝试自己做做看)

2008-6-3 15:40 3141 11 15 分类: MCU/ 嵌入式
一个有趣的关于C宏的题目及巧解。(建议您不要看答案,先尝试自己做做看)


mood25.gif ayb_ice 发表于 2008-6-2 21:09 侃单片机 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 给大家出道题吧


定义一个C宏,实现插入0~255个NOP指令。
几天后公布答案。
比如:_nopx(3);// 插入3个NOP

(建议您不要看答案,先尝试自己做做看。做完后向下翻看匠人的答案。)


……


……


……


……


……


……


……


……


……


(不要偷看答案!)


……


……


……


……


……


……


……


……


……


……


(你确定要看答案吗?)


……


……


……


……


……


……


……


……


(好吧,现在公布答案。)


mood20.gif 程序匠人 发表于 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-\ ___________________________/
              |/ 
172217994077.gif

《匠人手记》热卖中。。。。。。。

文章评论4条评论)

登录后参与讨论

用户1498666 2008-12-31 10:21

很好 很强大.......

用户1498666 2008-12-31 10:21

很好 很强大.......

用户1095637 2008-6-10 11:36

很好,學習了

用户384849 2008-6-4 14:22

好技巧
相关推荐阅读
程序匠人 2011-08-19 16:42
串口调试利器——《串口猎人》V31 免费发布!
匠人按:《串口猎人》V31是继之前的V26、V29版本之后的最新升级版本。诸多细节改进不一一道来了。免费发布。 下载:串口猎人 ( Serial Hunter ) V31 setup.rar (2.7...
程序匠人 2011-06-24 11:25
匠人开发的一款串口调试工具——串口猎人 ( Serial Hunter ) V26
《串口猎人》十大功能简介: 1、基本功能,支持基本的 收、发、查看、保存、清除等功能。2、基本功能,自动/手动搜索串口,串口参数的设置和查看。3、基本功能,支持HEX/ASCII/中文汉字收发。4、高...
程序匠人 2010-07-10 20:49
招聘会花絮
招聘会花絮招聘会上常常会遇到一些让人啼笑皆非的趣闻和花絮:花絮1:应聘者:“偶是来应聘某某职位的,这是偶的简历。”匠人:“您好!请坐……”(一边接过简历一边随口问道)“哪年毕业的?”应聘者(脸不红心不...
程序匠人 2010-07-08 10:40
给我64只章鱼,我也可以通吃世界杯了
昨天谁赢了?西班牙?德国?——还是保罗?忘记那些足球专家和名宿们吧,甚至被认为是乌鸦嘴的贝利。他们的预测在章鱼保罗的面前,简直就是小儿科。经过90分钟的恶战,西班牙队1比0淘汰了章鱼保罗的祖国德国队。...
程序匠人 2010-06-28 14:11
周末,在佘山钓鱼(有图有真相)
昨天和木华去佘山钓鱼俺的个人战绩:钓出水面3条小鱼,收杆不及时脱钩1条,从水桶中又蹦出去1条……大家肯定很好奇,最后一条,匠人怎么处理的呀?呵呵 放生?or回家烧鱼汤? 鱼头烧汤鱼肚清蒸鱼尾红烧可怜,...
程序匠人 2010-05-05 20:02
通过两张趣图,看工程师的自我反省
很久没有关注其他网友的博客了,那天机缘巧合,看到两位网友分别转载的图片,很有意思。第一张图片来源国外,是一个关于程序员面试时的简历,被人事部门和程序员本身评审的角度不同的图片。当然,这是一个从国外面试...
我要评论
4
11
关闭 站长推荐上一条 /3 下一条