博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IAR中 C语言位定义
阅读量:4887 次
发布时间:2019-06-11

本文共 2035 字,大约阅读时间需要 6 分钟。



__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

以下转自

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

转载于:https://www.cnblogs.com/noble/p/4144205.html

你可能感兴趣的文章
洛谷P1373 小a和uim之大逃离【线性dp】
查看>>
Angular:OnPush变化检测策略介绍
查看>>
移动前端手机输入法自带emoji表情字符处理
查看>>
欢迎使用CSDN-markdown编辑器
查看>>
转 代码修改buildoption
查看>>
【SQL基础】三种类别语句
查看>>
JS学习笔记2_面向对象
查看>>
ZooKeeper管理员指南——部署与管理ZooKeeper
查看>>
3.进程的不同状态
查看>>
第三次作业
查看>>
行为树(Behavior Tree)实践(1)– 基本概念
查看>>
性能调优攻略
查看>>
Sublime 学习记录(二) package control 组件
查看>>
Emacs和Vim:神的编辑器和编辑器之神
查看>>
程序员必备基础——数据结构与算法学习资料分享01
查看>>
完成个人中心—导航标签
查看>>
matplotlib之散点图
查看>>
DML 语句
查看>>
swift------导入OC三方类找不到头文件的解决方法
查看>>
POJ 1703 Find them, Catch them (并查集)
查看>>