基于TinyXml的嵌入式Linux

本文提出了一种基于嵌入式linux系统的居民用电管理解决方案,系统结构如图1所示。整个居民用电管理系统从结构上看分为4层:第1层为主站,负责远程抄表和控制,为供电部门和小区物业提供数据访问服务;第2层为管理终端,完成数据的远程接收和转发,并对其下的管理终端进行管理;第3层为抄表终端,用于采集现场的电表数据,通过zigbee协议发送到管理终端;第4层为电表。管理终端操作系统选用嵌入式linux,同时搭配单片机实现与采集终端之间的无线通信。
主站和管理终端之间的报文传输遵循《电力负荷管理系统数据传输规约》。根据该规约,主站会向管理终端下达一些参数设置的命令,管理终端在接到命令后应记录下该参数,并根据最新的参数来执行任务;在终端掉电重启后,参数设置依然有效。传统的参数配置基本采用两类方法:配置文件法(如.ini文件)和数据库法。由于本系统需要管理的参数条目不多,使用数据库占用的空间太大;.ini文件虽轻巧但上下文相关,不易维护和管理。xml文件则能克服以上缺点。xml(extensible markup language)是由万维网协会(w3c)设计,特别为web应用服务的sgml的一个重要分支。
它具有简单、开放、高效且可扩充、国际化的特性。xml语言具有很多优秀的特性:
①具有严格、良好的层次结构,实现了数据内容和表现形式的分离,使得配置文件结构清晰,可读性强;
②具有跨平台、自解释等诸多优点;
③现在各种经过测试的、性能优越的xml解释器非常多,避免了自己开发xml解释器,从而可以大大提高软件的生产率和健壮性。在众多的xml解释器中,通过比较选择了ti-nyxml。
1 tinyxml的特点
tinyxml是一个简单、小巧的c++xml解释器。tinyxml具有以下特点:
① tinyxml最大的特点就是体积小,速度快,而且只有2个头文件和3个源文件,总共144 kb,十分适合嵌入式系统应用。
② 功能完善,简单易用,为用户提供了丰富的api。tinyxml是一种基于dom模型的解释器。基于dom模型是指在分析时,一次性对整个xml文档进行分析,并在内存中形成对应的树结构;同时,向用户提供一系列的接口来访问和编辑该树结构。这种方式占用内存大,速度往往较慢,但可以给用户提供一个面向对象的访问接口,对用户更为友好。在本项目中需要存放的参数不是很多,因而不会占用系统很多的内存。
③ 源码开放,无须付费。开放的源码不仅可以降低产品的生产成本,更为重要的是为产品的维护完善和稳定运行提供了最为彻底的保障。
④ 易于移植。tinyxml与操作系统无关,可以方便地移植到各种系统平台。源代码中已经提供了一份make-file文件,稍加改造就可以移植到我们的嵌入式linux下。
2 tinyxml在嵌入式linux下的移植
(1) 建立arm-linux交叉编译环境
将tinyxml移植到嵌入式linux下首先必须搭建交叉编译环境。本文采用嵌入式linux,版本为2.4.18;安装的交叉编译器arm-linux版本为2.95.3。
(2) 下载tinyxml源代码
可以到相关网站(如http://www.grinninglizard.com/tinyxml/index.html)下载tinyxml源代码包。目前可以下载到tinyxml_2_5_2.tar.gz(190 527字节)或者tinyxml_2_5_2.zip(241 756字节)。这里使用的版本是2.3.4。将下载的代码包解开,生成tinyxml目录。
(3) 生成动态链接库libtinyxml.so
首先修改 makefile文件:
① 将cxx:=g++改为cxx:=arm-linux-g++,即将编译器由g++改为交叉编译器。
② 将output:=xmltest改为output:=libtinyxml.so,即将原来生成演示程序改为生成动态链接库libtinyxml.so。
③ 将xmltest.cpp从srcs:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中删除,注释掉xmltest.o:tinyxml.h tinystr.h。因为不需要将演示程序添加到动态库中。 ④ 在${ld}-o$@${ldflags)${objs}${libs}${extra_libs}语句的${ld)后添加-shared,用于生成动态库。
修改完成后,执行make命令就可以在当前目录生成需要的动态链接库文件libtinyxml.so,也可以根据需要把tinyxml编译成静态库文件。
3 tinyxml的应用编程
为了清晰地描述参数,定义了两个xml文件:一个用来定义配置文件的数据结构和类型;另一个用来存放具体的配置数据。处理方法举例如下:
对《电力负荷管理系统数据传输规约》的参数设置命令f7,即终端抄表日设置。具体描述如表1所列。
终端抄表日期:d0~d30对应每月1日~31日,置1为有效,置0为无效。
数据格式19如表2所列。
对于上述表中的数据,其配置数据的结构和类型的xml文件构建如下(文件名:param.xsd):
对于具体的配置数据xml文件构建如下(文件名param.xml):
4 结 论
本文提出了一种基于嵌入式linux系统的居民用电管理解决方案,并利用tinyxml实现具体功能,其参数配置方法可以用于其他嵌入式系统。

电动汽车和混合动力汽车 用于保护30 MHz以下车外接收机限值和测量方法
再见了,令人烦恼的广告弹窗
浅谈新国标GB/T18487.1-2023充电桩的剩余电流检测要求
华为Mate 20系列性能卓越领先荣获年度最强旗舰手机奖
“机器人清道夫”可以清除污水中的有机物质
基于TinyXml的嵌入式Linux
嵌入式工控主板与计算机PC主板的奇妙差异
研发突破性的纳米级电子“纹身”传感器可以附着在单个细胞上
X-Window系统介绍
探讨机器人行业的未来发展与时代机遇
格力电器将成闻泰科技的重要股东
IBM朱辉:简化与加速AI之旅,企业需要怎样的数据治理?
采用骁龙778G Plus 5G移动平台的小米Civi 1S发布
仓储环境监控系统监控内容与功能
区块链需要哪些舍和得
TCP 协议深度解析
STM32 SysTick配置函数
IXXAT NT系列高稳定性网关网桥解决方案
用于二维波束扫描的集成铌酸锂光学相控阵
AC7840x三电机控制应用解决方案