永发信息网

C语言头文件 iomacros.h解读

答案:3  悬赏:60  手机版
解决时间 2021-03-28 13:11
  • 提问者网友:最爱你的唇
  • 2021-03-27 19:39
C语言头文件 iomacros.h解读
最佳答案
  • 五星知识达人网友:零点过十分
  • 2021-03-27 21:12
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;
全部回答
  • 1楼网友:拾荒鲤
  • 2021-03-27 22:57
将名字为NAME的寄存器定义在地址ADDRESS,指定属性为ATTRIBUTE(比如只读,读写等等)
第二个定义和第一个的不同在于这个寄存器可以进行位操作
使用这个2个定义后就可以使用
__IO_REG8(NAME, ADDRESS, ATTRIBUTE)
简短的代替下面一串
__near __no_init volatile ATTRIBUTE unsigned char NAME @ ADDRESS;
十分简单明了
补充:
__near __no_init
这些是特定编译器支持的关键字.....
  • 2楼网友:一叶十三刺
  • 2021-03-27 22:46

#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 追问大神,能帮忙解读一下吗?大神,能帮忙解读一下吗?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯