今天爲了測試我的LCD有沒有壞點寫了一個簡單的刷屏程序,效果還不錯,分析給大家。代碼如下:
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc,char *argv[])
{
int fbfd = 0;
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
long int screensize = 0;
char *fbp = 0;
char inbuf[240*320*2];
int i = 0;
/*open /dev/fb0 */
fbfd = open("/dev/fb0",O_RDWR);
if(fbfd<=0)
{
printf("Error:cannot open framebuffer devices./n");
return -1;
}
printf("The framebuffer devices was opened successfully./n");
/*get framebuffer infomation*/
if(ioctl(fbfd,FBIOGET_FSCREENINFO,&finfo))
{
printf("Error: reanding fixed informatin./n");
return -1;
}
if(ioctl(fbfd,FBIOGET_VSCREENINFO,&vinfo))
{
printf("Error: reanding var informatin./n");
return -1;
}
/*set screensiez*/
screensize = vinfo.xres*vinfo.yres*vinfo.bits_per_pixel/8;
/*mmap*/
fbp = (char*)mmap(0,screensize,PROT_READ|PROT_WRITE,MAP_SHARED,fbfd,0);
if((int)fbp == -1)
{
printf("Error: failed to map framebuffer device to memory./n");
return -4;
}
printf(" The framebuffer device was mapped to memory sucessfully./n");
memcpy(inbuf,fbp,screensize);//保存刷屏前顯存中的數據
for(i = 0;i<0xff;i++)
{
memset(fbp,i,screensize);
sleep(1);
}
memcpy(fbp,inbuf,screensize);//將保存的顯存數據復原回去
munmap(fbp,screensize);
printf("The framebuffer device was munmaped successfully./n");
close(fbfd);
printf("The framebuffer device was closed successfully./n");
return 0;
}