- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式图-实验报告
图形用户接口
实验目的
了解嵌入式系统图形界面的基本编程方法
学习图形库的制作
实验原理
Frame Buffer
显示屏的整个显示区域,在系统内会有一段存储空间与之对应。通过改变该存储空间的内容达到改变显示信息的目的。该存储空间被称为Frame Buffer,或显存。显示屏上的每一点都与Frame Buffer里的某一位置对应。所以,解决显示屏的显示问题,首先要解决的是Frame Buffer的大小以及屏上的每一像素与Frame Buffer的映射关系。
影响空间大小的因素:由于Frame Buffer空间的计算大小是以屏幕的大小和显示模式决定的,所以显示模式(单色或彩色)、显示屏的性能、显示的需要均会影响Frame Buffer空间的大小。另外显示屏还有单屏幕、双屏幕两种工作模式:单屏幕模式代表屏幕的显示范围是整个屏幕,只需一个Frame Buffer和一个通道;双屏幕模式则将整个屏幕划分为两个部分,这两个部分各自有Frame Buffer,且他们的地址无需连续,并同时具有两个各自独立的通道将Frame Buffer的数据传送到显示屏。
显示操作及映射连续性:由于Frame Buffer通常就是从内存空间分配所得,并且他是有连续的字节空间组成,屏幕的显示操作通常是从左到右逐点像素扫描,从上到下逐行扫描,直到扫描到右下角,然后再折返到左上角。又由于Frame Buffer里的数据是按地址递增的顺序被提取,所以屏幕上相邻的两像素被映射到Frame Buffer里是连续的,并且屏幕最左上角的像素对应Frame Buffer的第一空间单元,屏幕最右下角则对应最后一个单元空间。
Frame Buffer 与色彩
计算机反映自然界的颜色是通过RGB(Red-Green-Blue)值来表示的。如果要在屏幕某点显示某种颜色,则必须给出相应的RBG值。Frame Buffer是由所有像素的RGB值或RGB值的部分位所组成,本系统使用的16位/像素的模式下,Frame Buffer里的每个单元16位,每个单元代表一个像素的RGB值,如下图
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 R R R R R G G G G G G B B B B B
有了以上的分析,就可以用下面的计算公式
FrameBufferSize=Width * Height * Bitperpixel/8
计算Frame Buffer的大小(以字节为单位)。
(三)LCD控制器
在Frame Buffer与显示屏之间还需要一个中间件,该中间件负责从Frame Buffer里提取数据,进行处理,并传输到显示屏上。
PXA270处理器内部集成LCDC,他提供了一个从PXA270处理器到显示屏的接口,LCDC的作用是将Frame Buffer里的数据传输到LCDC的内部,然后经过处理,输出数据到LCD的输入引脚上。
本实验系统使用的是16位TFT LCD,像素分辨率是640X480。
Frame Buffer 操作
Frame Buffer是一种驱动程序接口,这种接口将显示设备抽象为帧缓冲区。帧缓冲区为图像硬件设备提供了一种抽象化处理,它代表了一些视频硬件设备,允许应用软件通过定义明确的界面来访问图像硬件设备。于是,将帧缓冲区映射到进程地址空间之后,就可以直接进行读写和I/O控制等操作,而写操作可以立即显示在屏幕上。了解这个设备的参数可以通过FBIOGET_FSCREENINFO、FBIOGET_VSCREENINFO命令,从中可以获取显示器的色味、分辨率等信息(vinfo.bits_per_pixel、vinfo.xres、vinfo.yres)。
实验内容
实现基本画图功能
在Frame Buffer 基础上编写画点、画线的API函数,供应用程序调用,实现任意曲线的画线功能。
(二)合理的软件结构
将调用设备驱动的基本API函数独立地构成一个函数库,为用户程序屏蔽底层硬件信息,直接提供一些简单的画图调用。函数库可以是独立编译后的“.o”文件或由归档管理器 ar 生成的库文件,或是将“.o”文件链接而承认那个的共享库“.so”。
四、实验过程及相关程序
(一)设备的初始化(LCD_INIT)
Frame Buffer设备是/dev/fb(它通常是/dev/fb0),对于该设备的初始化包括设备的打开,通过ioctl函数获得设备的相关信息,计算Frame Buffer缓冲区的大小以及使用mmap函数获取Frame Buffer缓冲区的首地址。具体程序如下:
fd = open(/dev/fb0, O_RDWR);//打开设备
ioctl(fd, FBIOGET_
文档评论(0)