野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8897|回复: 3

[emWin] 求助:GUI_ALLOC_AllocZero申请的内存不能用

[复制链接]
发表于 2020-8-3 11:45:35 | 显示全部楼层 |阅读模式
  1. static void _ShowBMP(const char *sFilename, uint32_t x0, uint32_t y0)
  2. {
  3.        
  4.         FIL file;
  5.         FRESULT  result;
  6.         FILINFO         finfo;
  7.         uint8_t  *pData;
  8.         uint32_t bw;
  9.         WM_HMEM hMem;
  10.         uint32_t xSize, ySize;
  11.        
  12.        
  13.         result = f_open(&file, sFilename, FA_READ);
  14.         if (result != FR_OK)
  15.         {
  16.                 return;
  17.         }       
  18.        
  19.         result = f_stat( sFilename, &finfo );
  20.         if( result != FR_OK )
  21.         {
  22.                 return;
  23.         }       
  24.        
  25. //finfo.fsize = 12342Byte
  26. //#define GUI_NUMBYTES                  40*1024
  27. //定义分配给STemWin的内存足够
  28.         hMem = GUI_ALLOC_AllocZero(finfo.fsize);
  29.         pData = GUI_ALLOC_h2p(hMem);

  30.        
  31.         result = f_read(&file, pData, finfo.fsize, &bw);
  32.         if( result != FR_OK )
  33.         {
  34.                 return;
  35.         }

  36.         xSize = GUI_BMP_GetXSize(pData);
  37.         ySize = GUI_BMP_GetYSize(pData);
  38.        
  39.         GUI_BMP_Draw(pData, x0, y0);

  40. f_close(&file);       

  41.         GUI_ALLOC_Free(hMem);
  42. }
复制代码




问题点:
    1、使用f_read,读取12342个字节,直接报错;但是我定义一个大小为12342的数组,数据读取是成功的;
    2、直接使用大小为12342的数组,使用f_read读取数据,并且数据无误,得到的xSizeySize 也是无误的,但是就是显示不了BMP图片。


注:
    1、使用的STemWin版本是V5.32。
    2、图片大小为64*64的BMP图片,存放于SD卡。
    3、同样的BMP图片使用GUI_DrawBitmap,可以正常显示。





回复

使用道具 举报

发表于 2020-8-3 22:10:28 | 显示全部楼层
直接读取12342个字节是怎么读的,定义的数组又是怎么读的,方便贴代码嘛?
问题和贴的代码似乎不对应喔,可以参考例程里面的显示方式。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-4 10:49:42 | 显示全部楼层
本帖最后由 LookCrazy 于 2020-8-4 10:54 编辑
ZZZ_XXJ 发表于 2020-8-3 22:10
直接读取12342个字节是怎么读的,定义的数组又是怎么读的,方便贴代码嘛?
问题和贴的代码似乎不对应喔,可 ...

uint8_t  pData[12342];

result = f_read(&file, pData, 12342, &bw);

这样去读,再去内存中查看,和用Winhex打开.bmp图片,比较2者,是一样的。

另外,这个程序就是按照例程来写的。。。。。


回复 支持 反对

使用道具 举报

发表于 2020-8-4 19:41:50 | 显示全部楼层
LookCrazy 发表于 2020-8-4 10:49
uint8_t  pData[12342];

result = f_read(&file, pData, 12342, &bw);

目前这个还真看不出什么问题,有可能f_stat读到的文件大小不对。
至于不显示的问题,可以试试其他的显示方式,比如用GUI_BMP_DrawEx直接从sd卡里显示,或者用内存设备显示。如果都不能显示,并且RAM中确实存在图片数据,可以试试换一个更新版本的emwin库。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-6 19:23 , Processed in 0.047658 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表