ARM平台的Microwindows图形编程

嵌入式图形库开发绚丽界面(lvgl、emwin、awtk) 早些年的单片机开发中,很多都是使用文字菜单界面,这种界面让人感觉非常的朴实无华,内容言简意赅,如果使用图形库进行开发,你的产品一下子就让别人觉得有点高级,更容易去接收它。对于现在来说,很多的嵌入式图形库都可以做出绚丽的界面,占用RAM小,网上资料也多,学习难度不大。下面仅介绍几款常用的图形库。 阅读详情

发布时间:2005年12月21日
来源: 电子设计应用   作者:武汉科技大学计算机学院 闵华松 李爱平

摘    要:本文介绍了Microwindows在ARM平台的移植、图形编程机制及Microwindows在基于ARM的嵌入式系统上的图形编程方法。
关键词:嵌入式系统;Microwindows;ARM

引言
由于受系统内存大小的限制,在运行Linux的ARM平台上直接运行桌面的X Windows系统不太现实。Microwindows是一个开放源码的嵌入式GUI软件,目的是把图形视窗环境引入到运行Linux的小型设备和平台上。作为X Windows系统的替代品,Microwindows可以用更少的RAM和文件存储空间(100K~600KB)提供相似的功能,允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等。同时,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)函数中修改如下:
psd->xres=psd->xvirtres=320;
psd->yres=psd->yvirtres=240;
psd->linelen=40;
psd->size=320×320;
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_procs={
MWTF_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函数将返回客户区域和窗口的绝对坐标。ClientTo Screen函数和ScreenToClient函数则完成绝对坐标与相对坐标之间的相互转换。
  
结语
通过将Microwindows移植到ARM平台,在保持对系统资源低消耗的同时,在基于ARM的嵌入式系统中实现了类似X Windows桌面系统的友好图形用户界面。熟悉图形应用程序的用户可以在该系统上编写自己的图形应用程序。在未来的嵌入式系统设计中,Microwindows将发挥更大的作用。

开源GUI-Microwindows简介 作者:EasyWave 时间:2014.06.07 类别:开源GUI系统-Microwindows简介 声明:转载,请保留链接 一:Microwindows简介 Microwindows 是一个著名的开放式源码嵌入式GUI 软件,目的是把图形视窗环境引入到运行Linux 的小型设备和平台上。作为X Window 的替代品,Microwindows可以使用更少的RAM 和文件存储空间(100K-600K)提供与X Window 相似 阅读详情

相关推荐

嵌入式Linux系统的图形化界面开发与实现

本文将介绍嵌入式Linux系统中图形界面开发的基本概念和步骤,并提供相应的源代码示例。在本文中,我们介绍了嵌入式Linux系统中图形界面开发的基本步骤,并提供了一个使用Qt图形库开发的简单示例代码。通过理解图形子系统的组成和工作原理,选择适合项目需求的图形库,并按照开发流程进行设计和实现,开发人员可以构建出功能丰富、用户友好的图形界面应用程序。配置显示设备和驱动程序:首先,需要配置嵌入式Linux系统的显示设备和相应的驱动程序。安装和配置图形库:选择适合项目需求的图形库,并按照相应的文档进行安装和配置。

CyberBytezZ的博客 1699

microwindows-src-0.91.tar.gz

microwindows0.91的图形库源码,要的尽管下,至于microwindows的介绍,就请自己网上查咯

ARM11处理器与Qt图形界面开发实战

本文还有配套的精品资源,点击获取 简介:本项目专为Samsung S3C6410处理器设计,主要涉及裸机串口通信程序和Qt图形界面开发。S3C6410是一款高性能的ARM11内核应用处理器,广泛应用于嵌入式设备。项目中包含串口通信程序的编写与调试,以及在无操作系统环境下使用Qt框架开发GUI界面。通过这个项目,你可以深入了解ARM11架构、处理器硬件特性、裸机编程、串口通信...

weixin_42609225的博客 772

ARM开发工具常用软件

现在ARM开发中,通常实用的工具软件,我请大家下载,有好处大家发表意见.

适合嵌入式开发的GUI(嵌入式学习)

平台特定的API和框架:原生开发使用平台特定的API和框架,如Windows CE的.NET Compact Framework、Android的Android SDK等。它支持主流的操作系统,如Windows、macOS、Linux,以及嵌入式系统,如嵌入式Linux、Windows Embedded和Android等。对于嵌入式系统的GUI开发,原生开发通常涉及使用特定的编程语言和开发工具,以便直接与底层硬件和操作系统进行交互。这些工具和框架提供了丰富的功能和组件,加快了GUI开发的速度。

JiaYu的博客 1万+

嵌入式可视化编程软件选哪个好?(可视化编程平台介绍、测评与选择)【Scratch、Mind+、Mixly】

前言 “人人都应该学习编程,因为他教你如何思考。” ——乔布斯 作为一名嵌入式小白呢,我一直认为,如果把底层的硬件驱动和编程环境的搭建当成学习生活中大量的工作的话,那一个人的创意将被抹杀,因为他在一大堆底层配置当中就已经丧失了斗志。 这也是为什么相较于51单片机和stm32标准库而言,stm32cubemx会受到大量开发者的追捧。相对于这两款大众嵌入式开发平台而言,如今更加大火大热的Arduino平台以及一些衍生平台是如何在嵌入式领域和创客领域逐渐拿下大量用户的原因。 所以呢,在昨天偶然间在B..

Boxjod的博客 2万+

面向实时嵌入式系统的图形用户界面支持系统――MiniGUI编译、安装和配置

简介: 对开放源码的自由软件来说,程序员得到的通常是源代码。在编译源代码并正确安装和配置的过程中,往往会涉及到许多工具和函数库,因此其过程经常显得有些繁复,从而也导致许多程序员望而生畏。本文重点介绍了 MiniGUI 的编译、安装和配置过程,解释了该过程中要使用的工具,并说明了 MiniGUI 的配置选项。本文可帮助程序员快速正确地安装和配置 MiniGUI。 Linux 下的软件维护和建立工具

曾经沧海 1452

关于Microwindows(nano x)2410的移植

需要安装arm-linux-gcc2.95.3,好像其他的也可以吧~没试过。安装方法网上一搜到处都是,不在此做介绍了。1.需要在microwindows官网上下载一个工具包,ftp://microwindows.censoft.com/pub/microwindows/microwindows-0.90.tar.gz [root@ root]# tar zxf microwindo

莫同学的专栏 855

10025.Microwindows 简介

        Microwindows 是一个著名的开放式源码嵌入式GUI 软件,目的是把图形视窗环境引入到运行Linux 的小型设备和平台上。作为X Window 的替代品,Microwindows可以使用更少的RAM 和文件存储空间(100K-600K)提供与X Window 相似的功能。        Microwindows 允许设计者轻松加入各种显示设备、鼠标、触摸屏和键盘等。    

1455

嵌入式系统下的Microwindows实现

前 言 目前,伴随着各种手持、无线及嵌入式设备的迅猛发展,相应的软硬件设计也发生了很大的变化。许多设备都使用了 Intel,MIPS,摩托罗拉的32位微处理器及大屏幕的液晶图形显示器。由于在过去10年中,桌面操作模式取得...

ciyi7513的博客 1271

嵌入式Linux系统下Microwindows的应用

 引言            在进入后PC时代以后,嵌入式设备以一种无法抑制的迅猛速度普及和发展到日常生活及工作当中,众多知名开发商为了抢占市场和争夺利润,竞相推出各种性能优异的软硬件及内核芯片。鉴于以视窗为代表的桌面操作模式取得巨大成功,该模式目前已成为国内外开发者们在嵌入式设备中的首选方案。        近几年,随着Linux技术的兴起,越来越多的企业和科研机构把目光转向嵌入式Linux的开

DWATER 1415

嵌入式软件编程可视化与简单化

嵌入式软件编程,代码逻辑,代码数据结构

实验四 Microwindows窗口实验

一、 实验目的   1.了解Microwindows 基本结构。2.了解Microwindows 的两套API 调用及绘图原理。3.写一个基于Microwindows API的窗口应用程序。4.练习使用Nano-X API 进行基本图形绘制。(参考函数手册)二、实验内容启动Nano-X 服务器,在屏幕上绘制一个主窗口,在主窗口上绘制直线,矩形,圆,椭圆以及填充上颜色的矩形,

788

Microwindows 介绍

Microwindows 介绍(The Nano-X Window System is an Open Source project aimed at bringing the features of modern graphical windowing environments to smaller devices and platforms. Nano-X allows applicati

ShorminHsu的专栏 1211

嵌入式系统下Microwindows的实现

前 言  目前,伴随着各种手持、无线及嵌入式设备的迅猛发展,相应的软硬件设计也发生了很大的变化。许多设备都使用了 Intel,MIPS,摩托罗拉的32位微处理器及大屏幕的液晶图形显示器。由于在过去10年中,桌面操作模式取得了巨大成功,于是许多开发者在嵌入式设计中开始使用类似于桌面的操作系统。其中一个比较好的方案就是使用Linux操作系统。由于Linux嵌入式系统上具有桌面电脑的全部功能和特性,同

billyliang的专栏 873

microwindows

 http://linux.chinaunix.net/bbs/viewthread.php?tid=1042929  关于microwindows http://blog.chinaunix.net/u2/84216/article_98658.html  关minigui Qtembedded  官方網站: http://www.microwindow.orgSDK 手冊:

TQW4321的专栏 1353

嵌入式浅谈之有趣的可视化编程

今天给各位看官带来一个有趣实用的工具,这个工具不仅可以用于编程启蒙、创客创意创作,还可以直接用于实际项目开发。在项目开发中,真正实现低代码开发,提高迭代效率,减少编译时间,解耦各个专业组的业务,让典型的上下位机开发架构可以实现真正的解耦。

2401_84369443的博客 674

arm linux 画图程序,arm linux 应用程序 nes 红白机模拟器 第1篇(示例代码)

1 /*2 This file present all abstraction needed to port LiteNES.3 (The current working implementation uses allegro library.)45 To port this project, replace the following functions by your own:6 1) nes...

weixin_39827775的博客 132
上一篇: 面试两个人应届生的经验
下一篇: 还是很想喷一下Xbox360 natal……
lzpfmh
博客等级 码龄19年 15粉丝 8原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值