搜索
bottom↓
回复: 8

stm32f429 用emwin刷图片速度变慢问题

[复制链接]

出0入0汤圆

发表于 2017-7-13 10:54:19 | 显示全部楼层 |阅读模式
用emwin测试10几张图片轮流显示,sdram的内存设置4M byte,不管显示jpg还是bmp,一开始几张图片很快,约20ms,分辨率800X480,之后就很慢,约1-2秒,重新初始化gui也不行,必须重启机器,从打印信息看,是内存分配不到,函数ShowBMP返回一直显示地址为0。若把sdram的emwin内存设置8M,那么图片快可以多显示几张,后边又开始慢了。程序如下,不知道改哪里,没思路。。。。

GUI_HMEM ShowBMP(const char *sFilename, int x, int y)
{
        char *_acBuffer;
        int XSize, YSize;
        GUI_HMEM hMem;
        GUI_MEMDEV_Handle hMemBMP;
       uint32_t len=0,i;

        FPic =fopen(sFilename,  "r" );
      if(FPic == NULL){
                return 0;
        }         
        /* 申请一块内存空间 并且将其清零 */
        hMem = GUI_ALLOC_AllocZero(1536000);       
        /* 将申请到内存的句柄转换成指针类型 */
        _acBuffer = GUI_ALLOC_h2p(hMem);
     print(0,"hMem=%x\n",_acBuffer );
      for(i=0;;i++){
         if( fread(_acBuffer+i,1, 1, FPic)==0){
            break;
            }
         else {
            len++;
         }
      }
        XSize = GUI_BMP_GetXSize(_acBuffer);
        YSize = GUI_BMP_GetYSize(_acBuffer);
         print(0,"bmp XSize=%u   y=%u \n",XSize,YSize);
        /* 创建内存设备,并将BMP图片绘制到此内存设备里面,此内存设备要在主程序中用到
           所以退出此函数前,不要释放。
        */
        hMemBMP = GUI_MEMDEV_CreateEx(0, 0, XSize, YSize, GUI_MEMDEV_HASTRANS);
        GUI_MEMDEV_Select(hMemBMP);
        GUI_BMP_Draw(_acBuffer, 0, 0);
        GUI_MEMDEV_Select(0);
        /* 释放动态内存hMem */
        GUI_ALLOC_Free(hMem);
        // print(0,"hMem=%x\n",hMem);
        /* 关闭文件 */
        fclose(FPic);
        return hMemBMP;
}

void Display_BMP(void)
{

GUI_MEMDEV_Handle hMemBMP;
                uint32_t t0, t1, i, count = 0;
               
                       
                GUI_DispStringAt("Load BMP File to Memory Devices....", 10, 10);
               
                /* 加载BMP图片到内存设备 */
                hMemBMP = ShowBMP("U0:\\1.bmp", 0, 0);
                  print(0,"hMemBMP= %x\r\n", hMemBMP);
                /*刷新20次,串口打印速度数值,时间单位ms */
                //for(i = 0; i < 20; i++)
                {
                        t0 = GUI_GetTime();
         
                        /* 用到BMP图片的时候,调用此函数即可 */
                        GUI_MEMDEV_WriteAt(hMemBMP, 0, 0);
            
                        t1 = GUI_GetTime() - t0;
            
                        print(0,"speed  = %dms\r\n", t1);
                        count += t1;
                }
               
                /* 求出刷新20次的平均速度 */
                //print(0, "speed = %dms/frame", count/i);
               
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2017-7-13 11:27:10 | 显示全部楼层
解决了,没释放hMemBMP

出0入0汤圆

发表于 2017-7-13 11:30:25 | 显示全部楼层
hi  我正想帮你把这个问题转到armfly呢  你已经解决了哈

出0入0汤圆

 楼主| 发表于 2017-7-13 14:08:46 | 显示全部楼层
哈哈                 

出0入0汤圆

发表于 2018-11-2 17:30:33 | 显示全部楼层
请教楼主,如果我需要使用429播放视频,视频放在外挂的nandflash上,是否还需要外挂ram?

出0入0汤圆

 楼主| 发表于 2018-11-5 10:25:27 | 显示全部楼层
sinc_mark 发表于 2018-11-2 17:30
请教楼主,如果我需要使用429播放视频,视频放在外挂的nandflash上,是否还需要外挂ram? ...

视屏应该要先解压到ram把

出10入12汤圆

发表于 2018-11-5 19:38:23 | 显示全部楼层
恭喜恭喜!!

出0入0汤圆

发表于 2018-11-5 20:01:51 | 显示全部楼层
chengying 发表于 2018-11-5 10:25
视屏应该要先解压到ram把

不应该啊,视频通常都比较大,不可能有那么大的ram,现在我不清楚,到底需要多大的ram可以流畅的播放视频!

出0入0汤圆

发表于 2018-11-7 12:46:33 | 显示全部楼层
sinc_mark 发表于 2018-11-2 17:30
请教楼主,如果我需要使用429播放视频,视频放在外挂的nandflash上,是否还需要外挂ram? ...

外挂SDRAM是必须的,在你的另一个帖子,回复你了。
------------------
移植emwin 资源评估请教
https://www.amobbs.com/thread-5701720-1-1.html
(出处: amoBBS 阿莫电子论坛)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-2 11:48

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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