粤嵌开发板用mmap映射内存导致段错误,如何解决?

将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循环越界了