+ -
当前位置:首页 → 问答吧 → 解释下一什么意思这是,怎么在程序用呢

解释下一什么意思这是,怎么在程序用呢

时间:2010-09-15

来源:互联网

小弟新手,请教教我下定义啥意思,怎么在程序里用到啊
#ifndef __ASSEMBLY__
typedef struct _AT91S_AC97C {
AT91_REG         AC97C_CAMR;         // Channel A Mode Register
AT91_REG         AC97C_CBMR;         // Channel B Mode Register
} AT91S_AC97C, *AT91PS_AC97C;
#else
#define AC97C_CAMR      (AT91_CAST(AT91_REG *)         0x0000002C) // (AC97C_CAMR) Channel A Mode Register
#define AC97C_CBMR      (AT91_CAST(AT91_REG *)         0x0000003C) // (AC97C_CBMR) Channel B Mode Register
#endif
这个模式#ifndef __ASSEMBLY__
            .......................
            #else

            ***********
            #endif
意思是:如果没有定义集合就执行............否则就执行*******么?
在程序里怎么用呢?小弟新手请哪位大哥教一下

作者: marcomo1986   发布时间: 2010-09-15

哦,我明白了,类似于
#ifndef __ASSEMBLY__
typedef volatile unsigned int AT91_REG;
#define AT91_CAST(a) (a)
#else
#define AT91_CAST(a)
#endif
如果没有定义  __ASSEMBLY__  宏(即使用C编程),AT91_CAST(a)   就会替换成 a,即原来是什么就是什么,如果定义了 __ASSEMBLY__  宏,说明使用汇编编程, 这个AT91_CAST(a) 定义为空,所以:

如果用C

#define SDRAMC_MR       (AT91_CAST(AT91_REG *)  0x00000000)
会变成
#define SDRAMC_MR       (volatile unsigned int *)  0x00000000)

如是用汇编

#define SDRAMC_MR       (AT91_CAST(AT91_REG *)  0x00000000)
会变成
#define SDRAMC_MR        (0x00000000)

作者: marcomo1986   发布时间: 2010-09-15