永发信息网

C语言头文件 iomacros.h解读

答案:3  悬赏:60  手机版
解决时间 2021-03-28 13:11
C语言头文件 iomacros.h解读
最佳答案
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;

typedef struct
{
unsigned short no0:1;
unsigned short no1:1;
unsigned short no2:1;
unsigned short no3:1;
unsigned short no4:1;
unsigned short no5:1;
unsigned short no6:1;
unsigned short no7:1;
unsigned short no8:1;
unsigned short no9:1;
unsigned short no10:1;
unsigned short no11:1;
unsigned short no12:1;
unsigned short no13:1;
unsigned short no14:1;
unsigned short no15:1;
} __BITS16;

typedef struct
{
unsigned long no0:1;
unsigned long no1:1;
unsigned long no2:1;
unsigned long no3:1;
unsigned long no4:1;
unsigned long no5:1;
unsigned long no6:1;
unsigned long no7:1;
unsigned long no8:1;
unsigned long no9:1;
unsigned long no10:1;
unsigned long no11:1;
unsigned long no12:1;
unsigned long no13:1;
unsigned long no14:1;
unsigned long no15:1;
unsigned long no16:1;
unsigned long no17:1;
全部回答
将名字为NAME的寄存器定义在地址ADDRESS,指定属性为ATTRIBUTE(比如只读,读写等等)
第二个定义和第一个的不同在于这个寄存器可以进行位操作
使用这个2个定义后就可以使用
__IO_REG8(NAME, ADDRESS, ATTRIBUTE)
简短的代替下面一串
__near __no_init volatile ATTRIBUTE unsigned char NAME @ ADDRESS;
十分简单明了
补充:
__near __no_init
这些是特定编译器支持的关键字.....

#ifndef __IO_MACROS_H
#define __IO_MACROS_H

#ifdef __IAR_SYSTEMS_ICC__
#ifndef _SYSTEM_BUILD
 #pragma system_include
#endif
#pragma language=save
#pragma language=extended

#define __REG8 unsigned char
#define __REG16 unsigned short
#define __REG32 unsigned long

#define __READ_WRITE
#ifdef __cplusplus
#define __READ 
#else
#define __READ const
#endif
#define __WRITE 

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;
typedef struct
{
 unsigned short no0:1;
 unsigned short no1:1;
 unsigned short no2:1;
 unsigned short no3:1;
 unsigned short no4:1;
 unsigned short no5:1;
 unsigned short no6:1;
 unsigned short no7:1;
 unsigned short no8:1;
 unsigned short no9:1;
 unsigned short no10:1;
 unsigned short no11:1;
 unsigned short no12:1;
 unsigned short no13:1;
 unsigned short no14:1;
 unsigned short no15:1;
} __BITS16;
typedef struct
{
 unsigned long no0:1;
 unsigned long no1:1;
 unsigned long no2:1;
 unsigned long no3:1;
 unsigned long no4:1;
 unsigned long no5:1;
 unsigned long no6:1;
 unsigned long no7:1;
 unsigned long no8:1;
 unsigned long no9:1;
 unsigned long no10:1;
 unsigned long no11:1;
 unsigned long no12:1;
 unsigned long no13:1;
 unsigned long no14:1;
 unsigned long no15:1;
 unsigned long no16:1;
 unsigned long no17:1;
 unsigned long no18:1;
 unsigned long no19:1;
 unsigned long no20:1;
 unsigned long no21:1;
 unsigned long no22:1;
 unsigned long no23:1;
 unsigned long no24:1;
 unsigned long no25:1;
 unsigned long no26:1;
 unsigned long no27:1;
 unsigned long no28:1;
 unsigned long no29:1;
 unsigned long no30:1;
 unsigned long no31:1;
} __BITS32;

#define __IO_REG8(NAME, ADDRESS, ATTRIBUTE) 
 volatile __no_init ATTRIBUTE unsigned char NAME @ ADDRESS
#define __IO_REG16(NAME, ADDRESS, ATTRIBUTE) 
 volatile __no_init ATTRIBUTE unsigned short NAME @ ADDRESS
#define __IO_REG32(NAME, ADDRESS, ATTRIBUTE) 
 volatile __no_init ATTRIBUTE unsigned long NAME @ ADDRESS

#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)
 volatile __no_init ATTRIBUTE union 
 { 
 unsigned char NAME; 
 BIT_STRUCT NAME ## _bit; 
 } @ ADDRESS
#define __IO_REG16_BIT(NAME, ADDRESS, ATTRIBUTE,BIT_STRUCT)
 volatile __no_init ATTRIBUTE union 
 { 
 unsigned short NAME; 
 BIT_STRUCT NAME ## _bit; 
 } @ ADDRESS
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT)
 volatile __no_init ATTRIBUTE union 
 { 
 unsigned long NAME; 
 BIT_STRUCT NAME ## _bit; 
 } @ ADDRESS
#pragma language=restore
#endif 

#ifdef __IAR_SYSTEMS_ASM__

#define __READ_WRITE 0
#define __READ 0
#define __WRITE 0

#define __IO_REG8(NAME, ADDRESS, ATTRIBUTE) 
 NAME DEFINE ADDRESS
#define __IO_REG16(NAME, ADDRESS, ATTRIBUTE) 
 NAME DEFINE ADDRESS
#define __IO_REG32(NAME, ADDRESS, ATTRIBUTE) 
 NAME DEFINE ADDRESS

#define __IO_REG8_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) 
 NAME DEFINE ADDRESS
#define __IO_REG16_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) 
 NAME DEFINE ADDRESS
#define __IO_REG32_BIT(NAME, ADDRESS, ATTRIBUTE, BIT_STRUCT) 
 NAME DEFINE ADDRESS
#endif 
#endif 追问大神,能帮忙解读一下吗?大神,能帮忙解读一下吗?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
爱学派平板电脑怎么解
LG G7(全网通)手机怎么样
我家的伊兰特不知道是那一款的?不知道是08还
龙鼎天著木门A6系列与A8系列有什么区别呢?
名师名师名题名师名题单元十周末冲刺一百分数
一只眼看的特别清晰一只眼什么都看不清是怎么
29×65怎么列竖式
为什么宋代很少有知识分子被处死?
韩风美容美发苑地址有知道的么?有点事想过去
爱普生l360真的不如佳能的p288好吗
奉贤这边有哪些夜大?有几个?
《晨雨初听》余秋雨 读后感 700字左右
59820除以15用算式怎么写
华为手机怎么解除root权限
知道为什么阴阳师改版后那么多人骂吗
推荐资讯
只要你说你爱我中第几集大和去了梅家
有一种鸟是关不住的,哪是什么鸟?
abaqus菜单太长,被任务栏遮挡,自动隐藏任务
认识了一个女孩,现在她每天要我叫她起床,今
查询用三个8等于6用什么方式做于6
文言文 《崔光》中面对太后的赏赐,百官有哪
5年级7乘0.86用坚式
辩论 我们比祖母过得更幸福的生活吗
四比三等于四分之三,四分之三既可以看作( )
自行车为什么前轮和后轮受到的摩擦力相反呢
全国有多少个张嘉瑜
北京哪里出售小礼服
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?