一、提高LCD显示效率
内存映射
可以发现通过系统IO直接操作LCD的时候LCD屏的部分像素点会显示“黑线”,过段时间或者重新再次运行程序之后“黑线”会慢慢消失。其实这种现象并不是由于硬件原因导致的,而是系统调用的过程中数据传输效率较低导致的。
int buf[800*480] -->用户缓冲区-->循环放入颜色分量-->调用write()写入LCD --> 把用户缓冲区的数据拷贝到内核缓冲区--->内核把缓冲区中的颜色分量依次写入LCD的驱动程序-->LCD看到显示效果。
由于write函数是系统调用,所以数据需要先从用户态进入到内核态,将用户态中的缓冲区数据拷贝到操作系统的内核缓冲区当中,此时已经完成了第一次数据拷贝,然后再将内核缓冲区中的数据再次拷贝到磁盘当中,此时完成了第二次拷贝。在这个过程当中我们进行了两次拷贝,数据传输的效率是比较低的。
为了提高数据的传输效率,那就需要减少拷贝次数,可以通过Linux系统的一个叫做mmap()的函数接口实现。mmap的全称是memory map,翻译为中文也就是内存映射,其实是一种内存映射文件的方法。
通过内存映射,用户可以将一个文件或者其它对象映射到进程的地址空间,从而实现磁盘的一段物理地址和进程的一段虚拟地址建立对应关系。
通过mmap()这个系统调用函数,用户可以让多个进程之间通过映射到同一个普通文件实现共享内存,普通文件被映射到进程地址空间之后,进程可以向访问普通内存一样对文件进行一系列操作,就不需要调用read/write函数,比如为LCD屏进行内存映射,用户把颜色数据写入到内存中,则LCD屏的像素点也会进行刷新。