#define LCD_XSIZE_TFT (320)
#define LCD_YSIZE_TFT (240)
#define SCR_XSIZE_TFT (LCD_XSIZE_TFT*2)
#define SCR_YSIZE_TFT (LCD_YSIZE_TFT*2)
#define LCDFRAMEBUFFER 0x33800000
U16 (*frameBuffer16BitTft)[SCR_XSIZE_TFT];
frameBuffer16BitTft=(U16 (*)[SCR_XSIZE_TFT])LCDFRAMEBUFFER;
1 、 #define LCDFRAMEBUFFER 0x33800000
定义 LCD 显存在 SDRAM 的地址,硬件上 SDRAM(64M) 的片选连接的是 nGCS6 ,所以 SDRAM 的起始地址为 0x3000 0000 ,结束地址 0x3800 0000
2 、 U16 (*frameBuffer16BitTft)[SCR_XSIZE_TFT];
定义一个指针数组,数组中的数据为 U16 类型
指针中有 SCR_XSIZE_TFT 个元素 也就是 frameBuffer16BitTft 所值的对象是有 SCR_XSIZE_TFT 个 U16 的元素的数组 即 frameBuffer16BitTft 是行指针
3 、 frameBuffer16BitTft=(U16 (*)[SCR_XSIZE_TFT])LCDFRAMEBUFFER;
这个就是给 frameBuffer16BitTft 指针赋值 地址为 0x33800000
这个不太好理解,平时我们基本上都是这样定义的 直接定义成一个二维数组
// 定义 FRAMEBUFFER 缓冲区
__align(4) volatile uint16 FrameBuffer[GUI_LCM_YMAX][GUI_LCM_XMAX];
这里涉及到二维数组指针,好久没有看了,呵呵,复习一下
1 、定义一个二维数组 首地址为 0
int a[3][4]={{1 , 3 , 5 , 7} , {9 , 11 , 13 , 15} , {17 , 19 , 21 , 23}}
表示形式 含义 地址
a 二维数组名,数组首地址, 0 行首地址 0
a[0],*(a+0),*a 第 0 行 第 0 列元素地址 0
a+1.&a[1] 第 1 行首地址 8
a[1],*a(a+1) 第 1 行第 0 列元素地址 8
a[1]+2,*(a+1)+2,&a[1][2] 第 1 行第 2 列元素地址 12
*(a[1]+2),*(*a(+1)+2),a[1][2] 第 1 行第 0 列的值 13
2 、定义一个数组指针
int (*p)[4];
int a[3][4]={{1 , 3 , 5 , 7} , {9 , 11 , 13 , 15} , {17 , 19 , 21 , 23}}
int (*p)[4]; 表式 p 是一个指针变量,他指向包含 4 个元素的一维数组,两侧的括号不可缺少
///
作者:宇帆 cfanlwn
时间:2010-01-12 11:23:27