硬汉嵌入式论坛

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

[TouchGFX] 如何減少Frame buffer大小

  [复制链接]

9

主题

11

回帖

38

积分

新手上路

积分
38
发表于 2021-3-4 10:43:35 | 显示全部楼层 |阅读模式
目前我的LCD是320X240,格式RGB565,MCU是用STM32H750
因為要把RAM儘量空出來做其它事...所以想要減少Frame buffer的大小...
我算了一下..320X240如果是RGB565的格式..一個BUFFER要用到150KB..
Double frame Buffer 就要300KB...(之前用單一BUFFER時有閃爍..所以還是預計用Double buffer)...

在想可不可以把顏色的深度改成8-bits...這樣BUFFER用量就減半了...
然後MCU輸出還是靠LDTC輸出RGB565的方式...
顏色變單調可以接受....
不知道能不能這樣做?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2021-3-4 11:04:56 | 显示全部楼层
TouchGFX不熟悉,帮顶下。
回复

使用道具 举报

19

主题

373

回帖

430

积分

高级会员

积分
430
发表于 2021-3-4 12:44:59 | 显示全部楼层
Frame buffer改8位的貌似不行吧,没试过,楼主可以试一下
主要看TouchGFX内核是怎么处理的,比如说Frame buffer默认是按16位(uint16_t)储存的数组,你改为8位,只是内核把数组按8位处理(储存还是按16位)。还是看源码吧
回复

使用道具 举报

11

主题

122

回帖

160

积分

初级会员

积分
160
发表于 2021-3-4 17:44:01 | 显示全部楼层
touchgfx4.15提供了这种小内存buffer的机制。https://www.stmcu.com.cn/mkt_info/1696
回复

使用道具 举报

2

主题

31

回帖

37

积分

新手上路

积分
37
发表于 2021-3-5 17:50:09 | 显示全部楼层

touchgfx4.15提供的小内存buffer的机制,好像只适合带有显存的lcd,我试了stm32h7的RGB屏,没有成功!LCD必须要带显存,才可以用他的小内存,即部分缓存!不知我说的对不对?忘赐教!
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2021-3-24 22:34:19 | 显示全部楼层
这个你得问我啦,哈哈~~~
楼主,我有成功经验,要试用L8格式的,可以减少。
但是在Touch里面要配置成ARGB2222格式的,但是你在驱动里面,LTDC要配置成L8格式的,而且有一个颜色对照表,要做颜色的映射,图片的透明好像就损失了
目前我对透明没有很好的处理办法。楼上说的对,小内存buffer的机制,需要LCD带显存,你别指望了。
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-1-14 17:56:42 | 显示全部楼层
zhang0352505 发表于 2021-3-24 22:34
这个你得问我啦,哈哈~~~
楼主,我有成功经验,要试用L8格式的,可以减少。
但是在Touch里面要配置成ARGB ...

我在用DMA2D和LTDC 的L8格式,输出只有灰阶~。
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2022-1-15 11:15:52 | 显示全部楼层
cheng.hl@qq.com 发表于 2022-1-14 17:56
我在用DMA2D和LTDC 的L8格式,输出只有灰阶~。

现在的Touch直接L8的,不用配置成ARGB2222了,但是DMA2D不支持L8格式的啊,你咋输出的?
我用L8的时候,直接用CPU搬运的
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-1-17 12:38:41 | 显示全部楼层
本帖最后由 cheng.hl@qq.com 于 2022-1-18 12:29 编辑
zhang0352505 发表于 2022-1-15 11:15
现在的Touch直接L8的,不用配置成ARGB2222了,但是DMA2D不支持L8格式的啊,你咋输出的?
我用L8的时候, ...

DMA2D做完像素转换,还是会保存在帧缓存里.  用dma2d输出跑起来试了试,直接看memory窗口的ram,像素数据超过一个字节,虽然屏幕的纯色确实在整体切换,但显存只有一部分再刷新。所以还是不敢用了~
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-1-17 12:41:18 | 显示全部楼层
zhang0352505 发表于 2022-1-15 11:15
现在的Touch直接L8的,不用配置成ARGB2222了,但是DMA2D不支持L8格式的啊,你咋输出的?
我用L8的时候, ...

我也是直接CPU搬运了,正在考虑,彩色转L8,L8再转成彩色,怎么对应起来得问题。本来想用LVGL,看到楼上兄弟的touchgfx,有ARGB2222,就在想,这个色彩转换,是不是可以用touchgfx自己做。。
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2022-1-17 18:46:26 | 显示全部楼层
cheng.hl@qq.com 发表于 2022-1-17 12:41
我也是直接CPU搬运了,正在考虑,彩色转L8,L8再转成彩色,怎么对应起来得问题。本来想用LVGL,看到楼上 ...

TouchGFX支持你在Touch里面使用彩色图片,,设置成这样就可以转成L8格式了。
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-1-18 12:32:25 | 显示全部楼层
zhang0352505 发表于 2022-1-17 18:46
TouchGFX支持你在Touch里面使用彩色图片,,设置成这样就可以转成L8格式了。

L8显示的是彩色还是灰阶?现在正在尝试用touchgfx,发现编译过不了。
zdyz_gfx\zdyz_gfx.axf: Error: L6242E: Cannot link object touchcalibration.o as its attributes are incompatible with the image attributes.
   ... wchart-16 clashes with wchart-32.
   ... packed-enum clashes with enum_is_int.
类似的错误提示有24个。AC6的编译选项是否勾选 short enums/whcar,都有这个编译错误。切换到AC5,也是一样,卡在这里了。
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-1-18 16:30:20 | 显示全部楼层
cheng.hl@qq.com 发表于 2022-1-18 12:32
L8显示的是彩色还是灰阶?现在正在尝试用touchgfx,发现编译过不了。
zdyz_gfx\zdyz_gfx.axf: Error: L6 ...

touchgfx_core.lib,我换成了M7 AC5的版本,再用AC5编译,通过了。
接下来,运行出现一些奇怪的问题。用的stm32H750+qspi flash存程序。
直接进入hard fault。
看call stack。启动文件.s会直接调用__cpp_initialize__aeabi_,它调用一些在qspi flash上面的东西,call stack只显示这些“东西”的地址是0x9000xxxx(qspi flash上),在.map里面找这个地址对应的函数还找不到。也就说我没法调整分散加载文件规避这个问题了~~
再一次进入死胡同。
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2022-1-18 16:59:49 | 显示全部楼层
cheng.hl@qq.com 发表于 2022-1-18 16:30
touchgfx_core.lib,我换成了M7 AC5的版本,再用AC5编译,通过了。
接下来,运行出现一些奇怪的问题。用 ...

001.png 昨天图没传上来,补上。
你那个问题,我感觉像是分散加载时候设置的初始化问题。
我这里是用的IAR,在.icf文件里配置的
initialize by copy { readwrite };
do not initialize  { section .noinit };
类似于这种配置。

回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2022-1-19 09:16:22 | 显示全部楼层
zhang0352505 发表于 2022-1-18 16:59
昨天图没传上来,补上。
你那个问题,我感觉像是分散加载时候设置的初始化问题。
我这里是用的IAR,在. ...

需要CUBEmx里LTDC配置成RGB565,gfx d里才出现L8_RGB565。配成L8,仅有ARGB2222的选项。这样一来,LTDC的显存不就是每个像素两字节吧。我还没有试过。
回复

使用道具 举报

13

主题

192

回帖

231

积分

高级会员

积分
231
发表于 2022-1-19 10:43:52 | 显示全部楼层
cheng.hl@qq.com 发表于 2022-1-19 09:16
需要CUBEmx里LTDC配置成RGB565,gfx d里才出现L8_RGB565。配成L8,仅有ARGB2222的选项。这样一来,LTDC的 ...

啊,对,是这么的。忘了我们现在的LTDC是RGB565了
回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
发表于 2022-2-17 13:31:28 | 显示全部楼层
你的Frame Buffer还能怎样小?
用RGB565为例, 驱动800*480的屏, 最小也要开(800 * 480 * 2)Bytes的显存空间啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2022-2-18 00:28:06 | 显示全部楼层
hjhj7591418 发表于 2022-2-17 13:31
你的Frame Buffer还能怎样小?
用RGB565为例, 驱动800*480的屏, 最小也要开(800 * 480 * 2)Bytes的显存空 ...

这个不能再小。至少要够一帧的显存。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 04:48 , Processed in 0.230983 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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