IAR里面的头文件求助
如题,用的是STM8S003F3,里面的io_macros.h有这么段代码,不知道什么意思,请大家解答下。/*---------------------------------------------* Define NAME as an I/O reg with bit access
* Access of 8 bit reg:NAME
* Access of bit(s): NAME_bit.noXX
*--------------------------------------------*/
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) \
__near __no_init volatile ATTRIBUTE union \
{ \
unsigned char NAME; \
BIT_STRUCT NAME ## _bit; \
} @ ADDRESS;
NAME应该是一个寄存器的名字,
ADDRESS应该是该寄存器的地址,
ATTRIBUTE不知道,没用过STM8S
BIT_STRUCT应该是已经定义好的一个结构体,大致形式如下
typedef struct
{
uint8_t no0:1;
uint8_t no1:1;
...
uint8_t no7:1;
}BIT_STRUCT;
如果想按位访问一个8位寄存器,则首先调用该宏定义,该宏定义会定义一个联合体
union
{
uint8_t name;
BIT_STRUCT name_bit;
}
调用之后,就可以按位访问了。例如我也访问GPIOA中的位,加上GPIOA寄存器地址为0x1122,
首先调用__IO_REG8_BIT(GPIOA, 0x1122, ATTRIBUTE, BIT_STRUCT)
之后我想访问第1个IO口,则GPIOA_bit.no1 = 1 yu0405jie 发表于 2017-12-8 11:12
NAME应该是一个寄存器的名字,
ADDRESS应该是该寄存器的地址,
ATTRIBUTE不知道,没用过STM8S
那我如果对NAME赋值是不是就相当于对BIT_STRUCT里面的全部成员赋值了,在BIT_STRUCT都是8个成员的情况下 ...路上... 发表于 2017-12-8 15:13
那我如果对NAME赋值是不是就相当于对BIT_STRUCT里面的全部成员赋值了,在BIT_STRUCT都是8个成员的情况下 ...
是的,没有错,你对一个寄存器整体赋值,也就等于对寄存器中每一位进行了赋值
页:
[1]