硬汉嵌入式论坛

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

[GUI] 关于H743的EMWIN显示相关问题。。

[复制链接]

45

主题

60

回帖

195

积分

初级会员

积分
195
发表于 2021-1-7 10:38:47 | 显示全部楼层 |阅读模式
1. H743从NAND里装载十几张BMP图片,感觉装载速度和我以前用F429的速度基本一样,大概要几秒钟,太慢了,请问如何能提高装载速度,换成QSPI的NOR会快点??H743和F429的装载速度一样,这正常吗?
2. 使用外部SDRAM作为EMWIN的显存和动态内存。如果只是从NAND里装载图片到内存,再直接显示图片是可以的,但多张图片显示的速度就慢,有卡顿感。如果将装载的图片先画到存储设备里,这样显示速度就不是问题了,这在F429上是可行的,但在H743上却不显示了。。如下:
    for(i = 0; i < MAX_BITMAP; i++)
    {
                sprintf(bufN, "N0:\\bmp\\start\\%d.bmp", i);
                pStartLogo[i] = LoadGraphFile(bufN, &size);
               
                BmpMem[i] = GUI_MEMDEV_CreateEx(0, 0, 800, 600, GUI_MEMDEV_NOTRANS);
                if(BmpMem[i] == 0)
                    {
                      break;
                    }
                GUI_MEMDEV_Select(BmpMem[i]);
                GUI_BMP_Draw(pStartLogo[i], 0, 0);
               
                //GUI_ALLOC_Free((GUI_HMEM)pStartLogo[i]);
    }
    GUI_MEMDEV_Select(0);


说明:MPU配置如下:
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0xC0000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_32MB;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER2;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
        HAL_MPU_ConfigRegion(&MPU_InitStruct);


我看过一位工程师和我遇到的问题类似,硬汉兄给了解决方法(如上的配置),我也实验了,好像不能解决我的问题,,,那么我的问题出在哪里呢?请硬汉兄以及各位大神不吝赐教。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-1-7 14:49:50 | 显示全部楼层
图片显示姿势不对,你这个BMP比JEPG还卡

振奋人心的消息,攻克emWin底层使用硬件JPEG,实现更简单,全程使用SDRAM,显示800*480图片30ms
http://www.armbbs.cn/forum.php?m ... 3621&fromuid=58
(出处: 硬汉嵌入式论坛)

你要将BMP加载到存储设备里面绘制。然后调用存储设备的API来绘制
回复

使用道具 举报

45

主题

60

回帖

195

积分

初级会员

积分
195
 楼主| 发表于 2021-1-7 15:41:39 | 显示全部楼层
eric2013 发表于 2021-1-7 14:49
图片显示姿势不对,你这个BMP比JEPG还卡

振奋人心的消息,攻克emWin底层使用硬件JPEG,实现更简单,全程 ...

我在第二点里说了,用存储设备会导致不显示了啊。。这个怎么解决??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-1-7 16:16:07 | 显示全部楼层
perfect_co 发表于 2021-1-7 15:41
我在第二点里说了,用存储设备会导致不显示了啊。。这个怎么解决??

存储设备显示是基本操作,多试试。

测试时可以关闭SDRAM的读Cache和写Cache。

参考下帖:

使用STM32H7的AXI SRAM,SRAM1到SRAM4对应的Cache最高性能和最低性能配置
http://www.armbbs.cn/forum.php?m ... 9322&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

45

主题

60

回帖

195

积分

初级会员

积分
195
 楼主| 发表于 2021-1-7 19:48:31 | 显示全部楼层
eric2013 发表于 2021-1-7 16:16
存储设备显示是基本操作,多试试。

测试时可以关闭SDRAM的读Cache和写Cache。

我尝试了关闭CACHE,任然不行。。。。。。。。额。。
    MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
    MPU_InitStruct.BaseAddress      = 0xC0000000;
    MPU_InitStruct.Size             = MPU_REGION_SIZE_32MB;
    MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
    MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
    MPU_InitStruct.IsCacheable      = MPU_ACCESS_NOT_CACHEABLE;
    MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
    MPU_InitStruct.Number           = MPU_REGION_NUMBER2;
    MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
    MPU_InitStruct.SubRegionDisable = 0x00;
    MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;

    HAL_MPU_ConfigRegion(&MPU_InitStruct);

使用存储设备,就无法显示。。。。怎么回事。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-1-8 08:43:15 | 显示全部楼层
perfect_co 发表于 2021-1-7 19:48
我尝试了关闭CACHE,任然不行。。。。。。。。额。。
    MPU_InitStruct.Enable           = MPU_REGIO ...


方便的话,使用我的模板吧,刚刚帮你测试了,存储设备没问题.

1、基于STM32H7的uCOS-III + FatFS + emWin + ST USB的综合模板下载(已经发布2020-09-23)
http://www.armbbs.cn/forum.php?m ... d=100125&fromuid=58
(出处: 硬汉嵌入式论坛)

2、基于STM32H7的uCOS-II + FatFS + emWin + ST USB的综合模板下载(已发布2020-09-23)
http://www.armbbs.cn/forum.php?m ... d=100126&fromuid=58
(出处: 硬汉嵌入式论坛)

3、基于STM32H7的FreeRTOS+ FatFS + emWin + ST USB的综合模板下载(已经发布2020-09-23)
http://www.armbbs.cn/forum.php?m ... d=100127&fromuid=58
(出处: 硬汉嵌入式论坛)

4、基于V7开发板的裸机和各种RTOS版本的emWin程序模板,支持硬件JPEG,已发布(2019-05-26)
http://www.armbbs.cn/forum.php?m ... id=93843&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

5

主题

54

回帖

69

积分

初级会员

积分
69
发表于 2021-1-8 11:21:57 | 显示全部楼层
请教一下硬汉 ,我最近在调试emWin,老是莫名的进入硬件中断,使用对话框时程序还没跑呢就进入到硬件中断,H743下调试emWin  MPU应该怎么配置哇,我尝试修改了MUP有很小的概率程序能运行,大部分时候是不行的。
回复

使用道具 举报

45

主题

60

回帖

195

积分

初级会员

积分
195
 楼主| 发表于 2021-1-8 11:56:31 | 显示全部楼层
eric2013 发表于 2021-1-8 08:43
方便的话,使用我的模板吧,刚刚帮你测试了,存储设备没问题.

1、基于STM32H7的uCOS-III + FatFS +  ...

WM_SetCreateFlags(WM_CF_MEMDEV);貌似是它导致的,把它屏蔽掉就可以了。
回复

使用道具 举报

5

主题

54

回帖

69

积分

初级会员

积分
69
发表于 2021-1-8 15:22:13 | 显示全部楼层
16位的SDRAM配置上和32位的有什么区别吗
回复

使用道具 举报

5

主题

54

回帖

69

积分

初级会员

积分
69
发表于 2021-1-8 15:41:20 | 显示全部楼层
eric2013 发表于 2021-1-8 08:43
方便的话,使用我的模板吧,刚刚帮你测试了,存储设备没问题.

1、基于STM32H7的uCOS-III + FatFS +  ...

您的STM32H743  freeRTOS  emWim例程里的内存分配是不是有问题哇  每一层用了4M多,在SDRAM里却只给每一层分配2M的内存啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-1-9 08:18:54 | 显示全部楼层
perfect_co 发表于 2021-1-8 11:56
WM_SetCreateFlags(WM_CF_MEMDEV);貌似是它导致的,把它屏蔽掉就可以了。

使能窗口使用存储设备不影响这个应用。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-1-9 08:19:55 | 显示全部楼层
fengxiaoyu 发表于 2021-1-8 15:22
16位的SDRAM配置上和32位的有什么区别吗

STM32H7,STM32F4等在LTDC,LTDC+DMA2D驱动LCD方式时,SDRAM采用16bit或者32bit时性能比较
http://www.armbbs.cn/forum.php?m ... 2947&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-1-9 08:24:43 | 显示全部楼层
fengxiaoyu 发表于 2021-1-8 15:41
您的STM32H743  freeRTOS  emWim例程里的内存分配是不是有问题哇  每一层用了4M多,在SDRAM里却只给每一 ...

SDRAM头文件里分配是裸机里面使用的。

emWin的分配在:LCDConf_Lin_Template.c文件开头做的。

  1. /*
  2.    6. 设置图层1和图层2对应的显存地址
  3.       (1) EXT_SDRAM_ADDR 是SDRAM的首地址。
  4.       (2) LCD_LAYER0_FRAME_BUFFER 是图层1的显存地址。
  5.           (3) LCD_LAYER1_FRAME_BUFFER 是图层2的显存地址。
  6.           (4) 每个图层的显存大小比较考究,这里进行下简单的说明。
  7.               如果用户选择的颜色模式 = 32位色ARGB8888,显存的大小:
  8.               XSIZE_PHYS * YSIZE_PHYS * 4 * NUM_VSCREENS * NUM_BUFFERS
  9.                   
  10.               颜色模式 = 24位色RGB888,显存的大小:
  11.               XSIZE_PHYS * YSIZE_PHYS * 3 * NUM_VSCREENS * NUM_BUFFERS
  12.                   
  13.               颜色模式 = 16位色RGB566,ARGB1555, ARGB4444,AL88,那么显存的大小就是:
  14.               XSIZE_PHYS * YSIZE_PHYS * 2 * NUM_VSCREENS * NUM_BUFFERS

  15.               颜色模式 = 8位色L8,AL44,那么显存的大小就是:
  16.               XSIZE_PHYS * YSIZE_PHYS * 1 * NUM_VSCREENS * NUM_BUFFERS       
  17.       
  18.       这里为了方便起见,将开发板配套的16MB的SDRAM前8MB分配给LCD显存使用,后8MB用于emWin动态内存。
  19.           对于24位色,16位色,8位色,用户可以对其使能三缓冲,并且使能双图层。但是32位色也使能三缓冲和双
  20.           图层的话会超出8MB,所以用户根据自己的情况做显存和emWin动态内存的分配调整。
  21.             举一个例子,对于800*480分辨率的显示屏,使能32位色,三缓冲,那么最终一个图层需要的大小就是
  22.       800 * 480 * 4 * 3  = 4.394MB的空间,如果是双图层,已经超出8MB的分配范围。

  23.       (5)为了方便起见,图层2的宏定义LCD_LAYER1_FRAME_BUFFER中的参数4是按照32位色设置的,如果用户的图层1
  24.          使用的是8位色,这里填数字1,如果是16位色,这里填2,如果是24位色,这里填3。
  25. */
  26. #define LCD_LAYER0_FRAME_BUFFER  EXT_SDRAM_ADDR
  27. #define LCD_LAYER1_FRAME_BUFFER  (LCD_LAYER0_FRAME_BUFFER + XSIZE_PHYS * YSIZE_PHYS * 4 * NUM_VSCREENS * NUM_BUFFERS)
复制代码
回复

使用道具 举报

2

主题

38

回帖

44

积分

新手上路

积分
44
发表于 2021-3-4 16:29:14 | 显示全部楼层
硬汉哥,我的使用stm32h750+emwin+freertos,emwin移植的是不带os的,问题是在一个任务中调用gui_exec()函数时,会影响另外一个任务的进行;  之后我将gui_x.c参照你的上边例程换成了gui_x_freertos.c 也在gui_config里启用了os,但是效果还是一样的。主要是想一个任务获取按键值,另外一个任务根据按键值切换gui界面。但是一调用gui_exec()就出错,好几天了,硬汉哥有什么建议吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106420
QQ
发表于 2021-3-5 08:19:50 | 显示全部楼层
wangertan 发表于 2021-3-4 16:29
硬汉哥,我的使用stm32h750+emwin+freertos,emwin移植的是不带os的,问题是在一个任务中调用gui_exec()函 ...

不使用按键,单纯的调用GUI_Exec正常不。
回复

使用道具 举报

2

主题

38

回帖

44

积分

新手上路

积分
44
发表于 2021-3-10 08:48:44 | 显示全部楼层
eric2013 发表于 2021-3-5 08:19
不使用按键,单纯的调用GUI_Exec正常不。

是正常的 硬汉哥 后来发现问题是rtos里的任务栈小了(128),改为256就可以了,应该是内存溢出了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 16:09 , Processed in 0.239340 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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