ip2000网络终端系统方案概要设计(编辑修改稿)内容摘要:

的兼容接口 设计 ,大大方便了许多基于 X Window 的应用程 序的移植 和代码复用。  采用 GUI 上下文共享的方法 通常在单任务 GUI 基础上开发图形界面应用有如下图左边的系统流程, 应用程序通过调用 GUI的 API实现相应功能,而这些函数有自己的上下文,并且这些上下文主要是通过数据空间的形式( data amp。 BSS)来保持的。 由于消息系统的同步功能,如果在同一进程中创建并使用多个窗口,也不会造成 GUI的冲突。 例如,可以在一个进程中构造记事本和计算器,两个窗口都可以正常地运行,因为任一时刻只有一个窗口接受消息队列的消息分发并处理(使用或改变 GUI 上 下文 ) —— 这种同步是由消息系统来保证的。 假如把 GUI使用的上下文和应用其它部分的上下文分开,一个应用完全是可以正常运行的。 如果把这种方法应用到多任务的系统,如果各个任务独有自己的 GUI上下文,则不能解决一些系统公共的设备例如鼠标、键盘、输入法等事件的检测、转换、分派以及系统庞大等许多问题(在C/S 结构中是由 Sever 来完成这个工作的)。 由此只能在各个任务之间共享 GUI 上下文,同步访问的方法来实现多任务,但在这种方法下,可能出现上图右部的状况,两个应用的 GUI API接口函数会不可预知地改写 GUI的上下文,会 造成严重冲突,为了避免这种情况,通过OS 的锁机制来实现在不同进程间实现同步地访问 GUI 上下文,则可实现不同进程有秩序地协同作,达到多任务的目的,通常通过采用了嵌入式 Linux中常用的一些工具,包括 ld脚本、 ld、 nm、 objcopy、 awk、 objdump等把 ELF文件各部分抽取出来、并重新定位,用共享内存函数把指定的内存映射到固定的地址的方法,把 抽取 的 GUI上下文装载到固定位置 的方法来实现共享。 共享 GUI上下文的各进程运行时结构如下图所示: share data amp。 bssdata amp。 bsscodestatckDATA amp。 BSSCODESHARE DATA amp。 BSSshare data amp。 bssdata amp。 bsscodestatck进程1进程NSTACKSTATCKDATA amp。 BSS进程私有空间 进程虚拟空间 进程共享空间其中 share data amp。 BSS就是 GUI的上下文。 采用这种方法来设计 GUI 多任务支持的有博利思公司为我们公司 IP1000 多任务版网络终端设计 GUI,该 GUI 是在 Microwindows 的基础上改进后的设计,事实上,这种设计方法也是借鉴了 MiniGUILite版本的一些技术,用一个主进程作为虚拟 Sever处理所有的外部事件,完成消息转换后完成消息的分发并完成窗口维护和管理,同时负责用户进程的启动(用 fork的方式复制子进程,因而主进程和所有用户进程之间皆为父子关系,各用户进程之间则互为兄弟进程),各 用户进程则接受并完成消息处理。 主进程和用户进程通过共享内存的方式来实现 GUI上下文共享和通讯,并且采用主进程附加调度的方式:在 LINUX 内核进程调度的基础上再建立应用调度,任意时刻只让其中一个用户进程运行( Running状态),其他用户进程则让其进入 Sleepon状态,主进程并用消息分发的主动权采用消息驱动的机制完成各用户进程间的调度,并实现前后台时间片的主动分配,这种方法不仅可实现共享 GUI的访问冲突,同时也提高系统的效率――决不使空闲的用户进程占用宝贵的 CPU时间片资源,但这种方法的缺点也是显而易见的。 对于我们 GUI 的设计,我们进行了较长时间的预研,并对 Microwindows/Nanox 和MiniGUI 的多任务机制进行了较为详细的剖析,觉得两者实现多任务的 C/S 结构对于我们的arm7500 硬件平台并不适合,由于 C/S 结构系统效率较低,在我们这种硬件平台资源的基础上,性能远远不能达到我们的功能需求,鉴如此,我们决定在 IP1000 多任务版本 GUI 的基础上, 开发 IP2020 的 GUI,主要是完善在 IP1000 开发过程中已发现的缺陷,并增加如下功能的支持:  对 Microwindows 桌面和窗口管理进行完 善,使整个桌面和窗口管理 与windows 风格 更加类似,从而为 IP2020 设计出更好的人机界面 :多窗口操作,图标的拖动,窗口最大、最小化操作等  参照 MiniGUI 改进 Microwindows 图形引擎的一些算法,提高 GUI 的效率  增加业务窗口下拉菜单的支持(参考 MiniGUI 菜单组件设计)  增加 国际标准化汉字系统:支持 16x16(大字符集) 、 24x24 汉字库( GB2312) 多种汉字字体  字符显示驱动增加 16 色支持  寻找替代单消息队列共享的进程间通讯机制,避免某个用户进程崩溃导致整个系统崩溃。 仿真设计 设计目 标  降低模块间的耦合关系  减少中间层  方便各个平台的移植 设计方法  将 IP1000 的仿真程序进行整合,按模块封装成 API。  针对几个关键点进行技术改进,争取最大程度地发挥系统和硬件平台的优点。  在纵向的层次上只有相邻的两层有调用和被调用的关系,相同的层次可以调用和被调用。 仿真结构设计 全局模块、命令分析模块 键盘模块 显示模块 打印模块 外设模块 通讯模块 自检模块 键盘仿真driver 显示仿真driver 打印仿真driver 外设仿真driver 通讯仿真driver 自检仿真driver NVR 操作 键盘 API 显示 API 打印 API 串口 API 网络 API NVR API 中文输入法 模块说明 1)、仿真全局模块,包括:  初始化 Gblint 的数据 仿真层 仿真 driver 层 microwin  改变汉字通讯码的显示拼字入口  设置输入 /输出入口 (将终端仿真软件从功能上分为输入、输出两大部分 )  复位通用命令分析器  根据参数初始化串口  恢复、保存、缺省 NVR 参数 2)、命令分析 使用有限状态自动机来解析命令序列。 3)、键盘模块 仿真上层:  处理控制码 (ESC、 CAN、 BS、 CR、 XON、 XOFF)  处理 ASCII 码  处理本地功能键  处理用户自定义序列键  处理缺省功能键  汉字译码并发送 仿真 driver 层: 将系统发来的键盘消息 WM_KEYDOWN、。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。