一种跨cpu平台的嵌入式图形界面生成方法

文档序号:6460510阅读:216来源:国知局
专利名称:一种跨cpu平台的嵌入式图形界面生成方法
技术领域
本发明涉及代码自动生成技术,特别地,涉及一种跨CPU平台的嵌入式图
形界面生成方法。
背景技术
随着嵌入式技术的飞速发展,越来越多的控制系统采用嵌入式设备和技术
替代以前的PC机。图形界面的开发在嵌入式软件中占了很大的比重,为了满足
快速开发的要求,软件设计普遍采用了组态软件技术,通过设计和生成快速完 成一个软件的开发。但是由于嵌入式系统的特点就是平台多样性,包括大量的
操作系统平台和不同类型的CPU硬件平台。己有的组态软件中只支持一种特定 平台的软件设计和生成,或者只能跨软件平台,无法跨CPU平台。使得更换CPU
平台后需重复开发,效率低下。

发明内容
本发明的目的在于针对现有技术无法实现跨CPU平台的不足,提供一种跨 CPU平台的嵌入式图形界面生成方法。
本发明的目的是通过以下技术方案来实现的 一种跨CPU平台的嵌入式图 形界面生成方法,包括以下步骤
(1) 使用者通过设计环境进行设计,系统对设计结果进行描述;
(2) 生成器对描述文件进行解析,解析结果处理成目标平台相关的格式;
(3) 根据解析结果和平台特征,生成和组织源代码;
(4) 将源代码编译成和目标CPU平台相关的指令集;
(5) 生成的指令集下载到目标平台运行。
本发明的有益效果是通过跨CPU平台的嵌入式图形界面生成方法,可以
使得一次设计可以运行于多个CPU硬件平台,方便实现系统移植,提高设计和开发效率。


图1是跨CPU平台的嵌入式图形界面生成方法原理框图2是跨CPU平台的嵌入式图形界面生成方法设计流程图3是支持跨平台的内核框图4是一个汉字编码示例图5是控件组织二叉树结构框图6是GUI执行流程框图。
具体实施例方式
本发明提供一种跨CPU平台的嵌入式图形界面生成器,结构参见图1,设 计流程参见图2。首先使用者通过设计环境进行设计,系统对设计结果进行描述 (步骤101);生成器对描述文件进行解析,解析结果处理成目标平台相关的格式 (步骤102);根据解析结果和平台特征,生成和组织源代码(步骤103);将源代码 编译成和目标CPU平台相关的指令集(步骤104);生成的指令集下载到目标平台
运行(步骤105)。
如图3所示,通过硬件描述层(HIUD)对硬件驱动进行抽象,由HIUD层 完成底层驱动的调用,实现GUI内核的硬件无关性,方便移植。HIUD定义一 个统一的接口供GUI内核和其他部分调用,并负责根据不同的CPU平台分别实 现定义的接口功能。
GUI的图形库实现基本图形绘制,主要包括点、直线、矩形绘制与填充、 圆形绘制与填充、椭圆绘制与填充、多边形绘制与填充、弧线、位图显示、网 格(表格)绘制、矩形区域反相显示。字库实现方法为把每种字符类型(字体+ 字号)的字符集合按字符编码升序排序组成一个数组。当要显示一个字符时,可 使用折半査找快速的找到要显示的字符的信息。字库数据结构包括字模结构、 字符信息结构、字符信息数组、字体。字模结构是一个一维数组,数组的大小 视字体不同的宽度和高度而定。设字体的宽度为w象素,高度为h象素,则数 组的大小为(w*h/8)字节。因此可以看出,数组中每一位表示一个象素,用1 表示字符笔划经过该象素(在显示的时候将被填上画笔的颜色),0表示不经过(在显示的时候不填色,即显示背景色)。图4显示了一个"大"(16X16)字
的结构。
字符信息包含字符的编码、宽度(像素)、每行的字节数和字模所在地址,只
包含字符的宽度而不包含高度,是假设同一字体的所有字符都是等高的。因此,
有如下的字符信息结构 typedef struct^ U16 inCode; U8 xSize; U8 bytePLine; U8* pCharData; }sGUI—CharInfo;
其中,inCode是字符的编码;xSize表示字符的宽度(象素);bytePLine是 字符的行数据(字节为单位);pCharData表示字模的地址。如"大"字的字符 信息结构为
{ 0xb4f3, 16, 2, acFontHZSong_16_b4G},/*大96 */
"大"字的编码为0xb4f3,字符宽度为16,每行要2个字节的数据。
字符信息数组一个字符信息数组是该类型的所有字符按编码升序排序后的
数组。其定义形式如下
<formula>formula see original document page 5</formula>
字体结构包含字符的高度信息(规定同一字体的字符的高度是相同的)、字
符信息数组的地址以及数组中元素的个数。由此可定义字体结构如下 typedef struct<formula>formula see original document page 6</formula>其中,ySize表示字符的高度;pCharList是字符信息数组的地址;charNum
是数组中元素的个数。
消息队列是顺序表示(即数组表示)的循环队列,消息结构如下 typedef struct
union {
const void* p;
int v; } data; sGUI一Handle hObjDst; sGUI二Handle hObjSrc; U16 msgldj }sGUI—Msg;
其中,msgld表示的是消息的类型,比如MSG—TOUCH—STAT^DOWN表 示触摸屏被触摸(按下),MSG—SHOW表示显示窗体的消息等;hWinDst则表示 接收并处理消息的目标窗体;hObjSrc表示发送消息的对象;data字段是一个联 合体,其成员包含一个voicP类型的指针p和一个int型的变量v,通过它们可以 用来传递消息所包含的数据。
定义好消息结构以后,就可以定义消息队列控制结构了。首先定义消息队 列长度。消息队列的控制结构采用"模板"方式,只描述通用数据类型。定义 好队列控制结构后,用一个真正的队列(数组)来存放消息具体的消息。消息 队列的数据结构定义好后就可以对消息进行管理了,包括消息队列的初始化, 消息入队列,消息出队列,判断消息队列是否为空,发送消息,消息派送等操 作。消息队列的初始化,主要是将队列控制结构初始化。另外,发送消息实际 上就是将消息入队,而消息派送则是将消息真正的发给处理它的窗体或控件来 处理。
应用程序进入循环以后,GUI系统开始执行,在这个过程中,由于某些原
因产生并发送了消息(主要包括触摸屏按下抬起消息,退出系统消息,重画 控件消息,控件获得失去焦点消息,按键消息,窗体移动消息,窗体显示隐藏 消息,用户自定义消息等),这些消息先被寄存在消息队列中。 一旦触发消息处 理函数,该函数将对本次收集的消息进行一次集中处理,直到消息队列空为止。如果有需要,可以在任意的地方手动触发消息处理函数,这样可以及时的处理 需要处理的消息,提高效率。
控件库包含常用的控件和操作,如控件移动,控件隐藏显示、按钮动态效 果,编辑框软键盘输入。控件的工作原理是首先创建控件,主要是为控件分 配内存空间,设置控件的初始属性和状态及默认属性和状态,设置控件的默认 回调函数用以处理一些默认的消息,把控件加入控件管理链表。控件创建成功 后,返回控件的句柄。在以后的程序中就是通过这个句柄来操作控件的,包括 向控件发送消息,改变控件的属性值等。在内存管理模块中提到句柄与真实地 址转换的过程,当向控件派送消息或改变控件的属性时,首先根据句柄得到相 应的对象在内存中的真实地址(指针),通过这个指针操作对象的属性,包括调 用默认的回调函数来处理消息。这样就完成消息处理机制了 。
常用控件的对象结构是大部分有形控件的基础设施,主要用于实现对象的
管理及包含一些公共属性。其中包含了对象的矩形区域、唯一标识、默认的消
息处理函数的函数指针以及键盘、鼠标、触摸屏消息处理函数指针和对象链表
指针。对象结构定义如下 typedef struct
int id; sGUI—CALLBACK cbDefault;
sGUI一KeyEventHandlers cbKey;
sGUI一TouchEventHandlers cbTouch;
sGUI一MouseEventHandlers cbMouse;
sGUI:Handle hParent;
sGUI二Handle hFirstChild;
sGUI二Handle hNextSibling;
sGUI二Rect rect;
U16 status;
double curPx; double curPy; }sGUIObj;
操作描述包括操作发出对象结构描述,若采用键盘操作为按键信息结构;
若采用触摸屏操作为触摸操作信息结构;若采用鼠标操作为鼠标操作信息结构。
还包括三类操作类型对应的消息回调函数类型,用来对自定义控件的操作进行 处理。另外,需要保存对象的状态,包括可见、无效和无用三种状态,可见状
态表示对应的控件是否可见;无效表示控件已失效,需要重画;无用状态表示 控件不可用。控件对象管理完成对象之间的关系描述,通过一棵弟兄二叉树表现这些关系。在创建一个控件时,需要指定控件的父控件。如果父控件为0,则 表示创建的是第一个控件。否则,把控件插入父控件的所有子控件队列的尾部。
因此形成了一棵弟兄二叉树,其级别结构如下如图5所示。
执行模块驱动整个GUI的工作,包括定时器的执行、触摸屏的执行、键盘、 窗体模块的执行、和LCD模块的执行。GUI的执行流程如图6所示。
生成器解析部分首先读取XML描述文件,通过遍历整个XML文件所有 节点和子节点,获取使用者设计信息,包括图形界面、事件和通信等,图形界 面有窗体和窗体中的控件,以及控件的属性组成。解析后获取的结果作为代码 生成的依据。组织部分根据解析结果,调用和平台相关的模板文件,分类生成 各个模块的源代码;再把生成的源代码组织成工程中的各个源代码文件。对生 成的源代码文件,调用目标平台编译器编译成可执行指令集。
以上所述仅为本发明一个实施例,当不能以此限制本发明范围,凡依据本 发明所做的结构上的变化、功能模块的增删,只要不失本发明的要义所在,都 应视为落入本发明保护范围之内受到制约。
权利要求
1.一种跨CPU平台的嵌入式图形界面生成方法,其特征在于,包括以下步骤(1)使用者通过设计环境进行设计,系统对设计结果进行描述。(2)生成器对描述文件进行解析,解析结果处理成目标平台相关的格式。(3)根据解析结果和平台特征,生成和组织源代码。(4)将源代码编译成和目标CPU平台相关的指令集。(5)生成的指令集下载到目标平台运行。
全文摘要
本发明公开了一种跨CPU平台的嵌入式图形界面生成方法,使用者通过设计环境进行设计,系统对设计结果进行描述;生成器对描述文件进行解析,解析结果处理成目标平台相关的格式;根据解析结果和平台特征,生成和组织源代码;将源代码编译成和目标CPU平台相关的指令集;生成的指令集下载到目标平台运行;本发明通过跨CPU平台的嵌入式图形界面生成方法,可以使得一次设计可以运行于多个CPU硬件平台,方便实现系统移植,提高设计和开发效率。
文档编号G06F9/44GK101295247SQ20081006255
公开日2008年10月29日 申请日期2008年6月24日 优先权日2008年6月24日
发明者义 严, 邬惠峰 申请人:杭州义益自动化有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1