- 积分
- 9
贡献44
飞刀8 FD
注册时间2023-6-15
在线时间1 小时
扫一扫,手机访问本帖
|
我写了一个FB(LCD)的应用,但是屏幕没有反应,请问是哪里写错了清屏和点操作都不行
int main(int argc,char **argv)
{
int fd;
/* 1、打开/dev/fb0 */
fd = open("/dev/fb0",O_RDWR,0);
if(fd <= 0)
{
printf("open is error!!\n");
return -1;
}
/* 2、获取可变参数,固定参数 */
/* 2.2、FBIOGET_VSCREENINFO获取可变参数:x,y,bpp */
int res = ioctl(fd,FBIOGET_VSCREENINFO,&var);
if(res==-1){
perror("ioctl FBIOGET_VSCREENINFO error\n");
return -1;
}
printf("横坐标=%d\n",var.xres);
printf("纵坐标=%d\n",var.yres);
printf("一个像素点的位数=%dbit\n",var.bits_per_pixel);
printf("横坐标*纵坐标*一个像素点的位数/8=Framebuffer的大小=%d字节\n",var.xres*var.yres*var.bits_per_pixel/8);
/* 2.2、FBIOGET_FSCREENINFO获取固定参数:显存大小 */
ioctl(fd,FBIOGET_FSCREENINFO,&fix);
printf("屏幕显示缓冲区大小=%d字节\n",fix.smem_len); //FD缓冲区长度
printf("虚拟横坐标=%d字节\n",var.xres_virtual);
printf("虚拟纵坐标=%d字节\n",var.yres_virtual);
/* 3、获取显存虚拟起始地址 */
/*
* start:虚拟起始地址 null 自动分配
* length: 映射的大小
* prot :权限 PROT_READ | PROT_WRITE
* flags : MAP_SHARED
* fd:文件描述符
*/
fbmem =(unsigned char *)mmap(NULL,fix.smem_len,PROT_READ|PROT_WRITE,MAP_SHARED,fd, 0);
printf("LCD 映射地址:%p\n",fbmem);
/* 4、清屏函数----把fbmem空间覆盖成0x0 ,清屏成黑色*/
memset(fbmem,0xff,fix.smem_len);
printf("清屏\n");
/* 随便设置出100*100个为红色 */
for (int j = 0; j < 100; j++)
{
for (int i = 0; i < 100; i++)
show_pixel(var.xres/2+i, var.yres/2+j, 0xFF0000);//传入颜色格式为RGB888
}
munmap(fbmem , fix.smem_len);//取消对fb_base的内存地址映射
close(fd);
return 0;
}
|
|