基于uITRON操作系统的嵌入式GUI设计

发布者:温馨的家庭最新更新时间:2006-10-10 来源: 单片机及嵌入式系统应用关键字:图形  窗口  界面  内核 手机看文章 扫描二维码
随时随地手机看文章
随着嵌入式系统技术的不断发展,各类嵌入式应用对人机交互界面的要求也越来越高,这就使得对嵌入式图形用户界面的需求越来越迫切。与一般系统上的图形用户界面相比,嵌入式系统图形用户界面要求轻型、占用资源少、高性能、高可靠性、可配置等特点。

本设计是在东南大学国家专用集成电路系统工程技术研究中心自主研发的,并在遵循uITRON 3.0标准的RTOS-ASIX OS基础上设计出一套适合于手持设备、仪器仪表等应用的图形用户界面——ASIX Window。该图形用户界面采用面向对象的设计思想,基于消息循环和事件驱动机制,构建了比较完整的窗口系统,为用户提供了类Win32 API的用户编程接口。考虑到一般嵌入式应用的屏幕较小,以及嵌入式系统处理器与存储器容量的限制,ASIX Window在设计上放弃了窗口剪切等复杂特性,大大降低了系统的复杂性,减少了对系统资源的占用。由于采用基于控件的设计概念,ASIX Window非常适合裁减,可以根据用户的需求方便地增加或删减控件,增加了系统的可裁减性。该图形用户界面已成功应用于PDA,电子词典,税控收款机等多款产品设计中。

1 与操作系统内核的接口

ASIX Window的整体架构是基于消息分发,消息循环以及消息处理之上的。整个ASIX OS平台的结构如图1所示。图1中,最底层的是系统的消息源,包括中断(键盘、触摸屏等)和定时器,一般将它们统称为中断源。中断发生后,进入中断处理程序,该中断处理程序维护其对应的缓冲区后(如果它需要缓冲区),设置事件发生(通过调用内核的事件标志系统调用)。因为系统任务是阻塞在这个事件标志上的,而且系统任务的优先级最高,系统任务将被内核调度运行,系统任务根据所发生事件的类型,来进行相应的处理。比如说,如果是笔中断事件,中断处理程序将笔的坐标信息存放在相应的缓冲区中,并设置相应的事件标志,系统任务将笔坐标的数据转换为相应活动区域(Active Area)的消息,并由系统任务将这个消息发送到当前需要该中断事件的任务中。LCD显示,键盘和笔中断一定是由前台任务(拥有屏幕的任务)接管的,其他外围设备所对应的中断源则由占用该资源的任务接管。

每个任务都有一个自己的信箱(Mail Box),在每个信箱上都维护着一条消息队列,所有发往该任务的消息都连接在这个队列中。任务代码应该通过消息循环不断地从该队列中取消息并处理,如果消息队列为空,则该任务阻塞,由ASIX OS内核选择下一个就绪的高优先级任务运行。

系统任务是内核的扩展,提供系统基本的服务功能和接口。它接管系统所有的中断资源并将相应的中断事件翻译成为相应的系统消息,并将该消息分发到对应的应用程序任务;系统任务同时维护系统中所有任务的信息,负责确定前台任务(拥有显示屏幕和用户输入焦点的任务,前台任务不一定是CPU正在运行的任务)以及前台任务的切换。系统任务阻塞在底层中断的事件标志上,系统任务拥有最高的优先级。

在系统任务之上是服务任务。服务任务负责提供系统的其他扩展服务。服务任务没有屏幕显示(类似于Linux中的守护进程),服务任务阻塞在自己的消息队列上。服务任务拥有第二高的优先级。


图1 ASIX OS的总体架构

  应用程序任务是用户使用的各个应用。应用任务阻塞在自己的消息队列上,所有的应用程序一般都应该拥有屏幕显示,所有的应用程序在同一优先级上。

2 窗口管理

ASIX Windows是基于消息驱动的图形用户接口。从ASIX Windows的角度来看,应用程序是由一组窗口和控件组成的,程序的功能是通过窗口的操作来实现的。控件是在 ASIX Windows中定制的具有特定功能的独立模块,例如:按钮、菜单、下拉框、软键盘等。在 ASIX Windows中,每一个控件在数据结构上都被描述为一个窗口(也就是说,在数据结构上,窗口和控件是一样的),不同的是,控件是作为某个窗口的子窗口。在数据结构上将窗口与控件统一,使得整个系统的结构更简单,对窗口的操作与对控件的操作可以统一到一起,这使得系统的编程接口可以统一到窗口的操作函数上。在 ASIX Windows中所有的窗口操作,不管是窗口或是控件,都使用这些统一的函数。系统通过下面这个统一的数据结构来对所有的控件进行管理。

typedef struct asix_window
{  struct asix_window *prev;  //指向前一个兄弟窗口
  struct asix_window *next;  //指向后一个兄弟窗口
  struct asix_window *child;  //指向子窗口链表
  /*本窗口的相关ID */
  WNDCLASS  *wndclass;   //指向本窗口的窗口类
  U32   task_id;       //本窗口所属任务的任务号
  U32  wnd_id;       //本窗口ID号
  U32  parent_id;       //本窗口的父窗口ID号
  /*本窗口的位置、状态、风格以及窗口标题等*/
  U32  status;        //本窗口状态
  U16  x;           //本窗口左上角X坐标
  U16  y;            //本窗口左上角Y坐标
  U16  width;          //本窗口的宽度
  U16  hight;         //本窗口的高度
  char  *caption;       //本窗口标题
  U32  style;          //本窗口风格
  /*指向本窗口私有数据结构的指针 */
  void  *ctrl_str;        //指向本窗口的私有数据结构
} ASIX_WINDOW;

实际上,不同的控件拥有不同的功能和结构,所以它们的操作是不同的。为了拥有统一的操作函数接口,为每一个不同的窗口或控件定义了相应的窗口类,窗口类实际上是每种控件的模版,这个模版定义了与该控件相关的内容。当应用程序员调用CreatWindow函数创建某类控件时, CreatWindow查找该类控件的窗口类,并根据窗口类中的定义,调用与该控件相关的创建函数,进行实际的创建工作。然后CreatWindow填写相应的数据结构,描述该控件类的实例,并将其链接到系统窗口链表中去,以便后续的管理。利用窗口类描述不同控件设计的同时,可以将不同控件的开发独立于系统构架的实现,使得控件的开发可以独立进行。使用独立窗口类来描述每个控件的另一个好处是可以非常方便的对ASIX Window进行裁减。下面给出窗口类数据结构的定义。

typedef struct window_class
{ U8wndclass_id;      //窗口类的ID号
// CreateWindow() 调用本函数执行控件的具体创建
STATUS  (*create)(char *caption, U32 style, U16 x, U16 y, U16 width, U16 hight, U32 wndid, U32 menu, void **ctrl_str, void *exdata);
// DestroyWindow() 调用本函数执行控件的具体删除
STATUS  (*destroy)(void *ctrl_str);
// DefWindowProc() 调用本函数进行消息处理
STATUS  (*msg_proc)( U32 win_id, U16 asix_msg, U32 lparam,void *data, U16 wparam, void *reserved);
//GetMessage() 调用本函数进行底层消息的翻译与转换
STATUS  (*msg_trans)(void *ctrl_str, U16 msg_type, U32 areaId,P_U16 data, U32 size, PMSG trans_msg);
//RePaintWindow() 调用本函数重绘本窗口类控件
STATUS  (*repaint)(void *ctrl_str, U32 lparam);
//SetWindowText() 调用本函数设置本窗口类控件的标题
STATUS  (*caption)(void *ctrl_str, char *caption, void *exdata);
} WNDCLASS;


图2 任务链表与窗口链表

图2所示是系统中窗口链表的结构,系统还维护了一张任务链表,每个任务控制块(TCB)中都保留了指向本任务窗口链表的首指针。

3 消息传递与处理

每个窗口(Form)都拥有自己的消息处理函数,该函数接收来自系统(包括窗口和控件)的消息并作相应的处理和动作。每一个窗口处理函数实际上就是一个消息循环,窗口函数通过取消息函数ASIXGetMessage()获得系统任务,并发送给该窗口的消息进行处理。ASIXGetMessage ()获得系统消息并进行相应的处理和消息转换(实际上是将底层操作系统所提供的硬件消息转换成ASIX Window的消息,该函数通过调用相应窗口类所定义的消息翻译函数msg_trans()实现消息的转换),然后窗口函数对消息进行分检并作相应的处理,这部分代码是用户自己定制的,实际上是用户程序处理来自窗口和控件的消息,用来实现该应用程序的功能。窗口函数调用ASIX Windows的控件消息处理函数DefWindowProc(),该函数是一个消息过滤器及转换器,它接管非用户的,属于控件自己的消息(这个消息可能来自用户的操作)。它首先扫描由取消息函数获得的消息,检查其中是否有属于 ASIX Windows控件的消息。如果该消息属于某个控件,则消息处理函数调用系统窗口链表中该控件所对应的窗口类所指明的消息处理函数,处理这个消息执行相应的动作并可能发出相应的消息(例如,当用户点击某按钮时,控件消息处理函数将接管该点击事件,并执行按钮被点击的动画,同时发送一条该按钮被点击的消息)。

4 图形接口

  ASIX Window的图形接口设计引入了硬件抽象层的概念,图形函数(Graphic API)不直接操纵硬件,而是通过调用硬件抽象层提供的一组基本函数来作具体的图形绘制工作。硬件抽象层函数将按照设备相关的格式将要显示的内容首先填写到系统内存的一片缓冲区(VRAM)中, 然后硬件抽象层的函数将根据传入的参数决定是否将数据复制到LCD控制器。如果所调用函数的应用任务当前拥有LCD(前台任务),则将数据送往LCD控制器,否则该函数仅仅将数据写入VRAM缓冲区(该任务是后台任务)。硬件抽象层还提供了一个叫做Refresh的函数,该函数将把当前VRAM中的内容复制到 LCD控制器的数据寄存器中。系统任务在应用任务切换的时候调用Refresh 函数,将切换进来的任务中所属VRAM的数据刷新到LCD中去,实现屏幕的切换,如图3所示。


图3 ASIX Window的图形上下文

为了避免图形函数重入时带来的问题,以及不同应用任务拥有不同屏幕以及相应属性的问题,在新的设计中采用了图形上下文(Graphic Context,简称GC)的结构。每个需要用到屏幕的应用任务都拥有自己的图形上下文,该结构中保存与硬件无关的显示属性,比如当前色、背景色、当前线宽、当前填充模式、光标的位置、闪烁频率、光标大小、显示缓冲区(VRAM)的头指针、物理屏幕在逻辑屏幕中的位置坐标等信息。

实际上,这样的设计一方面可以实现逻辑屏幕的概念,即应用程序可以在比实际物理屏幕大的屏幕上绘制图形;另一方面,不管应用任务在前台(拥有 LCD)还是在后台(不拥有LCD),都可以进行图形函数的调用。如果是前台任务,绘制的图形会立刻显示在LCD上;如果是后台任务,图形被暂时“绘制” 到该任务的VRAM中,等下次该后台任务切换到前台时,系统任务(System Task)将调用Refresh 函数将该任务的VRAM刷新到LCD上。

结语

根据以上内容,设计完成了ASIX Window GUI 的原型系统,并在PDA应用中采用了该GUI。为了方便应用程序员的开发,还在此基础上设计了基于MS VC++的GUI模拟器。图4所示是ASIX Window在PDA系统和模拟器上的应用。ASIX Window编译后的核心非常小巧,长度只有200 KB左右。在可移植性方面,该GUI已成功地移植到了68000、X86、ARM等处理器平台上。


图4 ASIX Window在PDA上的应用以及模拟器截图

关键字:图形  窗口  界面  内核 引用地址:基于uITRON操作系统的嵌入式GUI设计

上一篇:嵌入式操作系统UC/OSII的内核实现
下一篇:基于uITRON操作系统的嵌入式GUI设计

推荐阅读最新更新时间:2024-05-02 20:26

邓中翰院士:AI芯片迎来10年创新创业窗口
新智元原创 演讲:邓中翰 编辑:闻菲 【新智元导读】 中美贸易激战 ,芯片成为焦点。我国近年内集成电路产业的发展取得了突出的成绩,但在经济国际化的趋势中,国内芯片产业的发展还未真正取得胜利。中星微电子集团创建人、中国工程院院士邓中翰,回顾二十年芯片的发展之路,探讨在新时代如何通过创新发展,不断通过弯道超车,甚至在“无人地带”实现换道超车的芯片发展之路。 2018年,AI芯片持续火热。根据2017年底CB Insights的数据,在对AI初创公司的资助上,中国已经超越美国,成为世界第一大国。2017年,在全球人工智能启动资金中,中国占总额的48%(美国为38%),而重点就是人脸识别和芯片。 人脸识别还好理解
[嵌入式]
邓中翰院士:AI芯片迎来10年创新创业<font color='red'>窗口</font>
三星量产64GB SSD硬盘 用于戴尔
  2月20日消息,据澳大利亚媒体报道,三星开始使用Sata II界面大批量生产64GB SSD硬盘,并将在接下来的几个星期用于特定的戴尔和Alienware笔记本电脑。   三星表示其Sata II SSD的读/写速度在100Mbps/80Mbps,比Sata I提高了60%,比其他常规硬盘速度快2至5倍,功率为1.45W,但又比常规硬盘重量轻很多。三星半导体闪存营销总监Jim Elliott认为,“HDD的市场很广阔,但我们发觉新一代SSD的市场需求一直在增长,特别是有了Sata II界面之后。SSD技术特别受到商务用户和高端消费群体的青睐,其杰出的性能、虚拟技术和快捷的运转速度都是产品亮点所在。”   Sata II S
[焦点新闻]
海思半导体获ARM Mali图形处理器授权
2012年5月21日,海思半导体(HiSilicon)和ARM®今日联合宣布,海思半导体已获得一系列ARM Mali™ 图形处理器(GPU)授权,包括市场领先的Mali-400 MP GPU和最新的高性能Mali-T658 GPU。通过这些新的授权,海思半导体能够为移动、消费和家庭设备生产厂商提供更多的图形处理器性能选择。在此之前,海思半导体已经取得了最新的ARM CortexTM处理器技术的授权,用于下一代设备。 这些新的授权将为海思半导体带来杰出的图形处理性能,其支持的范围可从目前使用于领先移动和消费设备中的一流图形处理解决方案,延伸到下一代图像与创新的产品需求。随着移动和消费市场的多元化发展,图形处理解决方案可提供产品关键
[半导体设计/制造]
海思半导体获ARM Mali<font color='red'>图形</font>处理器授权
ARM2210的智能移动机器人人机界面设计
摘要: 移动机器人人机界面为移动机器人的运动控制提供直观的路径图形、运动速度和角度、障碍物信息等。通过ARM2210的串口UART0接收中心处理器PC104的运动信息,利用东芝公司的液晶控制器T6963C驱动STN液晶屏YL240128A,以及ZLG/GUI软件包提供的基本绘图和菜单操作函数设计了基于嵌入式系统ARM2210开发板的移动机器人人机界面,并利用ARM2210的I2C器件ZLG7290提供的I2C接口功能和键盘中断信号实现菜单选择,具有很强的实用性。 引言 嵌入式系统以其高性能、低功耗、低成本的优点,已经在很大程度上改变了人们的生活。如,MP3播放器、智能手机、数码相机产品等已经渗入人们生活的各个方面。随着液晶显
[应用]
高手进阶2.6内核的Linux嵌入式系统应用
随着多媒体技术与通讯技术相结合的信息技术的快速发展和互联网的广泛应用,PC 时代也过渡到了后PC时代。在数字信息技术和网络技术高速发展的后PC时代,嵌入式技术越来越与人们的生活紧密结合。 操作系统为用户使用计算机及其外部设备提供最基本的接口程序,管理计算机上的资源。随着应用领域的扩大,为了适应不同的应用场合,考虑到系统的灵活性、可伸缩性以及可裁剪性,一种以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗要求严格的专用计算机系统——嵌入式操作系统随之延生。 Linux 操作系统是一种性能优良、源码公开且被广泛应用的免费操作系统,由于其体积小、可裁减、运行速度高、良好的网络
[单片机]
linux内核中的likely和unlikely
Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123(http://blog.csdn.net/ce123) GCC version:arm-linux-gcc-3.4.1 看内核时经常遇到if(likely( )){}或是if(unlikely( ))这样的语句,不甚了解,例如(选自kernel/fork.c中copy_process): view plain copy print ? SET_LINKS(p); if (unlikely(p- ptrace & PT_PTRACED)) __ptrace_link(p,
[单片机]
stm8s 独立看门狗和窗口看门狗的代码
void WWDG_INI(void) { WWDG_WR = 0x60; //看门狗窗口值,窗口值必须在0x3F以上,但必须小于计数值,否则无法喂狗 WWDG_CR = 0x7F; //看门狗计数值 WWDG_CR |= 0x80; //使能窗口看门狗 } void Free_WWDG(void) { if ((WWDG_CR & 0x7F) WWDG_WR) //小于窗口值才能喂狗 WWDG_CR = 0x7F; //重新喂狗 } void IWDG_INI(void) { IWDG_KR=0XCC; IWDG_KR=0X55; //使能设置 IWDG_P
[单片机]
最新界面:长寿机型iPhone 6s被抛弃
苹果2022年WWDC(全球开发者大会)定在6月6日举办,不出意外的话,iOS 16将是最令人期待的主角。 根据LeaksApplePro的最新爆料,iOS 16确定移除对iPhone 6s、iPhone 6s Plus以及第一代iPhone SE的支持。这批设备当年都是搭载iOS 9系统上市,结果成为苹果寿命最长的存在,一路升级到了如今的iOS 15系统。 UI设计方面,iOS 16曝光的新特性包括InfoShack,即桌面上可进行信息交互的大号小部件,还有Quick Actions,可在锁屏通过快捷图标进行APP便捷操作。 苹果APP上,提醒、文件以及邮件应用都会有微调,健康应用完全重构等。 另外,音乐功能新增“App
[手机便携]
最新<font color='red'>界面</font>:长寿机型iPhone 6s被抛弃
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved