__IO_REG8_BIT( SYS, 0xFFFFF802, __READ_WRITE )
#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE) \
__near __no_init volatile ATTRIBUTE union \
{ \
unsigned char NAME; \
__BITS8 NAME ## _bit; \ // ## _bit ?? ## 可以連接前后
//比如 NAME 是 a,這句就//是 __BITS8 a_bit;
} @ ADDRESS;
typedef struct
{
unsigned char no0:1;
unsigned char no1:1;
unsigned char no2:1;
unsigned char no3:1;
unsigned char no4:1;
unsigned char no5:1;
unsigned char no6:1;
unsigned char no7:1;
} __BITS8;
__near
Syntax Follows the generic syntax rules for memory type attributes that can be used on data
objects, see Type attributes, page 193.
Description The __near memory attribute overrides the default storage of variables given by the
selected data model and places individual variables and constants in near memory. You
can also use the __near attribute to create a pointer explicitly pointing to an object
located in the near memory.
Storage information Address range: 0x0-07FFF and 0xFFFF8000-0xFFFFFFFF (64 Kbytes)
Example __near int x;
See also Memory types, page 13.
__no_init
Syntax Follows the generic syntax rules for object attributes, see Object attributes, page 195.
Description Use the __no_init keyword to place a data object in non-volatile memory. This means
that the initialization of the variable, for example at system startup, is suppressed.
Example __no_init int myarray[10];
#define PRERR SYS_bit.no0
以下轉自http://renesasrulz.spaces.eepw.com.cn/articles/article/item/69883
在stdbool.h中,定義了一個位宏,如果需要變量定義,就是如下: bool abit; abit就是一個位變量了,這種方法簡單,但是在多個位的時候不好處理,比如需要一批位變量 初始化的時候。 還可以采用如下方法:
typedef struct
{ unsigned char no0:1;
unsigned char no1:1;
unsigned char no2:1;
unsigned char no3:1;
unsigned char no4:1;
unsigned char no5:1;
unsigned char no6:1;
unsigned char no7:1;
} __BIT8 ;
volatile union { unsigned char strack; __BIT8 strack_bit; } ;
union { unsigned char sk; __BIT8 sk_bit; } ;
定義位: #define mflag strack_bit.no0
volatile union { unsigned char strack; __BIT8 strack_bit; } ; 中加上VOLATILE,如果發現給編譯器優化掉,就一定要加上, strack 就是一個可按位操作的變量, strack=0;就可以把所有8個位全部清零,比起BOOL方便一些。