将bmp图片的内容映射到屏幕映射的内存
#include"stdio.h"
#include"stdlib.h"
#include"unistd.h"
#include"sys/types.h"
#include"sys/stat.h"
#include"fcntl.h"
#include"sys/mman.h"
int bmp_fd,lcd_fd;
unsigned int *lcd_addr;
unsigned char *bmp_addr;
int i,j=0;
int n,m;
void show_bmp(char *picname,int x,int y,int w,int h)
{
bmp_addr= mmap(NULL,w*h*3+54,PROT_READ | PROT_WRITE,MAP_PRIVATE,bmp_fd,0);
lcd_addr= mmap(NULL,w*h*4,PROT_READ | PROT_WRITE,MAP_PRIVATE,lcd_fd,0);
for(i=0;i<w*h*3;i+=3)
{
*(lcd_addr+j) = *(bmp_addr + 54 + i) << 0 | *(bmp_addr + 55 + i) << 8 | *(bmp_addr + 56 + i) << 16;
j++;
}
}
void main(void)
{
bmp_fd=open("./zuming.bmp",O_RDONLY);
if(bmp_fd<0)
{
printf("open bmp error\n");
exit(1);
}
lcd_fd=open("/dev/fb0",O_RDWR);
if(lcd_fd<0)
{
printf("open lcd error\n");
exit(1);
}
show_bmp("./zuming.bmp",800,480,800,480);
close(bmp_fd);
close(lcd_fd);
}
可能是你bmp_fd 和 lcd_fd变量没有初始化,访问内存出错,要不就是for循环越界了