技术标签: 技术观察 linux 服务器 microsoft windows 嵌入式 图形
2 Microwindows分析比较
对于大多数嵌入式设计,尤其是在运行专用图形程序的场合,X Window不是一种恰当的选择。由此而发展起来的Microwindows是专门设计用于在小型设备上开发具有高品质图形功能的开放式源码桌面系统,有许多针对现代图形视窗环境的功能部件。它的结构设计使其可方便地加入不同的显示、鼠标、触屏以及键盘等设备。Microwindows基于2.2.0版本的Linux系统如图2所示。其内核所包含的代码允许用户程序将图形显示的内存空间作为framebuffer进行存取操作,这样在用户程序空间中可作为内存映射区域来直接控制图形显示,可使得用户在编写图形程序的时候不再需要去了解底层硬件,这是目前Microwindows在嵌入式系统中被很多人使用的原因。
设计得在设计Microwindows时沿用了已有的两个图形应用程序接口(API):一是Microsoft Windows中Win32/WinCE的图形设备接口(GDI),它适用于所有Windows CE和Win32的应用程序;另外就Nano-X(Xlib-like界面),它与GDK非常相似,用在Linux上,是像X的API,用于占用资源少的应用程序。这使得熟悉Windows或者是Linux X11的用户可在熟悉的环境下开发图形应用程序。
Microwindows在运行过程中仅需要50~250KB的内存空间,远小于X Windows系统所需空间。这主要是因为Microwindows对于在驱动层的每一个绘图函数采用的是单进程的方式,由驱动层核验是否裁减并调用驱动程序来绘制未被裁减的像素点或线;而在X Window系统中,则是出于对速度的考虑,包含所有像素点的绘制程序并分别有裁减和未裁减的版本。Microwindows完全支持新的Linux内核的帧缓冲区结构,同时支持1、2、4、8、16、24、32位像素点显示,支持调色板、真彩色、灰度等颜色模式,并对渲染提供内置支持。在其API函数的支持下,还可以以RGB的格式描述上述的颜色模式,系统中包含颜色转换的程序,可将像素点转换成相近的可显示颜色或相应单色系统中的灰度级。虽然Microwindows支持Linux系统,但它是基于相对简单的屏幕驱动界面结构,因此,可在许多不同的实时操作系统(RTOS)上运行,甚至于那些无硬件的实时操作系统也可运行Microwindows。这样,可使得客户的图形应用程序在不的工程中共享使用,也可在不同的RTOS上运行不同的目标程序而不需要重新编写图形应用程序,大大提高了编程效率。
Microwindows支持图形目标平台的主机平台竞争,也就是说应用于Linux的Microwindows应用程序不需要跨平台编译,就可在桌面上直接运行和测试,同时仍可在目标平台上运行。这一点需通过使用Micorwindows的X11屏幕驱动器实现,同时驱动器可以根据像素点和颜色值来模拟目标平台的显示。因此,即使桌面系统是24位的颜色模式,它也可以以2色模式显示目标系统中的应用程序。
对于那些熟悉使用Microsoft Windows或Linux X Windows的程序员页言,经编写应用程序时是有一定区别的。Microsoft Windows的编程员一般使用MS-Visual C++的类库(MFC)中的C++应用程序框架或者是更新的ATL框架,在绘制图形时使用Win32图形设备接口(GDI)。Windows中还包括有许多Win32 GDI中的应用界面控件,如按钮、列表等。而X Windows系统提供了一个低级接口——Xlib,仅用于实现最低级简单的绘图功能,并将其封装成程序包在需显示时在显示设备上运行。在用户界面中,大多数的解决利用插件,在Xlib的上层加入插件集来实现更高级的函数。目前,对Microwindows的应用正在逐步地加入GTK+/GDK以及FLTK插件,以实现更多的用户界面控件。
3 Microwindows的体系结构
由于Microwindows在设计上有着明显的分层结构,如图3所示,其设备与平台相关层、设备与平台无关层和应用层之间层次清晰、结构明显,因此勿需改动其整体结构,只需在其相应的部分添加代码即可实现一些更为复杂的功能。
图3 Microwindows体系结构
在Microwindows的最底层(设备与平台相关层),系统针对显示屏、鼠标、触屏以及键盘等各定义了一个数据结构。该数据结构和顶层结构一样,供图形引擎使用,包含了针对指定设置和硬件驱动代码。Microwindows中还包含了诸多设备和操作系统的各种版本的驱动程序。屏幕驱动可支持系统1的、2、4、8、16、24、32位显示和调色板、真彩色、灰度等颜色模式。屏幕驱动中还包括一些入口指针,这些指针分别用读写像素、绘制水平或垂直线,在屏幕和内存之间相互映射内存空间。在实现这些基本指针的过程中需运行包括TrueType或Adobe Type1的字体支持、RGB颜色支持、JPEG以及BMP图形处理等Microwindows上层函数。如果屏幕驱动中还包括有硬件加速的话,仅需更改驱动程序即可;也可在系统中添加触屏、键盘、按键等的输入。
Microwindows的中间层是图形引擎层(也称为设备与平台无关层),因为所有的绘图函数都通过调用屏幕驱动来实现,该层与硬件无关。图形引擎层为应用层提供了一系列相应的入口指针调用绘图函数,还为所有的颜色指定了RGB的颜色模型;同样,该层也与显示设备无关,可以由RGB值为判断硬件中的像素值。除此之外,Microwindows还在中间层实现裁减功能,它采用多矩形算法,可在任意复杂的区域中实现绘图功能。中间层还要控制所有字体的显示,支持FreeType以及使用T1Lib的Adobe Type 1字体、支持比例字体,同时还支持ASCII、Unicode-16、Unicode-32、UTF-8编码规则。
Microwindows的最高层(应用层)实现了窗口交互系统,这使得程序员既可在全屏幕显示,也可在层叠的窗口中显示。一层还包括事件处理,可将触摸屏、按键等激发的事件传送给应用程序。
Nano-X API允许程序可以根据Client/Server协议通过网络或是本地的UNIX主机进行编译,以同时显示几个运行在已连接到Microwindows服务器的嵌入式设备或远程主机上的程序。除此之外,Client/Server协议还可以利用共享的内存空间客户端和服务器之间传播数据。Nano-X可在每个客户机上步运行,这意味着一旦发送了客户机请求包,服务器在另一个客户机提供服务之前一直等待,直到整个包到达为止。这使得服务器代码非常简单,而运行速度仍非常快。
4 Micorowindows上的FLTK API
FLTK是一个简单灵活的GUI工具箱,特别适用于占用资源很少的环境。它提供大多数窗口构件一一按钮、对话框、文本框以及出色的“赋值器”选择(用于输入数值的窗口构件),还包括滑动器、滚动条、刻度盘等其它构件。针对Microwindows GUI引擎的FLTK的Linux版本被称为FLNX,它能用来为嵌入式环境创建一个出色的UI构建器,由两个构件组成:FI_Widget和FLUID。FI_Widget由所有基本窗口构件API组成,占用40~48KB的资源。FLUID(Fast Light User Interface Desigher,快速轻巧的用户界面设计器)是用来产生FLTK源代码的图形编辑器,占用大约380KB资源(包括每个窗口构件)。
FLTK是一个C++库,由于大多数现代GUI环境都是面向对象的,这命名编写的应用程序移植到类似的API中会更容易。
结语
Microwindows正在嵌入式开发领域稳步发展,是完全免费的开放式源代码,为嵌入式设备提供了更多的解决方案;任何对将Linux定制于PDA、掌上机或者可移动设备感兴趣的人都可从因特网免费下载,并将其移值或开发。熟悉图形应用程序的用户可以很快就在该系统上编写自己的图形应用程序,在未来的嵌入式系统设计中,它的作用是无可限量的。
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland