CC2530之ioCC2530.h

#define SFR(name,addr)   __sfr   __no_init  volatile  unsigned char  name @ addr;

该宏定义告诉编译器将指定的变量“name”链接到地址为“addr”的存储位置中去,__sfr表示将变量是保存在特殊功能寄存器SFR中,__no_init表示将变量保存在非初始化数据区(一个目标文件的数据区分为以初始化的和未初始化的),同时该变量是volatile属性的,即程序每次要用到它的时候都会重新从变量所在的物理地址中读取其值,而不是从缓冲寄存器中取,因为它是随时可变的。

#define SFRBIT(name, addr, bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0) \
__sfr __no_init volatile union \
{                              \
  unsigned char name;          \
  struct {                     \
    unsigned char bit0 : 1;    \
    unsigned char bit1 : 1;    \
    unsigned char bit2 : 1;    \
    unsigned char bit3 : 1;    \
    unsigned char bit4 : 1;    \
    unsigned char bit5 : 1;    \
    unsigned char bit6 : 1;    \
    unsigned char bit7 : 1;    \
  };                           \
} @ addr;

该宏定义告诉编译器将联合体链接到地址为“addr”的存储位置中,该联合体包含一个 unsigned char类型的变量name以及一个位段结构,该位段结构包含8个二进制位,因为该位段结构与变量name具有相同的首地址,所以对name或者位段结构进行操作,实际上是具有相同效果的。也就是说bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0其实就是name的8个位的别名,改变bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0,name也随着改变,改变name,那么bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0也会发生变化。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值