论坛元老
 
- 积分
- 3371
- 金钱
- 3371
- 注册时间
- 2015-1-7
- 在线时间
- 794 小时
|
发表于 2016-5-11 21:04:57
|
显示全部楼层
数据结构是数据的组织方式的说明,比如说
typedef struct _TA
{
unsigned char u8A;
unsigned char u8B;
unsigend char u8C;
unsigend char u8D:
}TA;
这样就定义了一个结构体“类型”TA,可以用TA来定义一个类型为TA的结构体“实体”。例如:
TA tA;// tA是结构体实体,结构体类型是TA,里面有4个unsigned char类型的数据
tA.u8A = 1;
tA.u8B = 2;
tA.u8C = 3;
tA.u8D = 4; // "."符号是结构体“实体”tA访问成员的符号,如果tA是个指针,那就需要用“->”
强调一下这里TA表示的是结构体的“类型”,可以定义TA类型的指针,表明该指针的值是一个TA结构体实体的地址。进一步来讲,如果我指定一个地址,并强制转换数据类型为(TA*),那这个地址后面的数据就按照TA的格式布局来解读。例如
unsigned int u32A = 0x11223344; //定义一个32位的变量,值为0x11223344,假设变量的地址为0x20000000;
TA * ptA = (TA *)(&u32A); //定义一个TA类型的指针,并且把u32A的地址0x20000000赋值给这个指针变量
//那就指明了0x20000000这段的内存按照TA结构的数据组织方式来理解数据。
//假设为大端模式,高位数据在低位地址
//ptA->u8A的值为0x11,地址为0x20000000;
//ptA->u8B的值为0x22,地址为0x20000001;
//ptA->u8C的值为0x33,地址为0x20000002;
//ptA->u8D的值为0x44,地址为0x20000003;
这样这个u32A的32位整型变量就可以作为TA类型的数据来理解---4个8位char型数据。
再回到楼主的问题
LCD_BASE是一个地址 (对应于上例中u32A的地址0x20000000)
LCD_TypeDef是一个结构体类型 (对应上例中的TA)
((LCD_TypeDef *)LCD_BASE)就是把LCD_BASE这个地址数据以LCD_TypeDef的格式来理解 (对应上例中的(TA *)(&u32A))
LCD就表示上述的((LCD_TypeDef *)LCD_BASE)这个地址 (对应上例中的ptA = (TA *)(&u32A))
LCD->LCD_REG就表示按照LCD_TypeDef格式解读第一个结构体成员 (对应上例中的ptA->u8A)
LCD->LCD_RAM就表示按照LCD_TypeDef格式解读第二个结构体成员 (对应上例中的ptA->u8B)
总结来说,通过LCD_TypeDef这个结构体类型来解读地址为(0x6C000000 | 0x0000007E)及其后面的数据。
以上仅仅从C语言的角度的解释,中间还有很多概念没有详述,可以看看C语言方面的书。
从功能角度来说,只要理解这个LCD就代表LCD的操作即可
|
|