搜索
bottom↓
回复: 5

如何看懂IAR里面头文件的未定义部分代码?

[复制链接]

出0入0汤圆

发表于 2011-7-23 08:42:30 | 显示全部楼层 |阅读模式
最近在学习AVR,使用的开发环境是IAR,在参考一些资料和看了IAR开发环境提供个help文档之后,基本上可以把内部资源都调试成功,发现,IAR里面的位操作挺方便,但是自己打开头文件去看IAR是如何实现这种位操作的,但就是看不懂,所以就来这里向高手请教,以下是IAR头文件里面的一部分代码

特殊功能寄存器PORTA的定义如下

SFR_B_N(0x1B,PORTA,PORTA7,PORTA6,PORTA5,PORTA4,PORTA3,PORTA2,PORTA1,PORTA0)

SFR_B_N是一个宏,使用goto definition 可以看到其定义如下:

#define SFR_B_N(_ADDR, _NAME, _B7, _B6, _B5, _B4, _B3, _B2, _B1, _B0) \
                 SFR_B_BITS_N(_NAME, _ADDR, \
                              Bit0,Bit1,Bit2,Bit3,Bit4,Bit5,Bit6,Bit7, \
                              _B0,_B1,_B2,_B3,_B4,_B5,_B6,_B7)

然后继续使用goto definition发现SFR_B_BITS_N的宏定义代码如下:
#define SFR_B_BITS_N(_NAME, _ADDR, _A,_B,_C,_D,_E,_F,_G,_H, \
                                   _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
    __io union { \
      unsigned char   _NAME;           /* The sfrb as 1 byte */ \
      struct {                        /* The sfrb as 8 bits */ \
        __BYTEBITS(_NAME, _A,_B,_C,_D,_E,_F,_G,_H) \
      };  \
      struct {                        /* The sfrb as 8 bits */ \
        __BYTEBITS(_NAME, _A2,_B2,_C2,_D2,_E2,_F2,_G2,_H2) \
      };  \
    } @ _ADDR;


继续。。。。__BYTEBITS的goto definition代码为:

#define __BYTEBITS(_NAME,_A,_B,_C,_D,_E,_F,_G,_H) \
unsigned char _NAME ## _ ## _A:1, \
              _NAME ## _ ## _B:1, \
              _NAME ## _ ## _C:1, \
              _NAME ## _ ## _D:1, \
              _NAME ## _ ## _E:1, \
              _NAME ## _ ## _F:1, \
              _NAME ## _ ## _G:1, \
              _NAME ## _ ## _H:1;
到这里就不能再往下进行goto definiton了,最终我还是看不懂这部分代码是如何实现位操作的,
这个问题很是困扰,因为我用IAR开发S3C2410的时候发现里面的头文件也是这样定义的,我猜这应该是IAR的一种风格吧


希望高手可以帮小弟解决问题呀


万分感谢!!!!!!!!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-8-12 18:20:06 | 显示全部楼层
这些代码都是和编译器有关的,其实不必去纠结,像这种宏定义你只要知道功能就行了,

出0入0汤圆

发表于 2011-10-16 21:53:58 | 显示全部楼层
一直用 KEIL C51, 最近学 EWAVR 我看到这里面的代码也头大, 上网查, 查到这里来了。

出0入0汤圆

发表于 2011-11-20 21:13:51 | 显示全部楼层
看不懂,这个和我们编程影响不大吧。

出0入0汤圆

发表于 2013-1-21 14:32:21 | 显示全部楼层
请问iar下s3c2410的启动文件有吗?最好有工程模板,能给我发一份吗?1183557534@qq.com,谢谢了

出0入0汤圆

发表于 2013-2-5 20:44:44 | 显示全部楼层
看不懂的,都补习下C语言的宏定义就全明白了,提示:The `##' preprocessing operator performs token pasting. When a macro is expanded, the two tokens on either side of each `##' operator are combined into a single token
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 08:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表