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

IAR中 C语言位定义的更多相关文章

  1. C语言中的按位移动及其简单引用

    C语言中的按位移动及其简单应用 在C语言中按位左移用”<<”表示,按位右移用”>>”表示. 按位左移和按位右移运算经常被用来替换乘二和除二运算,但是要注意,这两者之间并不完全等 ...

  2. C语言编程中函数指针的定义及使用

    C语言中函数指针的定义: typedef int (*funcPtr)(int, int)表示定义了一个函数指针funcPtr,这个函数指针只能指向如下: int add(int, int).int ...

  3. Python语言中的按位运算

    (转)位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加 ...

  4. 【C语言】求两个数中不同的位的个数

    //求两个数中不同的位的个数 #include <stdio.h> int count_different(int a, int b) { int count = 0; int c = a ...

  5. 浅谈单片机中C语言与汇编语言的转换

    做了一单片机设计,要用C语言与汇编语言同时实现,现将这次设计的感受和收获,还有遇到的问题写下,欢迎感兴趣的朋友交流想法,提出建议. 单片机设计:基于51单片机的99码表设计 软件环境:Proteus8 ...

  6. 编程实践中C语言的一些常见细节

    对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个环境获得,为简化起见, ...

  7. 小心C语言的定义与声明

    小心C语言的定义与声明 转自360博客 注:为便于说明问题,文中提及的变量和函数都被简化. 一.起源 DBProxy在测试过程中,发现对其执行某步管理操作后,程序有时会崩溃,但不是每次都出现. 二.G ...

  8. c语言宏定义#define的理解与资料整理

    1. 利用define来定义 数值宏常量 #define 宏定义是个演技非常高超的替身演员,但也会经常耍大牌的,所以我们用它要慎之又慎.它可以出现在代码的任何地方,从本行宏定义开始,以后的代码就就都认 ...

  9. java boolean 值在内存中占几位?

      java boolean 值在内存中占几位?    <Java虚拟机规范>中这样描述:虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持.在Java虚拟机中没有任何供 ...

随机推荐

  1. gulp 实践

    文档站YDoc 相关注意事项 sass 编译 目录结构 可以直接使用sass编译 ➜ ydoc git:(v2) ✗ sass ./sass/app.scss ./template/source/ap ...

  2. Android_Service

    xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  3. %s 与 %0s在 verilog中的区别

    what is different between %s and %0s?(%s和%零s) %s prints the string as it is with spaces at the begin ...

  4. visio篇章--1

    因为要做需求规格说明书的需要,所以学着用visio.发现visio中其实有很多东西的.我昨晚是用它来画ER图.不画不知道,花了之后才发现有很多窍门在里面.不说废话.我列举一下应该要的东西 1.百度链接 ...

  5. PHP中的ob_start() 的使用

    1.在PHP编程中, 我们经常会遇到一些直接产生输出的函数, 如passthru(),readfile(), var_dump() 等. 但有时我们想把这些函数的输出导入到文件中,或者先经过处理再输出 ...

  6. DevExpres表格控件运行时动态设置表格列

    本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...

  7. 20160408javaweb之JDBC ---PreparedStatement

    PreparedStatement 1.Sql注入:由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻 ...

  8. Android----二维码开发

    Android----二维码开发 本文为原创,转载请注明出处:http://www.cnblogs.com/xiaobaicai12138/p/5644244.html 一.工具 谷歌的zxing 不 ...

  9. android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地

    http://blog.csdn.net/jason0539/article/details/45602655 应用发生crash之后要查看log,判断问题出在什么地方,可是一旦应用发布出去,就要想办 ...

  10. C++编程注意事项

    1.所有成员变量在构造函数中进行初始化操作,如指针赋值为空,bool赋值为FALSE(默认为TRUE); 2.构造函数与析构函数配对出现,执行反向操作,保证执行析构之后,没有遗留问题存在: 3.如果需 ...