zoukankan      html  css  js  c++  java
  • IAR中 C语言位定义

    

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

  • 相关阅读:
    TCHAR字符串查找&反向查找字符串
    如何判断一个文本文件的编码
    用NETSH WINSOCK RESET命令修复网络
    #define和typedef在windows上的应用
    Visual Studio Code (vscode)编译C++
    win32 Message(MSG)消息处理
    HBRUSH to RGB value
    InvalidateRect和UpdateWindow
    Informatic ETL开发步骤
    【非官方方式】获取Disconf动态更新的配置文件的值
  • 原文地址:https://www.cnblogs.com/noble/p/4144205.html
Copyright © 2011-2022 走看看