|
应用层不间隔的向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方法,在该方法中打印图片的数据,发现与应用层写入的不一致。 |
|