硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1955|回复: 9
收起左侧

[emWin] 请教流位图显示的问题

[复制链接]

92

主题

293

回帖

569

积分

金牌会员

积分
569
发表于 2017-11-20 09:41:17 | 显示全部楼层 |阅读模式
我将图片保存在SD卡中,然后采用流位图的方式显示,但是程序总是卡在GUI_DrawStreamedBitmapAuto函数地方,不知道是哪没有弄对?
程序如下:

static void GUI_BKPic_Draw(uint8_t x, uint8_t y)
{
    FILE *fout;
    FINFO info;
    char *buffer;
    uint8_t result;
    GUI_HMEM hMem;
   
    result = finit("M0:");
    info.fileID = 0;
    result = ffind("M0:\\BKPic.dta", &info);
   
    hMem = GUI_ALLOC_AllocZero(info.size);
    buffer = GUI_ALLOC_h2p(hMem);
    fout = fopen("M0:\\BKPic.dta", "r");
    if (fout == NULL)
    {        
        return;        
    }   
    result = fread(buffer, 8, info.size, fout);
    fclose(fout);
    GUI_DrawStreamedBitmapAuto(buffer, x, y);
    GUI_ALLOC_Free(hMem);
}


void MainTask(void)
{
    /* 初始化 */
    GUI_Init();
        
    WM_MULTIBUF_Enable(1);        /* 开启多缓冲 */
    WM_MOTION_Enable(1);    /* 使能滑动 */
    WM_MOTION_SetDefaultPeriod(20);
   
    GUI_UC_SetEncodeUTF8();     /* 要显示中文 */
    /* 显示游标 */
    GUI_CURSOR_Show();   
   
    /* 绘制背景图片 */
    hMemBKPic = GUI_MEMDEV_CreateFixed(0, 0, 800, 480,
                                        GUI_MEMDEV_HASTRANS,
                                        GUI_MEMDEV_APILIST_16,
                                        GUICC_M565);
    GUI_MEMDEV_Select(hMemBKPic);
    GUI_BKPic_Draw(0 ,0);
    /* 绘制位图图标 */
    GUI_DrawBitmap(&bmtemperature,100, 100);   
    GUI_MEMDEV_CopyToLCD(hMemBKPic);
    while(1)
    {        
        GUI_Delay(100);        
    }
}

整改过程中,result是正确的,info.size的值也是正确的(大小和文件大小一样),说明文件系统这块没有问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-11-20 09:55:04 | 显示全部楼层
函数GUI_DrawBitmap(&bmtemperature,100, 100);    后面加上GUI_MEMDEV_Select(0);
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2017-11-20 10:18:21 | 显示全部楼层
GUI_BKPic_Draw(0 ,0);
    /* 绘制位图图标 */
    GUI_DrawBitmap(&bmtemperature,100, 100);   

实际上是GUI_BKPic_Draw(0,0),这个函数,然后进去后就卡在了该函数里面的GUI_DrawStreamedBitmapAuto(buffer, x, y);函数了
与 GUI_DrawBitmap(&bmtemperature,100, 100);  没有关系,问题还是在GUI_BKPic_Draw(0 ,0);,但是不知道GUI_BKPic_Draw(0 ,0);有什么问题
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-11-20 10:37:08 | 显示全部楼层

回 feiante 的帖子

feiante:GUI_BKPic_Draw(0 ,0);
    /* 绘制位图图标 */
    GUI_DrawBitmap(&bmtemperature,100, 100);    

实际上是GUI_BKPic_Draw(0,0),这个函数,然后进去后就卡在了该函数里面的GUI_DrawStreamedBitmapAuto(buffer .. (2017-11-20 10:18) 
函数result = ffind("M0:\\\\BKPic.dta", &info);有问题,先把这个函数注释掉,然后申请一个大的空间,你的文件多大,申请个比他大的,测试。

然后二楼回复的务必加上。
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2017-11-20 13:57:48 | 显示全部楼层
注释了result = ffind("M0:\\\\BKPic.dta", &info);
改成 hMem = GUI_ALLOC_AllocZero(1024*1024*2);分配2M的空间,实际文件就700多k,此时就会卡在这个函数上,
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-11-21 01:54:24 | 显示全部楼层

回 feiante 的帖子

feiante:注释了result = ffind("M0:\\\\BKPic.dta", &info);
改成 hMem = GUI_ALLOC_AllocZero(1024*1024*2);分配2M的空间,实际文件就700多k,此时就会卡在这个函数上, (2017-11-20 13:57) 
是不是动态内存不足了,看下你的GUIConf.c文件中配置的动态内存大小,以及用emWin的动态内存剩余函数获取下,申请前看看还剩多大。
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2017-11-21 11:12:25 | 显示全部楼层
开始我也觉得是不是内存分配错误了,但是看了下GUIConf.c文件中配置的动态内存是8M,附件是我的工程文件,麻烦硬汉有时间帮我试试。
同时还想问下,result = ffind("M0:\\\\BKPic.dta", &info);的使用为什么有问题。谢谢
RL_RTX+emWin+RL_Fatfs.rar (3.18 MB, 下载次数: 74)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-11-22 01:10:18 | 显示全部楼层

回 feiante 的帖子

feiante:开始我也觉得是不是内存分配错误了,但是看了下GUIConf.c文件中配置的动态内存是8M,附件是我的工程文件,麻烦硬汉有时间帮我试试。
同时还想问下,result = ffind("M0:\\\\BKPic.dta", &info);的使用为什么有问题。谢谢
 (2017-11-21 11:12) 
先不调用函数 GUI_ALLOC_Free(hMem);释放,看看是否可行。
回复

使用道具 举报

92

主题

293

回帖

569

积分

金牌会员

积分
569
 楼主| 发表于 2017-11-22 21:35:33 | 显示全部楼层
不可以,程序已经卡在了申请动态内存这了,根本就到不了释放的这句。

另:网站是不是又出问题了,怎么有些分类处显示今日都好几百更新了。如下图
11.PNG
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2017-11-23 00:36:47 | 显示全部楼层

回 feiante 的帖子

feiante:不可以,程序已经卡在了申请动态内存这了,根本就到不了释放的这句。

另:网站是不是又出问题了,怎么有些分类处显示今日都好几百更新了。如下图
 (2017-11-22 21:35) 
论坛第三次被攻击了,我是从早上8点开始删这些帖子,删了一个小时才删除干净。

另外你的这个问题,这两天有时间了我专门给你测试下再回复你。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-15 23:31 , Processed in 0.372363 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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