基于ARM硬件的手持机间短消息交互的程序设计
扫描二维码
随时随地手机看文章
引言
短消息是现代通信的重要形式之一,短信业务让手机成为电报式的解读工具,使视觉文字成为现代通信中传递信息和沟通的一种重要方式。短信这种文字视觉式的信息传输、解析特点,使其他类似的短消息业务广泛应用于具备通信功能的嵌入式手持设备中。
在研制一种基于STM32F107VCT6芯片的互联形嵌入式手持机时,不同的用户之间需要进行文本信息交互。本文基于现实需求,根据短信的基本定义并参考现代手机中短信的功能设计,研究了一套实现短消息功能的方案,以实现短消息的编辑、存储、发送、接收等功能,并在某嵌入式手持设备中获得了应用。
1短消息总体设计
手持机的短消息通信功能是嵌入式通信系统整体设计方案的一部分,不同的嵌入式手持机设备通过网线采用星型拓扑结构与控制终端电脑相连,利用控制终端软件的调度实现手持机与电脑之间的信令交互和状态控制,最终使控制终端实现对固定格式的短消息信令的转发,进而实现不同手持机间的短消息通信,其星型拓扑结构如图1所示。
手持机是互联互通功能实现的终端,其短消息功能实现的方案是:在STM32F107VCT6主控芯片的调度下,相关外围软、硬件外设相互配合,完成短消息的4个功能模块,即短消息发送(包括文字编辑)、短消息接收、短消息存储、短消息删除。
1.1硬件模块简介
实现短消息通信功能的硬件系统包括计算机和手持机两大部分,计算机为成型的商业电脑,不再赘述。手持机为自主设计,其硬件电路主要由以下几部分组成,即控制芯片STM32F107VCT6、像素为128×64的JLX12864G573PC型液晶显示模块(包括字库IC)、容量为64 Mb的W25Q64的FLASH存储芯片、网络通信模块(包括网络控制芯片VM35RB DP83848VVVBC及网络变压器HR911105A及其附属电容、电阻)、4×5键盘(包括0~9及A、B、C、#键及上、下、确定键),以及电源等其他外设。
STM32F107VCT6是ST公司设计的内核为CortexM3的32位处理器,其最高工作频率达72 MHz,内部含有256 KB的FLASH和64 KB的SRAM,实时性好,且具有很强的中断处理能力,目前广泛应用于嵌入式和手持设备中,是手持机实现短消息功能的核心部件。
JLX12864G573PC型液晶显示模块包括ST7565R驱动芯片、显示屏(128×64像素)和内置标准字库的存储芯片,可以通过STM32F107VCT6的引脚接口实现对字符、图片的提取、显示以及变更等操作。
W25Q64是华邦公司推出的大容量SPI FLASH产品,容量为8 MB,支持标准SPI,最大SPI时钟可达80 MHz[2]。在本设计中是利用STM32F107VCT6自带的SPI来实现对外部FLASH(即W25Q64)存储内容的读写,以实现手持机短消息的存储、删除功能。
网络控制芯片VM35RB DP83848VVVBC是美国国家半导体公司生产的一种支持10/100 Mbps的单路物理层网络芯片,具备良好的鲁棒性和低功耗特点,对各种标准的以太网解决方案有良好的兼容性,在本设计中通过UDP通信方式实现主电脑控制终端的信令交互与短消息收发。
1.2软件模块简介
实现短消息通信功能的软件系统包括计算机中控软件和手持机操作软件两个部分。
计算机中控软件采用VC++编写,利用VS2003开发环境基于无链接的UDP协议,自定义了短消息类,接收并解析收到的短消息信令,根据信令中包含的目标ID和目标ID所指向手持机的工作状态,决定是否转发短消息。代码相对简单,不再赘述。
短消息的程序实现方面主要由以下5部分组成:STM32F107VCT6的驱动程序、显示芯片驱动和显示程序、网络驱动及初始化程序、按键控制程序以及短消息实现程序。在本设计中,手持机操作软件的编写不依赖操作系统,为自主设计的代码,以上5部分代码是在ST公司自带的库文件上编写。手持机开机后,程序初始化,配置好STM32F107VCT6的内部时钟以及SPI、键盘、W25Q64、显示屏、网络接口等外设的引脚,并分别启动。之后利用UDP协议通过网络向电脑控制终端上报开机信息。在开机后,以心跳的方式每3 s向控制终端汇报一次工作状态。最后通过键盘操作进入到短消息界面,进行短消息的操作(接收短消息通过中断的方式进行)。
2短消息实现的程序设计
在本设计中,短消息是由手持机编辑并发出,以特定格式的信令通过控制终端的解析、转发到目的手持机,手持机短消息菜单界面分为收件箱、写信息、发件箱、删除短信4个子菜单,其界面如图2左图所示。
“收件箱”即接收到信息后,将信息解析、存储,以便查看、编辑(包括删除、转发)的功能菜单。其接收功能是“收件箱”的核心,具体实现是利用网络通信中断函数ETH_IRQHandler(),通过指定端口接收并解析来自控制终端转发的短消息信令,并将之存储在W25Q64芯片中。
“删除短信”功能就是对存储在W25Q64中的发送信息、接收信息进行擦除,即将目标存储空间覆盖特定字符,如0x00。在本设计中存储芯片W25Q64最小擦除单位为一个4 KB大小的扇区[2],为了使程序逻辑更加简单明了,对信息的删除,以及对接收信息、发送信息的存储操作都是以4 KB为单位对W25Q64的扇区进行操作的。
“写信息”功能是短消息功能实现代码中最庞大也是最核心的部分,即通过键盘操作,参考T9输入算法编辑文字(包括英、汉、数字、标点等),并提取相应的GB2312码存放到STM32F107VCT6开辟的缓存buffer中。当决定发送时,与输入的信宿号码(相当于手机号码)一起按照固定格式组成一条短消息信令,利用UDP协议通过网络接口发送出去,并将之存储到W25Q64芯片中预先划分的“发件箱”区域中,即“发件箱”所能够查看的内容。
存储(包括删除)、接收短消息的代码相对简单,技术实现难度较低,在此不再赘述。“写信息”中汉字编辑的难度较高,远远超过英文、数字、标点的编辑,因此,以汉字的编辑过程为主要对象进行详细说明。
2.1“写信息”程序设计与状态转换
“写信息”菜单的代码程序参考了当前市场流行的T9输入法的界面和基本操作流程,并根据应用需求做适当改进。不同的输入内容可通过“#”键进行循环切换,数字输入采用直接按键的方式,英文大/小写字母、标点符号以快速连按的方式进行选择并输入,程序设计相对简单。以汉语拼音的方式实现汉字输入的方法需要随时根据键盘和显示屏的显示内容进行状态转换,过程相对复杂。
汉字拥有固定的形、音对应关系,这是汉字编辑的逻辑起点。利用T9拼音输入汉字的思维逻辑是:一个汉字至少对应一个拼音,因此可利用汉字对应的汉语拼音查找同音汉字,然后在同音汉字中查找目标汉字。“写信息”菜单中汉字编辑的实现及状态机转换过程也是与这种认知规律相一致,即是一个采用循环[34]结构,不断查找、判断输入数字串与拼音组合及同拼音汉字这三者之间的映射关系过程[5]。
首先通过“#”号键调整输入方式,使之处于汉字输入的状态下;然后通过键盘2~9输入代表拼音的数字串,并在显示屏上实时显示拼音的“匹配结果”,若代表拼音的数字串输入有误,可以通过C键删除上一个错误输入的数字,若代表拼音的数字串输入正确,则通过A或B键查找目标字符拼音,即筛选与数字串对应的拼音组合;若拼音组合也正确,则判断、确定目标汉字,即按下“1”键,确定拼音,并通过1~5键选择排列的1~5个汉字,存储其GB2312码,并将其对应的点阵组合显示到显示屏上,或利用上、下键选择下一组同音的5个汉字。至此一个汉字的输入过程便完成了,下一步则可以根据短消息编辑的需求,决定是继续输入汉字还是按下确定键输入信宿的号码,并按发送键将保存的GB2312码流发送出去。算法的主体结构如图3所示,并可借鉴参考文献[1]中汉字“帮”的输入过程(如图2右图所示)。
2.2信息功能实现的关键点设计
要完成短消息的编辑、发送和接收等主体功能,汉字拼音码表的查找,中、英文混排编辑以及设计合理的信令结构是其中的关键点。
2.2.1“码表查找”数据结构
汉字输入法的实现过程实际上是一个根据键盘输入查找拼音组合以及相应汉字的过程,但关键在于数字串到拼音往往是一种多对多的映射关系,而拼音到同音的汉字排列表是一种一对多的映射关系。为实现正确的汉字输入,首先要获得正确组合的数字串,根据数字串找到对应的拼音,再根据该拼音找到对应的汉字,最后根据汉字的机内码到汉字字库中查找汉字的显示点阵,这一过程不妨称为“码表查找”过程。“码表查找”的实现中对合理码表的设计具有重要意义[4]。
拼音索引数据结构,是一个包括输入数字序列、拼音、拼音码表的结构体,这三者构成一个完整的三级映射关系。其定义如下:
typedef struct {
u8 *py_input;//输入的数字序列
u8 *py; //数字序列对应的拼音
u8 *pymb; //拼音码表
}py_index;
其中具体的拼音索引表(部分)由2~9数字组合成的数字序列、数字序列对应的拼音,以及拼音码表数组3部分组成。