《VxWorks系统显示汉字方案设计.pdf》由会员分享,可在线阅读,更多相关《VxWorks系统显示汉字方案设计.pdf(2页珍藏版)》请在金锄头文库上搜索。
1、I 一 鳗 应 一 V x Wo r k s 系统显示汉 字方案设计 哈 尔滨电气集团阿城继电器有限责任公司 王丽丽 【 摘要 】V x Wo r k s 作为 嵌入 式实时操作 系统,在 国内应用 已非 常广泛 ,但V x Wo r k s 原厂 商没有直接 提供完备 的汉字显 示解决方 案。本文这个 热 点论 题 ,通 过对 Vx Wo r k s 显示组件 的分析 ,具体给 出一种 汉字显示的方案。 【 关键 词】嵌入 式系统;汉字;显示 1 V x W o r k s 系统 图形显 示方案 V x W o r k s 的汉字显示首先需要 一种 图形解 决 方案 ,只有 工作在 图形模式
2、下才 可能显示 汉 字。v x W o r k s 有 三种显示的方案可供选择 : ( 1 ) W i n d M L + Z i n c w i n d M L 是w i n d r i v e r m u t l i - m e d i a l i b r a r y 的简称 ,其中包含u G L ( u n i v e r s a l g r a - p h i c s 1 i b r a r y ) 。该 组件 直接 控 制显 示硬 件 ,主要提供 显示模式 设置、标准 输入输 出 控制、点线面作图等函数,编程接 口很类似 于T o r b o C ,B o r l a n d C 里
3、 的图形库 。Z i n c 基 于W i n d M L ,提供 了类W i n d o w s 风格 的接 口, 有 各种控件被 封装于 内,编程接 口很类似 于 w i n d o w s 编程 。 ( 2 ) W i n d M L + J w o r k s J w o r k s 提 供J a v a 的支 持 ,在 V x W o r k s 上 启动 J a v a 虚拟 机来解释 J a v a 语 言;图形开发 编程 接 口是J a v a 语言 ,J a v a 虚拟机 的图形实 现基 于W i n d M L 。 ( 3 ) W e b S e r v e r + W
4、i n d M L + J w o r k s + B r o w s e r W e b W e r v e r 使 显示 编程 接 口成为 编写 网页 ,可 以通过 远 程 的 B r o w s e r 来 访 问而 使 设 备 具有 远 程显 示 接 口,也可 以在 本机 做 B r o w s e r 使 设 备 具有 本机 显示 接 口。该 B r o w s e r 的实现 需要W i n d M L 或J w o r k s 的支持 。 上述 方案 内,纯W e b S e r v e r 的方 案不 需 要本地汉 字显示 ,只要在 网页 上放国标码 或U n i c o d
5、e 码 等, 由远程 的B r o w s e r 去实现 显 示 ;其它方案 基本上 都需要W i n d M L 的支持 , 这 是因 为V x W o r k s 系统里所 有底 层 的显示操 作 都是通 过W i n d M L 实现 的。 2 汉字编 码的基本知识 为进行汉 字信息处理 ,国家专 门于 1 9 8 1 年 颁布 了 国标G B 2 3 1 2 一 信息交 换汉字 编 码 字符集 。其 中共 收集 了汉字 6 7 6 3 个 ,并 确 定每个汉字采用两字节编码 。 区 位码 和 国 际码 。这两 种 汉字 编 码 都 由国标G B 2 3 1 2 规定 。其中 区位码
6、,按照汉 字 在 G B 2 3 1 2 中的排列顺 序编码 ,它是把汉 字分 成 9 4 个 区、9 4 个位存 放在一 张表 中 ,一个 区 位 码 则 由 区和 位 两个 部 分组 成 。例 如 汉 字 “ 啊 ”的区位码 1 6 0 1 ( 十进制) ,而 国标码 , 则 是由区位码变形得到 。 变形 方法 :高字 节= 区号+ 3 2 ;低 字节= 位 号+ 3 2 例如 ,汉 字 “ 啊 ”的国标码则为 :高字 节 4 8 低字 节3 3 。转 换为十六进 制数表 为: 3 0 2 l H 。机 内码 。我们 先看看 国标 码 中高、 低 位字节 的表示 范围: ( 3 2 + 0
7、 1 ) = 区号 ( 或位 号) + 3 2 =( 3 2 + 9 4 = 1 2 6 ) 。从 以上不 等式可 以 看到 , 国标码 高、低 字节 全部和 标准A S C I I 码 重合 。为 了保 障汉字系统 中西文兼容 ,在 处理汉 字码时 ,必须保障 西文编码 ( 即A c s I I 码 ) 的使 用 ,但 也要 允许 国标 码 的使 用 。 显然在 一 个系 统中 同时存在 国标 码和A C S I I 码 ,这将 会产生 二义性 。例 如,有两个 字节 的 内容分 别为3 0 H 和2 1 H ,它 既可 以表示 汉字 “ 啊 ” 的国标码 ,又 可 以表示 西文 “ 0 ”
8、和 “!”的A S C I 1 9 。这 就产 生了二 义性 ,因 此 ,将汉 字 国标码 的两个字 节最高位 分别置 一 1 3 6一 电子 世 界 “ 1 ”,作 为汉 字的机 内码 ,又称 为 异行 国 标码 。这样 处理 ,既解 决 了汉字机 内码与 西 文字符 编码 ( A C S I I 码 ) 的二 义性 问题 ,又保 证了汉字机 内码和 国标 码之间非 常简单 的对 应关系。 字形码又 叫汉 字点阵 ,它是 采用点阵表 示汉字字形 的代码 。常用的点阵有 1 6 1 6 、 2 42 4 、3 23 2 等 ,例 如1 6 l 6 点阵,是把 一 个汉 字分 为l 6 行 、
9、1 6 N ,共2 5 6 个栅 格 , 一 个栅格 即为一个 点位,某点位 若有点则用 “ 1 ”表示 ,无点则用 “ 0 ”表示 。可见一个 l 6 1 6 点阵汉字 需用 3 2 个字节表示 。 3 汉字的显示方案 实现本地 汉字显示 的方案 一定会涉及到 W i n d M L ,只是不 同的方案 对W i n d M L 的依赖程 度有所不同 。 W i n d M L 是 由两部分组成 的,S D K 和D D K , 所 谓的S D K 指的是软件 开发模块 ,D D K 指 的是 驱动开发模块;S D K 包含 了一个广泛 的涉及 图 形处理 、输 入处理 、多媒体 、字 体和
10、 内存管 理方面的A P I 函数集 ,这就使得开 发者 所进行 的开发是于硬件平台无关的;D D K 模块 指的是 驱动层 ,对 于通用 的硬件的配置 ,它都 能给 出它所涉及到的驱动,它所提供的& P I 集合 , 使得开 发者可 以很快 地从它所提 供的通用 驱 动中开发 出适合需要的新 的驱动。 几种汉字 的显示方案 : ( 1 ) 利用W i n d M L 对双 字节 编码 的支持 , 实现对汉字 的点阵存 储、点阵获 取、点 阵显 示的全 过程 ,并使 用W i n d M L 的双字节显 示函 数实现汉 字码到汉 字显示 。这种 方法使用 了 系统机制 ,并使使用W i n d
11、 M L 的其 它上层组件 很方 便 地 实现 汉 字 显示 ;但 是 这 个方 法 的 前提 ,要对 W i n d M L 的双字节编码 机制理解透 彻 ,并且 要有符合W i n d M L 双字 节编码机 制的 汉字字库 。 ( 2 ) 自己开发 点阵存 储 、点阵获 取 、点 阵显示 ,改造W i n d M L 的双字节 或单字节 显示 函数 ,使其能判 断汉字码 ,一旦判断 出汉字 码 ,则 使用 自己开 发的点 阵获 取、点 阵显示 等把汉 字显示 出来 。该方法对 点阵的操作 更 加灵活 ,适合 非标 准的点 阵算法 ,或者 当开 发者 已有成熟 的点阵操作方法 时 ,把该
12、方法 绑接到w i n d 札 上。 ( 3 ) 完全 自己开发 一套 点阵存储 、点阵 获取 、点阵显示 、汉字显示 函数 ,使用 者使 用特 定的汉字 显示 函数把汉字 显示 出来 。该 方法 具有最大 的灵活性 ,甚至不理 睬W i n d M L 的任 何机制 ,直接 在上层 组件 里实现 ;但这 种方法 使程序 的中英文混合 显示变得 复杂 , 程序可移植性 也比较差。 4 具体 实现方案 综合 以上的各 种汉 字的显示方 案 ,从方 案 的灵活性和 操作 的方便 性考虑 ,我 们采用 第二种汉字 显示方 案。 我们需要的是 一个汉字 的点阵字库 ,里 面所 存储 的只是汉字 的点阵
13、信息和 区位码信 息,这个 字库 可 以通过从Wi n d o w s 中 导出 , 把 自己所写 的汉字我们 不必理会W i n d M L 双字 节编 码机制 ,我们 需要 的是一个 汉字的点 阵 字库 ,这 个点阵字 库不必按照W i n d M L 的双 字 节编码机 制进行编码 ,里面所 存储的 只是 汉 字 的点 阵信 息 和 区位 码信 息 ,这个 字 库 可 以通 过从W i n d o w s 中导 出: 由于我们 不选 用 W i n d M L 的双字 节编码 机制,所 以对于V x W o r k s 中关 于 点 阵字 体驱 动 如 何控 制 打 点 以及 显 示 ,
14、我们 并不需要 了解 ;更重 要的是 我们拥 有更大 的灵活性 ;我们只需要 做的是把 自己 所写 的汉字 显示 函数绑 定W i n d M L 上 面,在 这里就必 须要求我 们 自己写 点阵的存 储,点 阵显示 、汉 字显示 函数 。做起 来其实 不难 , 只要 求 我们 了解 一 下汉 字 的编 码 的基 本 知 识 ,即汉 字双字节 编码 中,高、低字 节的最 高位 都是为 “1 ” ,而西 文字符 的编 码 的最 高位 为 “ 0 ” ,我们 就是利 用这 点来 判断 出 所要显示的字符是汉字还是英 文。 在这里 , 以1 6 l 6 的汉 字点阵编 码为例 子进行说明 ( 1 )
15、 首先开辟 一个 内存 空间,把1 6 1 6 的 点阵编码读入 内存 。 酬I 嘲 缸 子函 其中船e : 呻参数 I 6 l 6 呶 宇点 阵字库所存放 的位I, f d ; Ad df C h me s e c b p 1 6 F o n fl a P , A M - ( mn * ) f 1 o c ( 6 8 0 0 0 ) m-0 p O_R DONL Y r 目 m p 1 6 F 0 l m , A M 2 6 7 6 1 6 ) ; c s 蚺 _ D l 锄妇 最啪 措向内存中所存披前 l 6 1 6 点 阵汉字字库媳码- ( 2 ) 汉字 的点阵显示 函数 。 利用汉 字
16、的 区位码计 算出该汉字 点阵在 字库中的起始位置 ,计算 公式: ( 9 4 ( 区号一 1 ) + ( 位号一 1 ) ) 3 2 假如 是l 2 1 2 字库 需要2 4 字节 来表示 , 所 以后面的系数不 是乘 以3 2 而 是乘以2 4 。 接着 ,取出该汉字 点阵编码 ,判断在相 应 的位置是 否执 行u g l P i x e 1 S e t 函数 ,该 函 数是在 该像素执 行打点操 作 ,假 如某位 点为 “1 ”,则执行 ,反之 则不执行该函数 。 v o i d f o n t l 6 D r a w( U G L G CI D gc , i nt x, i nt y, u nsi g ne d, ch a r c ol or, i nt p a g e ,i n t f o n t l n P a g e ) 吼 0一 p 1 6 F m ( ( P a