找回密码
 注册
搜索
查看: 1144|回复: 2

[讨论] Framebuffer内核数据与应用层不符导致LCD花屏

[复制链接]
发表于 2015-12-4 17:35:43 | 显示全部楼层 |阅读模式
应用层不间隔的向mmap过来的内存写图片数据(两张图片循环写),Kernel中读到的数据会与应用层不符,打印出的图片1的图片数据会有部分字段依然是上次传过来的图片2的,导致花屏。怀疑是cache的问题,求助大神指点!!!

应用层接口:

    fbp = (char *)mmap(NULL, finfo.smem_len, PROT_READ | PROT_WRITE, MAP_LOCKED | MAP_SHARED,  fbfd, 0);
    for (i = 0; i < height; i++){
        for (j = 0; j < width * BYTE_FOR_PIXEL; j++)
        {
            position = OLED_WIDTH * (y + i) * BYTE_FOR_PIXEL +x * BYTE_FOR_PIXEL + j;

            *(fbp + position) = image_data[i * width * BYTE_FOR_PIXEL + j];
            /*if ((i * width * BYTE_FOR_PIXEL + j) != 0 && (i * width * BYTE_FOR_PIXEL + j) % 16 == 0)
                printf("\n");
            printf("0X%02x,", *(fbp + position));*/
        }
    }
    msync(fbp, CPU_D_CACHE_SIZE, MS_SYNC);

内核:
    fbmem.c的do_fb_ioctl中自定义了一个IOCTL,应用层调用完上面的接口后发这个IOCTL,内核接到后去调用Framebuffer驱动的fillrect方法,在该方法中打印图片的数据,发现与应用层写入的不一致。
发表于 2015-12-4 22:33:33 | 显示全部楼层
使用乒乓内存。。。一块写,一块显示。
点评回复

使用道具 举报

 楼主| 发表于 2015-12-7 15:24:05 | 显示全部楼层
how 发表于 2015-12-4 22:33
使用乒乓内存。。。一块写,一块显示。

能说详细些吗,应用层还是内核层,具体如何操作?谢谢~!
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-23 11:48 , Processed in 0.067209 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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