日期:2014-05-16  浏览次数:20558 次

这个代码编译通过,运行出错?请帮忙---framebuffer!
#include   <stdio.h>
#include   <stdlib.h>
#include   <fcntl.h>
#include   <unistd.h>
#include   <string.h>
#include   <sys/ioctl.h>
#include   <sys/mman.h>
#include   <asm/page.h>

#include   "fbtools.h "

#define   TRUE   1
#define   FALSE   0
#define   MAX(x,y)   ((x)> (y)?(x):(y))
#define   MIN(x,y)   ((x) <(y)?(x):(y))

//open   &   init   a   frame   buffer
int   fb_open(PFBDEV   pFbdev)
{
pFbdev-> fb   =   open(pFbdev-> dev,   O_RDWR);
if(pFbdev-> fb   <   0)
{
printf( "Error   opening   %s:   %m.   Check   kernel   config\n ",   pFbdev-> dev);
return   FALSE;
}
if   (-1   ==   ioctl(pFbdev-> fb,FBIOGET_VSCREENINFO,&(pFbdev-> fb_var)))
{
printf( "ioctl   FBIOGET_VSCREENINFO\n ");////----出错!!
return   FALSE;
}
if   (-1   ==   ioctl(pFbdev-> fb,FBIOGET_FSCREENINFO,&(pFbdev-> fb_fix)))
{
printf( "ioctl   FBIOGET_FSCREENINFO\n ");
return   FALSE;
}

//map   physics   address   to   virtual   address
pFbdev-> fb_mem_offset   =   (unsigned   long)(pFbdev-> fb_fix.smem_start)   &   (~PAGE_MASK);
pFbdev-> fb_mem   =   (unsigned   long   int)mmap(NULL,   pFbdev-> fb_fix.smem_len   +   pFbdev-> fb_mem_offset,PROT_READ   |   PROT_WRITE,   MAP_SHARED,   pFbdev-> fb,   0);
if   (-1L   ==   (long)   pFbdev-> fb_mem)  
{
printf( "mmap   error!   mem:%d   offset:%d\n ",   pFbdev-> fb_mem,   pFbdev-> fb_mem_offset);
return   FALSE;
}

return   TRUE;
}

//close   frame   buffer
int   fb_close(PFBDEV   pFbdev)
{
close(pFbdev-> fb);
pFbdev-> fb=-1;
}

//get   display   depth
int   get_display_depth(PFBDEV   pFbdev);
{
if(pFbdev-> fb <=0)
{
printf( "fb   device   not   open,   open   it   first\n ");
return   FALSE;
}
return   pFbdev-> fb_var.bits_per_pixel;
}

//full   screen   clear
void   fb_memset   (void   *addr,   int   c,   size_t   len)
{
memset(addr,   c,   len);
}

//use   by   test
#define   DEBUG


main()
{
FBDEV   fbdev;
memset(&fbdev,   0,   sizeof(FBDEV));
strcpy(fbdev.dev,   "/dev/fb0 ");
if(fb_open(&fbdev)==FALSE)
{
printf( "open   frame   buffer   error\n ");
return;
}

//fb_memset(fbdev.fb_mem   +   fbdev.fb_mem_offset,   0,   fbdev.fb_fix.smem_len);
fb_memset((void   *)(fbdev.fb_mem+fbdev.fb_mem_offset),   0,   fbdev.fb_fix.smem_len);
/*
unsigned   long   temp;

temp=   fbdev.fb_mem+fbdev.fb_mem_offset;

fb_memset((void   *)temp,   0,   fbdev.fb_fix.smem_len);
*/
fb_close(&fbdev);
}
<