2019-07-15 21:00发布
youhuofree0 发表于 2014-1-19 15:49 首先,谢谢您的回答,这个我知道,问题是我想让这个结构体第二个成员地址为0x6002 0000,后面用到LCD->L ...
dongyumin 发表于 2014-1-19 16:08 typedef struct { __IO uint16_t CR1;
dongyumin 发表于 2014-1-19 18:10 #define LCD_RAM ((volatile u16*)0x60020000) #define LCD_REG ((volatile u16*)0x60000000)
最多设置5个标签!
结构体每个成员变量都是16bit的。所以,第一个LCD->LCD_REG的地址0X60000000.第二个LCD->LCD_RAM地址自增2个字节。。。
typedef struct
{
__IO uint16_t CR1;
uint16_t RESERVED0;
__IO uint16_t CR2;
uint16_t RESERVED1;
__IO uint16_t OAR1;
uint16_t RESERVED2;
__IO uint16_t OAR2;
uint16_t RESERVED3;
__IO uint16_t DR;
uint16_t RESERVED4;
__IO uint16_t SR1;
uint16_t RESERVED5;
__IO uint16_t SR2;
uint16_t RESERVED6;
__IO uint16_t CCR;
uint16_t RESERVED7;
__IO uint16_t TRISE;
uint16_t RESERVED8;
} I2C_TypeDef;
库里的结构体,定义了成员变量RESERVED来保留一些不用的地址空间,,,这些寄存器实质都是4字节的,而有效位都只有它们的低16位,软件上为了对齐,定义了保留成员变量用于填充内存。。。
我是不是可以理解为将第一个变量地址指定为0x6000 0000,中间填充保留变量(实际未用),一直到地址为0x6002 0000呢?可是这样定义的保留变量就太多了2的16次方个(65536)。能不能弄到一个结构体中呢?不能的话,怎样定义成该地址的指针变量啊?再次感谢!
#define LCD_REG ((volatile u16*)0x60000000)
直接这样变成指针吧、、、呵呵、
好吧,谢谢啦~
一周热门 更多>