中级会员
- 积分
- 303
- 金钱
- 303
- 注册时间
- 2019-11-10
- 在线时间
- 61 小时
|
5金钱
本帖最后由 woshi520laoxie 于 2024-1-4 22:13 编辑
使用板卡:RK3568
使用测试代码:IMX6ULL的第十九章 FrameBuffer应用编程代码
问题描述:
#1、刷屏涂颜色或者刷图,把运行的刷屏代码给关闭,操作鼠标,那么会出现花屏的现象,或者留下鼠标的印记,如下图1
#2、刷屏涂颜色或者刷图,不关闭刷图代码,操作鼠标,现象一致
#3、使用IMX6ULL的第十九章 FrameBuffer应用编程代码还报其他的问题
#4、我使用网络上找到的其他刷屏代码,可用,可以刷屏,不过问题就是上面的1和2
#5、而且由于使用 mmap接口函数 还特别容易出现段错误
#4号问题
异常位置:mmap接口函数
异常的情况:
[main] success open
[main] screen_size:5529600 width:800 height:1280
[main] screen_base:0xffffffff
mmap error: Invalid argument
代码的位置如下:
printf("[%s] screen_size:%d width:%d height:%d \r\n",__func__,screen_size,width,height);
/* 将显示缓冲区映射到进程地址空间 */
screen_base = (short unsigned int*)mmap(NULL, screen_size, PROT_WRITE, MAP_SHARED, fd, 0);
if (MAP_FAILED == (void *)screen_base) {
perror("mmap error");
close(fd);
exit(EXIT_FAILURE);
}
我还测试了网络上面的其他例子,其他例子是能显示图片的,不过我咨询问题是
#1号问题
1、刷屏之后,然后把运行的刷屏代码给关闭,之后操作鼠标,那么会出现花屏的现象,留下鼠标的印记
2、使用QT,单独开启了3个QT,界面也还是正常的,证明QT对显示屏的操作是好的。
我的猜想:和鼠标没有关系吧,应该和/dev/fb0 或者framebuffer直接有关系
因为
#1、我还不太清除QT是怎么操作显示屏的
#2、RK3568是不建议使用framebuffer吗?那么建议使用哪种操作显示屏的方式呢
求助:如何知道这个原因是什么,并且如何解决这个问题,因为我目前还不打算使用QT作为界面显示的方式,用的其他方式
#花屏的样式大概下面这样,上面的轨道,就是鼠标走过的大致轨道
图1、
##2、我看了一些介绍是这么说的
QT 应用程序能够在 LCD 屏幕上显示的原理是什么?_qt驱动显示屏原理-CSDN博客
从 /dev/fb。framebuffer 作为 LCD 的帧缓存,LCD 控制器根据固定的频率,从 fb 中取走一幅图像数据,经过自身加工,将数据通过 RGB 接口发送给 LCD 屏幕。
如果按照这一句的表述,那么我自己使用framebuffer 应该也是一样的效果才对,不应该出现花屏,因为都是framebuffer操作
实际中
1、很多时候打开,容易映射失败
我猜想可能是不正常关闭,会不会没有释放内存
2、为什么使用鼠标的时候会出现这种情况,是否和默认配置的底图有关系呢?
QT是不是另外开启了一个容器,导致对QT的兼容比较好,正常操作framebuffer 就不太对了,印象中,是做了一些操作的,并不是无任何操作,如果无任何操作,显示屏应该是黑色的或者其他样式的吧,因为目前没有运行APP的时候底图是带花纹的图形。
3、我实际测试:花屏的位置,就是我刷屏过的位置,底图带花纹的位置是不会这样的
是不是和这个图层有关系,两个图层来回切换导致的呢?
因为我记得UI是可以用多种图层操作的,例如带3个图层,由于默认花纹的屏在底图,我直接写 /dev/fb也在底图,导致画屏出现了问题
RK3568我还不太清除,H750是有3个图层的,底图单色,和中间,已经顶层。如果RK3568也有多个图层的话,会不会这里面就有情况了。
4、我明天想试试能不能把这个带花纹的底图也给去掉测试效果?
待验证中......
5、如果kill掉 /usr/bin/weston 进程那么操作mmap会出现下面的情况
The framebuffer device was opened successfully.get fbfd info ...fbmap:8c0852b0初始化内存成功拷贝数据完成frameBuffer: 800 x 1280, 4bytes / 32bpp800x1280, 32bppscreensize:4096000
---》下面是异常的信息
[ 119.476412] Unable to handle kernel paging request at virtual address ffffff800f435000
[ 119.477570] Mem abort info:
[ 119.477826] ESR = 0x96000007
[ 119.478096] Exception class = DABT (current EL), IL = 32 bits
[ 119.478645] SET = 0, FnV = 0
[ 119.478927] EA = 0, S1PTW = 0
[ 119.479207] Data abort info:
[ 119.479464] ISV = 0, ISS = 0x00000007
[ 119.479800] CM = 0, WnR = 0
[ 119.480072] swapper pgtable: 4k pages, 39-bit VAs, pgdp = 000000000a0b2818
[ 119.480672] [ffffff800f435000] pgd=00000000efffe003, pud=00000000efffe003, pmd=00000000dfbbb003, pte=000000000000000
|
|