IAR中 C語言位定義 (IAR)


 

 

__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方便一些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM