zxbbbb 发表于 2023-6-15 15:48:22

IMX8 LCD显示

我写了一个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;


}


页: [1]
查看完整版本: IMX8 LCD显示