赵 宇, 翟剑锟, 刘 伟
(1.北京信息科技大学 北京 100085;2.中科院计算与通信学院 北京 100049;3.北京德润兴业科技开发公司 北京100195)
在主流技术应用开发过程中,对于那些已经存在的很多理论和技术,在实现的过程中需要有针对性性地删减和优化,以此达到应用级别开发的目的。在集成测试过程中无法发现的很多问题,在系统测试中,要采用更加极端的手段来甄别系统的稳定性和高性能。
应用处理部分包括小键盘的处理响应、液晶显示、监控模块的数据内容和执行机构等。
应用进程中的微型数据库操作分布在设备参数记录的读取中,按照用户信息查询当前用户信息的存款记录,完成操作后的应用通讯记录的插入和应用记录的插入等。
人机界面的处理包括用户键盘信息的响应、液晶显示界面和蜂鸣器提示等。
监控模块的数据校验是必须的在运行过程中,会出现很多意想不到的情况,只有在数据校验通过的前提下才能保证执行机构工作的正确性。
图1 应用处理流程图Fig.1 Flow chart of application process
后台监控软件负责设备的平台监视和控制命令。
设备通讯模式分为在线控制模式、在线监视模式、离线工作模式3种。
1)在线控制模式 监控人员有设备启动、停止、停止用户消费的控制权限。在发现用户消费过程中信息以及操作有问题的情况下可以立即停止消费行为,并暂时取消用户的消费权限,用来控制用户消费的合法性和合理性。
2)在线监视模式 监控人员可以看到设备状态,用户消费的全部信息无任何控制权限。
3)离线工作模式 设备网络通讯故障时,离线工作。消费记录存储在设备内,在线后可以上传至监控软件。
通讯进程使用设备的配置参数和后台软件通讯,传输用户信息,消费状态,消费记录、信息。以此达到监控用户消费全过程过程,收集用户消费信息的目的。
图2 通讯监控处理流程图Fig.2 Flow chort of communication process
应用处理进程响应用户操作并生成消费数据记录,监控通讯进程负责传送消费数据记录给监控软件,进程间使用消息通讯。
当设备工作在线模式时,监控软件垂询设备当前的工作状态。其中一项是消费数据记录的状态,有两种状态当前没有新的数据记录和有新的数据记录。应用处理进程在查询当前所有消费数据之后得到了一个新的数据记录的数目,并发消息给监控通讯进程。或者监控通讯进程自己去查询当前数据记录的状态。
在微型数据库的建立过程中使用的是最简单的顺序存储,并且未对任何属性建立有效的索引。在消费记录中有一个字段是是否上传标志。在监控通讯进程中,需要查询是否有未上传的数据并设置当前的通讯状态。监控程序实时查询设备的状态,包括是否有问上传的数据。
开发完成并功能测试后,顺利的进入了试点测试阶段。
试点现场安装了4台设备,开始的两个星期内没有任何问题,设备运行良好、通讯正常、消费数据记录完整。
到了第3个星期,突然一台设备无法正常通讯。拆机检查后没有发现任何硬件故障和软件问题,无奈之下更换新的设备。过了一个星期,一台设备又出现了通讯故障。严重时4台设备完全通讯不上,无法监控设备状态。只能离线运行模式,使用U盘采集离线数据后上传到监控软件。
图3 现场设备布局示意图Fig.3 Field device location
现场发现了一个问题,在通讯过程中,如果数据记录的条数超过了1 000条,通讯就会出现时断时续的情况。如果超过了5 000条,通讯基本上就断开了。在清除了数据记录后铜尊正常。也就是在数据记录条数,小于1 000条时通讯正常,大于1 000条通讯时,通讯异常。
现场反馈的问题总结非常清晰明了。在测试了文件操作的过程中发现,文件操作严重制约了实时响应速度。
下面这个函数是在消费记录中读取是否有未上传数据,在记录操作1 000条后,执行时间大于100 ms,这个时间在通讯监控程序的响应范围之外。这时就会出现通讯中断的情况。
优化策略一:添加文件上传标志索引文件。
建立一个索引文件,在生成数据记录的同时记录当前数据记录的指针和数据记录的汇总信息包括未上传数据记录的个数。结构和操作如图4所示。
图4 索引文件、记录文件物理关系示意图Fig.4 Relationship of index file and record file
对应的操作有生成记录时的是否上传判断,添加至交易记录中。如果未上传修改索引文件的记录数量,并添加未上传指针。在通讯正常情况下,上传未上传交易记录数量,按照指针提取交易记录。上传记录成功后,修改交易记录标志,修改未上传记录数目,删除未上传指针。
图5 记录操作流程图Fig.5 Flow chart of record operation
在经过一段时间的程序调整和测试发现,当前应用程序完全符合实时要求。但是程序的修改和实时响应的优化代价实在是太大了。在应用处理和通讯的流程中,添加了太多的操作。使得程序的可读性和可维护性变得越来越差。
优化策略二:添加通讯文件
经过一段时间的调整和测试,最终采用了添加一个通讯文件的模式。在记录生成的同时在通讯文件和记录文件添加,记录文件中的上传属性作废。
图6 记录存储示意图Fig.6 Schematic diagram of record storage
图7 记录操作示意图Fig.7 Schematic diagram of record operation
不需要生成未上传记录数目。在通讯文件内都是未上传的记录。查询未上传记录数目,只要获取通讯文件的尺寸除以一个元组的尺寸就是当前未上传记录的数目。
不需要生成未上传记录指针。通讯文件内都是未上传记录,顺次上传即可。同时不需要操作记录文件内的记录。
按照这个模式优化的结果。操作简单、实时响应比第一种的还要快,完全满足通讯要求。通过现场测试,经过策略二的优化的应用程序 完全满足应用需要。结构简单、实时性强。
在了解标准文件操作的时效性后,按照数据库技术哈希索引的技术指导,建立了一个高效率的索引文件,提高了数据搜索的效率。然而却带来了文件操操作的延时。对于嵌入式开发来讲,应用程序结构简单、操作方便和高效率、实时性才是更加重要的。对于大型的数据库系统技术指导下的实现方法一般结构都相对复杂,处理流程过长。需要在各种技术指导下,改进和选择最简单、有效的方法来实现嵌入式应用。通过本文的应用程序的文件操作优化过程,希望能让更多的人了解到结构简单的应用程序、效率高的文件操作才是嵌入式应用追求的目标之一。
参考资料:
[1]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.
[2]Molay B.Understanding unix/Linux programming[M].北京:清华大学出版,2004.
[3]朱义君,杨育红,赵凯,等.AT91系列ARM微控制器体系结构与开发实例[M].北京:北京航空航天大学出版社,2005.
[4]Silberschatz A.数据库系统概念[M].5版.唐世渭,马秀莉,杨冬青,译.北京:机械工业出版社,2008.
[5]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社,2006.
[6]Owens M.The definitive guide to SQLite[M].Apress,2006.