当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于嵌入式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格式的图像文件。

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

一个线程只能属于一个进程,而一个进程可以有多个线程,线程是进程的一部分,就像工人是工厂的一部分。资源是分配给进程的,同一进程的所有线程共享该进程的全部资源,就像工厂里的工人共享工厂的设备和场地。处理机(CPU)则是分给线...

关键字: 进程 线程

DXC内部新成立的Boomi卓越中心(COE),将成为跨行业客户的创新枢纽 DXC与Boomi携手助力客户整合AI智能体,为规模化应用代理式AI做好准备 弗吉尼亚州阿什伯恩2025年8月19日 /美通社/ --名列财...

关键字: 进程 AI BSP 自动化

上海2025年7月28日 /美通社/ -- 在世界人工智能大会(WAIC)期间,荣耀正式发布自研多模态感知大模型——MagicGUI大模型。作为荣耀推出的首个GUI开源大模型...

关键字: GUI MAGIC 开源 模型

上海 2025年7月9日 /美通社/ -- 据Gartner最新研究显示,到2025年全球将有75%的企业将生成式AI纳入核心业务流程。这其中,人力资源领域因其天...

关键字: AI BSP 进程 CHINA

天津2025年6月25日 /美通社/ -- 2025年6月24日至26日,世界经济论坛第十六届新领军者年会(夏季达沃斯论坛)在天津举行。本届年会以"新时代企业家精神"为主题,汇聚来自全球1700余位政...

关键字: 人工智能 进程 BSP 微软

新加坡2025年6月4日 /美通社/ -- THE GROWHUB LIMITED(简称"The GrowHub"或"该公司")是一家总部位于新加坡的公司,利用区块链技术,来提升整...

关键字: 人工智能 进程 AI 供应链

南京 2025年5月30日 /美通社/ -- 日前,国际独立第三方检测、检验和认证机构德国莱茵TÜV大中华区(以下简称"TÜV莱茵"...

关键字: 协作机器人 进程 测试 BSP

爱立信的人工智能(AI)专业知识将在一项崭新的、以瑞典为重点的AI基础设施中发挥核心作用。利用该基础设施,由瑞典一批大型企业组成的联盟将借助英伟达的计算能力,助力推动瑞典的数字化进程。 北京 2025年5月28日 /...

关键字: 爱立信 英伟达 AI 进程

线程和进程各有其独特的优缺点。线程执行效率高,而进程则在安全性和资源管理方面表现出色。在多道程序设计环境中,进程的并发执行和资源共享能力得到了充分利用,从而提高了系统的整体效率和资源利用率。

关键字: 线程 进程

深圳2025年4月17日 /美通社/ -- 4月16日,戴盟机器人正式发布革命性家族产品——全球首款多维高分辨率高频率视触觉传感器 DM-Tac W、多维触觉感知五指灵巧手 DM-Hand1、便携穿戴式遥操作数据采集系统...

关键字: 进程 DM 机器人 触觉传感器
关闭