MainPage显存管理

在我们的2440单板或者其他板子也好,里面会有一个所谓的LCD控制器,
还有对应的显存也就是framebuffer,我们在写显示的驱动程序的时候会在
内存分配一块显存,LCD控制器会去显存上面取出数据发给LCD,当我们想 
显示图片就把图片的数据放进显存中,我们写应用程序的时候可以打开驱
动程序,得到对应的显存,如果我们应用程序一行一行的往LCD的显存写数
据的话会刷新太慢,我们直接malloc从堆空间申请一片内存,然后再往堆空
间里直接写图片数据然后直接拷贝到LCD显存

在这里插入图片描述
我们做得更好一点,这个应用程序我们去堆空间分配很多块内存,我们的应用程序通过某个函数去获得这些内存的首地址,事先判断某块内存是否为空,如果为空的话我们就往里面写描写数据,每一块显存我们得定义一个结构体来描述它,T_VideoMem,里面会有一个ID值,来标识每块内存存的是哪部分的内容,还有一个内存状态值,用来表示某块内存是否被占用和哪个线程用,我们这个新建一个子线程用来准备下一幅图片,我们把这个状态值定义为枚举类型
VMS_FREE 表示内存块没人使用
VMS_USED_FOR_PREPARE 表示内存块被准备图片线程使用
VMS_USED_FOR_CUR 表示内存块被当主线程使用
在这里插入图片描述
还需要一个图片状态值
PS_BLANK 表示还没有图片
PS_GENRATING, 表示图片正在生成
PS_GENRATED, 表示图片已经生成
在这里插入图片描述
还需要一个结构体来表示内存的参数
iWidth 表示X坐标分辨率
iHeight 表示Y坐标分辨率
iBpp 表示用多少位表示一个像素点
iLineByte 表示X坐标的长度
aucPixel 表示图片显示的其实地址
在这里插入图片描述
总的结构体:
在这里插入图片描述

分配内存结构体的函数
在这里插入图片描述
在这里插入图片描述
上图的函数通过 GetDispResolution函数获得驱动层打开的fb参数,然后给内存块附上同样的参数,我们的第一个内存块的地址直接位显存的起始地址,所以第一个内存不用拷贝,这可以用于内存紧张的嵌入式设备,其它的内存块需要把数据拷贝到显存,把各个内存块串成链表,其中ID用来区分它们,如果iNum不等于0,就把它设为占用状态不使用它,iNum不等于0说明内存不紧张可以分配,如下图链表结构
在这里插入图片描述
从链表中获得内存块函数
在这里插入图片描述
释放内存块函数
在这里插入图片描述

在这里插入图片描述
我们使用GetVideoMem函数获得内存块,第二个参数设置为1表示这个内存块马上是要使用的,设置为0表示给准备线程用的,ID值的作用就是可以方便下次找出已经准备好的内存块,里面的图片数据可以直接调用,如果内存块里面有图片就直接描画就好,否则刷到设备上去
在这里插入图片描述
调用底层的函数获得显示设备然后调用它的显示函数就是FBShowPage
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值