全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Microwindows在ARM平台的移植摘 要:本文介绍了Microwindows在ARM平台的移植、图形编程机制及Microwindows在基于ARM的嵌入式系统上的图形编程方法。关键词:嵌入式系统;Microwindows;ARM引言 由于受系统内存大小的限制,在运行Linux的ARM平台上直接运行桌面的X Windows系统不太现实。Microwindows是一个开放源码的嵌入式GUI软件,目的是把图形视窗环境引入到运行Linux的小型设备和平台上。作为X Windows系统的替代品,Microwindows可以用更少的RAM和文件存储空间(100K600KB)提供相似的功能,允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等。同时,Microwindows的可移植性非常好,现已成功移植到MIPS、ARM等多种平台上。Microwindows在ARM平台的移植 尽管Linux 的arch目录下有对ARM处理器支持的代码,但由于Linux是在X86平台上实现的,很多方面都没有考虑到ARM平台的特殊性。将Microwindows移植到运行ARM-Linux操作系统的ARM硬件平台上,需要如下几个步骤。1) 替换fork( )系统调用。由于ARM-Linux不同于标准Linux,所以以标准Linux内核为支持目标开发的Microwindows源代码也必须作出相应的修改才能适应ARM-Linux系统。最主要的问题是ARM-Linux不提供fork()系统调用,而以vfork()调用取代。所以在ARM- Linux代码中fork()的使用需要进行修改。可利用宏定义简便地将所有的fork()调用用vfork()来替代。修改Microwindows的编译设置文件,并采用ARM交叉编译器arm-elf-gcc。2) 确定传递给显示屏驱动程序的参数。具体地说,就是需要在打开FrameBuffer设备 /dev/fb0时将显示屏的基本参数传递给设备驱动程序。在scr_fb.c中的fb_open(PSD psd)函数中修改如下:psdxrespsdxvirtres320;psdyrespsdyvirtres240;psdlinelen40;psdsize320320;3) 编译Microwindows。在Red Hat 9.0下建立ARM交叉编译环境,修改Makefile文件,将$(CC)编译参数指定为交叉编译环境安装目录下的arm-elf-gcc,重新编译代码,就可以生成能够在ARM平台下运行的程序。ARM系列处理器的指令系统相互兼容,经arm-elf-gcc编译过的代码可在基于ARM核的各种处理器上运行。Microwindows中文化 为了使Microwindows实现对简体汉字的支持,需要对引擎层的devfont.c做相应修改。在 devfont.c文件中定义了Microwindows关于字体操作的核心数据结构和操作函数。由于Microwindows采用面向对象的设计方法,因而只要重新定义一系列对简体中文的数据结构和操作函数,并向系统注册,就可以完成系统的中文化。需要重新定义的数据结构和函数是:static MWFONTPROCS hzk_procsMWTF_ASCII, /*routines expect ASCII */Hzk_getfontinfo,Hzk_gettextsize,NULL,Hzk_destroyfont,Hzk_drawtext,Null,Null,;Microwindows图形编程机制 Microwindows从原理上采用分层设计的方法,每层次完成特定的功能,并且能够在不影响其它层次的基础上针对不同的应用进行改编或者重写。在最底层,显示屏、鼠标、触摸屏等的驱动程序提供了与交互相关的硬件设备的访问;中间层是一个精简的图形引擎,提供了划线、区域填充、多边形等多种基本的图形功能;最上层为图形应用程序提供了丰富的编程接口函数(API),通过这些接口函数可以定制桌面和窗口的外观。目前Microwindows提供两套API接口,以便能够更好地适应不同平台应用程序的移植,即 与Win32/Win CE基本兼容的API以及采用X体系的Nano-X API。设备驱动层 设备驱动程序的接口定义在device.h文件中。中间层提供的与设备无关的图形引擎例程就是通过调用设备驱动程序跟硬件设备交互。这就保证了当平台硬件设备发生变化的时候,只需要改写相应的驱动程序,而无需修改上层代码。Microwindows提供基于Linux2.4.X内核的FrameBuffer设备驱动程序。FrameBuffer在Linux系统中通过 /dev/fb0设备文件进行工作,通过mmap()系统调用将显示缓存映射至系统内存中。设备无关的图形引擎层 Microwindows 系统中最核心的图形函数是在图形引擎层通过调用下层的硬件设备驱动程序实现的。用户应用程序通常不直接调用引擎层的例程,而是调用最上层所提供的编程接口。将核心的图形引擎例程独立于应用程序接口主要是基于以下考虑:核心的例程在Client/Server环境中总是驻留在Server端,这些例程调用的位图与文字格式经过优化处理,使得执行速度更快,所以这些格式通常与应用程序所使用的不同。另外,核心例程常使用指针以产生更复杂高效但逻辑性较差的代码,而不是采用应用程序通常使用的ID号。在Microwindows的源代码中,核心的例程通常包含在Devdraw.c、Devclip.c、 Devmouse.c、Devkbd.c和DevpalX.c文件中:设备上下文 应用程序必须在调用图形绘制API函数前设置设备上下文。一些信息如目前采用的坐标系统、当前窗口在程序执行过程中相当长的时间内是不变的,所以没有必要传递给每一个调用的函数,因而可以通过设备上下文的设置,将这些相对持久的信息通知系统。同时,如当前前景色、当前背景色等很多属性也应在设备上下文中设置。可以通过调用GetDC来得到目前的设备上下文,当结束一系列绘制以后,调用ReleaseDC函数释放DC对象。消息传递机制 在Microwindows API之间最基本的通讯机制是消息传递。一个消息包含有一个约定的消息号、两个参数:wParam和lParam。消息被存储在应用程序的消息队列中,可以通过调用函数GetMessage()获取。当等待消息时,应用程序被阻塞。一些消息和硬件事件相关,如WM_CHAR代表键盘输入、 WM_LBUTTONDOWN代表鼠标左键按下。同时,窗口的创建与消除事件分别对应WM_CREAT和WM_DESTROY消息。在通常情况下,每个消息都对应于一个用HWND标识的窗口。在获取消息后,应用程序通过调用DispatchMessage()将消息分派到所对应的窗口进行处理。当窗口建立时,该窗口所对应的各种消息的处理函数同时被定义,所以系统知道向哪一窗口传递消息。消息传递机制允许核心的API通过对应各种事件的消息传递来实现各种功能,如窗口的创建,绘制,移动等等。通常情况下,相关的窗口操作消息都由 DefWindowsProc函数来进行默认的处理,这样就使得所有窗口的动作在行为上具有一致性,当某一窗口需要特殊的操作时,用户可以通过改写处理程序来满足要求。可直接处理消息的函数包括SendMessage、PostMessage、PostQuitMessage、GetMessage和 DispatchMessage。窗口的创建和消除 一个Microwindows应用程序的入口点是WinMain函数,而不是通常情况下的Main()。在Microwindows API中,最基本的显示单元是窗口,窗口定义了一个显示区域和与其相关的各种消息的处理函数。可以通过预定的类型,如按键(button)、文本框 (editboxs)等来定制窗口,同时也可以由用户定义特殊的类型。无论通过什么方式定义类型,创建窗口和消息通讯的方法是相同的。与创建和消除窗口相关的函数有RegisterClass、UnRegisterClass、CerateWindowEx、DestroyWindow、 GetWindowLong和SetWindowLong。窗口的显示和移动 ShowWindow函数允许设备窗口属性为可视或者隐藏。该属性也可以在窗口创建的过程中由CreateWindowEx实现。窗口的移动包括窗口位置或者大小的变化。当窗口位置改变时,系统发送WM_MOVE消息;当窗口大小改变时,系统发送WM_SIZE消息。窗口绘制 在其它窗口发生移动,导致某一窗口需要被绘制或重新绘制时,Microwindows系统会发送WM_PAINT消息给相关的窗口过程。这时,由应用程序决定调用图形操作函数来绘制窗口。Micro windows为每个窗口维护一个update域,当update非空时就向窗口发送WM_PAINT消息。为了速度方面考虑,WM_PAINT消息只在应用程序队列里没有其它消息的情况下才会发送,这保证了应用程序对窗口的重绘可以一步完成,而不会被分割成好多步骤。如果不希望等待,可以调用 UpdateWindow函数强制进行窗口重绘。窗口区域和绝对坐标 每一个窗口在显示屏上绘制时,都应参照显示屏像素点的绝对坐标进行。 Microwindows API允许应用程序编程人员在窗口中不包括标题栏的区域内使用以窗口左上角为基准的相对坐标,这部分区域称为客户区域。GetClientRect函数和 GetWindowRect函数将返回客户区域和窗口的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年辽宁公安司法管理干部学院辅导员招聘备考题库附答案
- 2026年曹妃甸职业技术学院单招职业适应性测试题库附答案
- 2026年新疆天山职业技术大学单招职业倾向性考试模拟测试卷附答案
- 2026年闽北职业技术学院单招职业倾向性考试题库附答案
- 2026年云南旅游职业学院单招职业技能考试题库附答案
- 2026年辽宁建筑职业学院单招(计算机)测试备考题库必考题
- 2026年山西铁道职业技术学院单招(计算机)考试参考题库必考题
- 2026年黑龙江公安警官职业学院辅导员招聘备考题库附答案
- 2026年吉林工程职业学院单招职业适应性考试题库附答案
- 2026年大连职业技术学院单招职业适应性考试模拟测试卷附答案
- 国家开放大学2025年秋《思想道德与法治》终考大作业试卷1参考答案
- GB 14930.2-2025食品安全国家标准消毒剂
- 节日主题班会课件 国家公祭日新
- 棉花栽培学课件 第三节 棉花栽培的生物学基础2
- 渝建竣表格新表2优质资料
- GB 20286-2006公共场所阻燃制品及组件燃烧性能要求和标识
- DB11 2075-2022 建筑工程减隔震技术规程
- 麦克斯韦方程组市公开课获奖课件
- 金坛区苏科版五年级上册劳动《11创意时钟(一)》课件
- 沥青路面施工旁站监理记录表多篇
- 白内障的术前检查及术后预测
评论
0/150
提交评论