物联网工程生产实习——粤嵌篇 第三天(色素点与映射)

LCD 屏幕的显示
    LCD是什么? 文件
        打开
        读写
        关闭
    LCD文件名:/dev/fb0
    linux把LCD这种硬件设备一般抽象成
    FrameBuffer
    帧缓冲:能够显示一帧一帧的图像
    
    打开屏幕设备:
        open("/dev/fb0",O_RDWR);
        
        显示色彩,就是把色彩数据写入到
        屏幕中去。
        
    LCD图像的显示:一个一个像素点的显示
    像素点:描述一个点的颜色
    把LCD上面每一个像素点描绘成不同的颜色就是一幅图画
    
    分辨率:屏幕上面有多少个点
    电脑:1024*768
        一行有1024个像素点,有768行
        拍照像素:一张照片,记录了多少个像素点
    开发板:800*480
        一行有800个点,有480行
        
    颜色的组成: R G B 三基色
    每一个基色用一个字节(8bits)表示,给一个基色中的bit位赋值为不同的值,就可以表示不同的颜色
    
    请问一个基色能够表示多少种颜色?
        256 0~255
    请问三个基色能够表示多少种颜色?
        2^24 ===>1670万
        
    计算机中
    LCD 上面一个像素点: A R G B
        A:透明度(8bit)
    LCD上面一个像素点占用多大的空间?
        4byte
    四个字节的数据就可以表示LCD上面的一个颜色
    如果使用一种数据类型表示一个颜色的话,应该使用什么数据类型?
        int
        int color;
        //color是一个int类型的变量
        //如果给color赋值为不同的值,可以表示不同的颜色。
        
    红色:0x00ff0000    
    绿色:0x0000ff00
    蓝色:0x000000ff
    黑色:0x00000000
    白色:0x00ffffff
    
    需求:
    把屏幕显示为全红色
    所有的像素点都赋值为 0x00ff0000
    我们有800*480个像素点:
    使用数组表示:
    int color[480][800];
    
    数组中的每一个元素就代表屏幕上面的一个点。
    把这个数组中的数据写到屏幕上面去。
    
    注意:
        有一个名字叫做iot的程序一直占用屏幕,想办法弄死它:
            killall iot
    
    练习:
        1.在屏幕上面显示一个三色条纹。
        三秒后,在屏幕上面显示一个彩虹
        sleep(3);
        三秒后,在屏幕上面显示一个四叶草
        注意:注意光标位置。
        
IO效率问题
    每一次操作屏幕,使用write函数,先从用户空间--》内核空间--》硬件    
    于是,有人提出了一种方法,在内存中开辟一段空间,用来保存屏幕上面每一个像素点的信息,把屏幕上面的像素点映射到内存中,你要操作屏幕就只需要操作内存就可以了。
    ====》内存映射
    mmap
    映射成功后,屏幕上面的点在显存中的排列顺序为
        从上至下
        从左至右
    
NAME
       mmap, munmap - map or unmap files or devices into memory
        映射或者解映射文件设备到内存
SYNOPSIS
       #include
        映射
       void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
        addr:你要把文件映射到哪一个内存地址,一般人不知道,写NULL表示操作系统自行选择
        length:你要映射的长度
        prot:权限,你对映射后的内存的权限
        PROT_WRITE | PROT_READ
        flags:映射标志 MAP_SHARED
        fd:你要映射的文件
        offset:偏移量,你要从文件的哪一个位置开始映射 0
        
        返回值:
            成功返回映射后的内存的首地址
            失败返回 MAP_FAILED 
            
        解映射
       int munmap(void *addr, size_t length);
        addr:你要解映射的地址
        length:你要解映射的长度
    
    
    模块化的编程思想
        把所有的常用的功能写成函数
        函数:就是一个能被调用的功能
        
        返回值类型 函数名(参数列表)
        {
            //函数的功能实现
        }
            
    作业:
        把上午的练习改写成使用内存映射的方法,把画四叶草和彩虹的功能写成函数的形式。
        写一个简单的函数,在指定的位置能够显示一个指定颜色,指定大小的矩形。
        
        
        
    
    
    
    
    
    
    
    
    
    
    
        
        
    
    


 

你可能感兴趣的:(物联网工程生产实习——粤嵌篇 第三天(色素点与映射))