我用的是电子白菜的DX32板子
准备将图片数据以TXT的格式放在SD卡里,将数据读出后都存到一个大数组里面。
交给TFT去显示。
思路很简单。
现在的问题是 这个数据比较大,320*240的屏 一幅图有153600个数据... 好大。
下面是电子白菜给的DEMO,用于从SD卡的TXT中读取数据。他这个数据是读一组输出一组的。
void TestSD(void)
{
FATFS fs;
FIL fil;
FRESULT res; //文件系统返回信息
char byte[65]; // 这个byte的大小是没有限制的,当然不能超过片内的ram。
// 所以,想全部读出可以直接修改她的大小。
u32 len;
f_mount(0,&fs);//注册一个文件系统
res=f_open(&fil,"/BWSTDO/test.txt",FA_OPEN_EXISTING|FA_READ);
if(res!=FR_OK)
{
USART1_Puts("SD卡打开文件失败\r\n");
return;
}
//读取文件并打印到串口上
for(;;)
{
res = f_read(&fil, byte, sizeof(byte)-1, &len);
if (res || len == 0)
break; // error or eof
byte[len]='\0';
USART1_Puts(byte);
}
f_close(&fil);
f_mount(0, NULL);
}
读出数据后用串口输出。我注意到这里他定义的byte是只有65.
我询问过他,他说这样做的目的是为了节省ram,不错。如果我想一次性读取txt中的所有数据的话。
我把byte的大小改为我所需要的数组长度:byte[153600]
程序运行到这句:res=f_open(&fil,"/BWSTDO/test.txt",FA_OPEN_EXISTING|FA_READ);
进入这个中断
/*******************************************************************************
* Function Name : HardFault_Handler
* Description : This function handles Hard Fault exception.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
在我看来在TFF文件系统里,byte的值是有范围的,不能乱给,还是因为sizeof(byte)-1 这个函数是有范围的??
------------------------------------痛苦的分割线------------------------------------------------------
可能说的有点乱。
总的来说,我的目的是,想把已知大小(153600)的所有数据都从SD的txt文件中读出,然后存入一个大数组中,TFT显示根据这个数组的数据进行显示。
现在我的问题是,DEMO中的方法是一次读出一组数据。我想把这一组一组的数据按顺序存入大数组中(假设为bmp_sd[] ).
我要怎么做... 能怎么做.. 昨晚搞到2点多,今天到现在还是没有解决,无奈前来求助各位。
下面有两个文件,一个是电子白菜给的读取SD卡txt文件的DEMO
另一个是我修改的,打算从SD卡中读取数据交给TFT做显示的文件。
要是这个问题解决了,等我整理完成,我所有代码原理图 开源上传哈! |