|
实际测试F1+SRAM的速度的确跟F4+SRAM有些差距。
实际测试发现直接使用FatFS SDIO DMA 4bit方式加载图标到SRAM会导致emWin无法正常的显示图片。
现在都是先使用内部SRAM作为缓冲,然后再给外部SRAM使用。
- /*
- *********************************************************************************************************
- * 函 数 名: _ShowJPG
- * 功能说明: 显示JPEG图片
- * 形 参:sFilename 要显示的图片名字
- * 返 回 值: 无
- *********************************************************************************************************
- */
- static void _ShowJPG(const char * sFilename)
- {
- GUI_HMEM hMem;
- char *_acBuffer;
- int i;
- /* 申请一块内存空间 并且将其清零 */
- hMem = GUI_ALLOC_AllocZero(1024*400);
- /* 将申请到内存的句柄转换成指针类型 */
- _acBuffer = GUI_ALLOC_h2p(hMem);
-
- /* 打开文件 */
- result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
- if (result != FR_OK)
- {
- return;
- }
- /*
- * 1. 读取数据到缓存, 由于FatFS+官方SD卡的方案存在DMA传输上的4字节对齐问题,这里以小于等于一个
- * SD卡扇区大小来操作,超过512字节会出错。
- * 2. 直接通过SDIO的DMA将SD卡中的数据发送给外部SRAM会出问题,这里通过tempbuf做一下缓冲。
- */
- for(i = 0; i < file.fsize / 512; i++)
- {
- result = f_read(&file, tempbuf, 512, &bw);
- memcpy(_acBuffer, tempbuf, 512);
- _acBuffer += 512;
- }
-
- result = f_read(&file, tempbuf, file.fsize % 512, &bw);
- memcpy(_acBuffer, tempbuf, file.fsize % 512);
- /* 重新获得所申请动态内存的首地址 */
- _acBuffer = GUI_ALLOC_h2p(hMem);
-
- GUI_JPEG_GetInfo(_acBuffer, file.fsize, &JpegInfo);
- GUI_JPEG_Draw(_acBuffer,
- file.fsize,
- 0,
- 0);
- GUI_ALLOC_Free(hMem);
- f_close(&file);
-
- while(1)
- {
- GUI_Delay(10);
- }
- }
复制代码 |
|