当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]嵌入式linux系统GUI设计方案

嵌入式linux操作系统的快速发展,迫切需求一种简洁的人机交互界面,为此,本文介绍了如何在FrameBuffer基础上设计自己的嵌入式GUI的简单方法。

1 显示原理

1.1 颜色表示

颜色是所有绘图操作的基础。16位的LCD屏一般需要2个字节来表示。16位RGB格式一般可分为RGB565与RGB5551两种格式。其中RGB565格式如表1所列,而其RGB5551格式如表2所列。表中的R为红色分量,G为绿色分量,B为蓝色分量。



由于颜色采用的是RGB565规则。因此。基本颜色,即红色、绿色、蓝色按照RGB565规则可分别为0xf800、0x07e0、Ox001f。由此可见,如果用十六进制直接表示颜色会非常不便。目前,普遍为软件工程师所接受的颜色表示方式为24位的RGB,其中R、G、B三个分量各占用一个字节,范围是0~255。因此,应该为MIS软件系统提供一个从24位RGB转化为16RGB的接口。该接口用宏来实现的具体方式如下:

#define RGB(r,g,b)  (((r>>3)<<11)∣((g>>2)<<5)∣(b>>3))

1.2 画点操作

图形设备接口的最基本操作为画点,任何其它绘图函数都是基于画点来完成的。其原理是以屏的左上角第一个像素点为(0,0)点,向右为x轴,向下为y轴建立坐标系,只要提供某点的横坐标x,纵坐标y和颜色值,就可以通过一定的算法找到(x,y)所表示的地址,然后将该地址上的2个字节替换为指定的颜色值。例如有一块640×480×16的LCD,像素的首地址为0x40000000,那么,其中的第2行、第3列的像素位置如图1所示。



如果要把第2行、第3列的像素由原来的白色(0xfff)变为黑色(0x0000)。那么,就可以根据下面的寻址方式找到地址:

最终地址=首地址+y×2×屏的宽度+x×2

其中,首地址表示第1行第1列像素所对应的地址。由上式,该点的地址=0x40000000+2×2×0x280+3×2=0x40000A06。那么0x40000A06地址对应的数据应为十六位颜色的低字节部分,而0x40000A07地址对应的数据应为十六位颜色的高字节部分。

例如,画点函数可用下面的代码来实现:



其中m_pScreen_Addr是屏的首地址,m_nSereen_Width和m_nScreen_Height则分别为屏宽和屏高。这样,就可以在画点的基础上根据Bresenham算法延伸出各种各样的基本绘图操作来,比如画直线、画矩形和画圆等。

2 FrameBuffer接口

FrameBuffer是出现在2.2.xx内核当中的一种驱动程序接口。Linux抽象出FrameBuffer这个设备可供用户态进程实现直接写屏。FrameBuffer机制模仿显卡的功能是将显卡硬件结构抽象掉,然后通过FrameBuffer的读写直接对显存进行操作。用户可以将FrameBuffer看成是显示内存的一个映像。在将其映射到进程地址空间之后,就可以直接进行读写操作,而且写操作还可以立即反映在屏幕上。这种操作是抽象的、统一的。用户不必关心物理显存的位置和换页机制等具体细节,而这些都可由FrameBuffer设备驱动来完成。

Linux采用虚拟内存技术,系统中的所有进程之间以虚拟方式共享内存。对每个进程来说,它们好像都可以访问整个系统的所有物理内存。更重要的是,即使单独一个进程,它拥有的地址空间也可以远远大于系统物理内存。在地址空间中,进程有权访问虚拟内存地址区间(比如08048000~0804c000)。这些可被访问的合法地址区间叫做内存区域(memory area)。通过内核,进程可以给自己的地址空间动态地添加或减少内存区域,而进程只能访问有效范围内的内存地址。每个内存区域也具有相应进程必须遵循的特定访问属性,如只读、只写、可执行等属性。如果一个进程访问了不在有效范围中的地址,或以不正确的方式访问了有效地址,那么,内核将会终止该进程,并返回“段错误”信息。

在应用程序中,一般将FrameBuffer设备映射到进程地址空间,比如下面的程序就可打开/dev/ib0设备,并通过mmap系统调用来进行地址映射,随后用memset将屏幕清空。Struct fb_var_screen-info记录了帧缓冲设备和指定显示模式的可修改信息,包括显示屏幕的分辨率、每个像素的比特数和一些时序变量。实现以上过程的函数代码如下:

[!--empirenews.page--]

此外,FrameBuffer设备还提供了若干ioctl命令,通过这些命令可以获得显示设备的一些固定信息(比如显示内存大小)以及与显示模式相关的可变信息(比如分辨率、象素结构、扫描线的字节宽度),同时可获得伪彩色模式下的调色板信息等。

3 GUI系统的自主开发

嵌入式GUI的总体设计思想是把所有操作都由对象和消息驱动,通过对现有GUI的分析来对多种嵌入式应用系统根据GUI的要求进行总结,然后抽象出各种组件类。嵌入式GUI的所有组件和数据都被设计成对象,组件对象通过消息来通信。嵌入式GUI在消息驱动下可形成整体并构成系统。其整体框架和体系结构如图2所示。



系统中的所有消息节点将构成空闲队列和消息队列,其中消息队列存放当前EGUI系统中没有处理的消息。消息队列由消息管理器进行操作和管理。图2中的输入设备抽象层、操作系统抽象层和组件对象集合都是消息发生器,它们都会产生EGUI消息。调用消息管理器的操作可将生成的消息放入到消息队列中。消息管理器用于管理消息队列和空闲队列,当有消息产生时,消息管理器将执行消息入队PUSH ()操作,其处理过程是先从空闲队列中摘下一个节点,形成一个消息节点,再将它挂到消息队列的队尾。桌面对象管理器负责分发消息,它可通过调用消息管理器的出队操作POP()来取得待处理的消息,处理过程是将消息队列的第一个消息节点摘下,并取得该消息节点的信息,然后将该消息节点挂到空闲队列的队尾。桌面对象管理器取得消息后,将按照一定的策略对取得的消息进行分发,并让接收该消息的组件对象中的消息处理函数来处理该消息。分发消息时,如果消息指定了接收对象,则将消息路由到接收对象;而非键盘的系统消息。将被路由到桌面对象管理器的第一个子对象;对于用户定义的消息,系统会将其路由到指定的对象。而组件对象处理消息时,如果处理操作要改变屏幕数据,组件对象将调用绘图操作Draw重绘自己的外观。整个系统就是这样不断地产生消息、分发消息、处理消息,从而形成一个无限循环,同时驱动EGUI运行。

4 结束语

针对当前嵌入式GUI的特点,本文给出了可支持汉字显示、键盘输入的多线程嵌入式GUI系统的设计方法。该方法设计的系统采用窗口模式,而且便于操作,同时具有可视化界面、操作灵活、资源占用少等优点,并可支持JPG格式的图像文件。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

苏州2022年10月19日 /美通社/ -- 2022年10月18日,全球光学及光电技术领军者蔡司在苏州工业园区奠基启动"凤栖"工程建设,这是蔡司在国内首次购地自建项目,标志着蔡司在中国本土化进程的进...

关键字: 光学 显微镜 进程 中国制造

蔡司在苏州工业园区奠基启动"凤栖"工程建设,这是蔡司在国内首次购地自建项目,标志着蔡司在中国本土化进程的进一步深化与扩展。 "凤栖"工程建成后,蔡司苏州将成为蔡司在中国更高规格的研发与制造的重要据点,为其工业质量、研究显...

关键字: 显微镜 进程

广东佛山2022年10月19日 /美通社/ -- 空间是人居生活的基础单元,承载着生存与活动的最基本功能。而对于理想空间的解构意义却在物理性容器之外,体现出人们对于空间和生活深层关系的思考,同时也塑造着人与空间的新型连接...

关键字: 温度 BSP 智能化 进程

助力再生农业转型、温室气体减排并改善农民生计  北京2022年10月13日 /美通社/ -- 雀巢咖啡作为雀巢集团最大且广受全球消费者喜爱的咖啡品牌,近期推出了使咖啡种植更加可持续的延展计划:雀巢咖啡2030...

关键字: 可持续发展 BSP 路线图 进程

(全球TMT2022年10月12日讯)Exyte已完成对美国废气净化技术专家Airgard Inc.的收购。Airgard成立于1988年,总部位于加利福尼亚州的Milpitas,是 "湿式" 洗涤器开发和制造领域的领...

关键字: TE AIR 进程 半导体行业

大连2022年9月30日 /美通社/ -- 近日,国际独立第三方检测、检验和认证机构德国莱茵TUV(简称"TUV莱茵")大连分公司总经理张孝宽受邀出席了由...

关键字: 能源管理 ISO 控制 进程

佛山2022年9月23日 /美通社/ -- 近日,由恒洁卫浴集团有限公司(以下简称:恒洁)发起的"这空间很中国"公共空间改造计划正式拉开序幕,联合权威党媒及新华书店,以重庆、北京等城市为起点,陆续在全...

关键字: 中国制造 进程 防护 色环

(全球TMT2022年9月22日讯)建筑项目管理软件领域企业InEight Inc.宣布了最新的软件创新,包括范围、设计和资源管理方面的新流程标准化,以及新的进展跟踪功能和创建基准验证型进程预估和时间表的能力。该更新还...

关键字: 软件 进程 应用程序 模板

InEight专注于软件创新的标准化和基准更新,从而提高了效率,增加了项目信心 InEight建筑项目管理平台的最新发展引入了新的设计管理和基准实践,提高了各个项目之间的一...

关键字: 软件 应用程序 进程 移动应用

"衬"出新我,再续传奇 沈阳2022年9月8日 /美通社/ -- 9月6日,GANT沈阳K11全新门店正式启幕。此次GANT以新店开幕为契机,回顾品牌标志性衬衫单品的诞生与历史,并演绎经历沉淀后的迭...

关键字: GAN 行业标准 进程 微信

嵌入式软件

15715 篇文章

关注

发布文章

编辑精选

技术子站

关闭