基于TinyXml的嵌入式Linux

发布者:huanxin最新更新时间:2014-03-13 来源: elecfans关键字: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。[page]

  ③ 将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实现具体功能,其参数配置方法可以用于其他嵌入式系统。

关键字:TinyXml  Linux  编译器 引用地址:基于TinyXml的嵌入式Linux

上一篇:基于PSoC的精简LED点阵系统设计方案
下一篇:基于Linux的居民用电管理解决方案

推荐阅读最新更新时间:2024-03-16 13:37

利用MC68K的C编译器的μC/OS-II向MC68K移植的实现
一、MC68K CPU简介 MC68K及68020、68040等的著名的MOTOROLA32位微处理器,和与之兼容的68K、CPU32、CPU32+等CPU扩充定时处理单元TPU、队列串行模块QSM、系统控制模块和RAM等组成MC683xx系列单片机。 CPU32 内部有8个32位通用数据寄存器,8个32位通用地址寄存器。8个通用数据寄存器可作为累加器使用,也可看成C语言中各种类型的变量;8个通用地址寄存器,可作为变址寄存器使用,也可看成C语言中的指针型变量。CPU32有独立的用户堆栈指针和系统堆栈指针,可区分程序区、数据区、系统区、用户区等存储空间,有7级中断。 要实现μC/OS-II向MC68K的移值,需要
[单片机]
利用MC68K的C<font color='red'>编译器</font>的μC/OS-II向MC68K移植的实现
Linux系统下USB摄像头驱动开发
摘要:介绍了在Iinux系统下开发符合Video for Linux标准的USB摄像头驱动的方法,并对该标准提出“不间断采集”的改进思路,配合双URB、双帧缓冲等方法,提高采集速度。 关键词:Linux设备驱动 USB摄像头 Video for Linux 不间断采集 USB摄像头以其良好的性能和低廉的价格得到广泛应用。同时因其灵活、方便的特性,易于集成到嵌入式系统中。但是如果使用现有的符合Video for Linux标准的驱动程序配合通用应用程序,难以充分利用USB带宽,帧速不高,不易满足实时监控等要求。本文首先介绍在Linux系统下USB摄像头驱动编制的一般方法,然后说明在此基础上如何提高帧速。 1 Linux系统中
[应用]
如何将lua移植到arm平台的linux内核
将脚本移植到内核是一件很酷的事情,lua已经被移植到NetBSD的内核中,也有一个叫lunatik的项目把lua移植到了linux内核,只可惜只支持x86,不支持arm,在网上搜索了下,没有找到现成的,于是自己研究了下,现将它分享出来。 移植到arm平台,主要是要重新实现setjmp和longjmp两个函数,网上相关的资料很少,最后终于找到一个klibc的项目,里面有setmp和longjmp的arm平台的实现,于是直接拿来用了,不用说,当看到脚本在内核中执行并打印出 hello,world 的时候,还是很exciting的。这里讲下使用的方法,具体的代码可以去下面的位置下载: https://github.com/
[单片机]
英伟达公布开源CUDA编译器及源代码
英伟达公司宣布,LLVM现已支持英伟达GPU,从而让更多的研究人员、独立软件供应商(ISV)以及编程语言能够利用GPU加速的优势。LLVM是一款在业内极其流行的开源编译器。 LLVM是一种应用广泛的开源编译器架构,该架构采用模块化设计,能够轻松地新增对编程语言和处理器架构的支持。CUDA编译器可支持C、C++以及Fortran语言,能够为运用大规模并行英伟达GPU的应用程序加速。英伟达携手LLVM开发者,共同提供针对LLVM内核的CUDA编译器源代码变化以及并行线程执行后端。如此一来,程序员便能够利用更广泛的编程语言来针对GPU加速器开发应用程序,从而令GPU计算比以往任何时候都更加唾手可得、更加普遍。 LLVM支持各
[嵌入式]
ubuntu下arm-linux-gcc安装
我下载的地址随便找的,4.4.3版本的,地址: http://www.cr173.com/soft/42654.html#address 1.我放在了/work/tools/ 2.sudo tar xzvf /work/tools/arm-linux-gcc-4.4.3.tar.gz 3.sudo tar xvzf arm-linux-gcc-4.4.3.tar.gz -C / 4./opt/FriendlyARM/toolschain/4.4.3/bin找到了命令; 然后 sudo vim /etc/environment 在PATH= /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr
[单片机]
[linux kernel]内核图形化裁剪配置
系统版本:Ubuntu18.04-64 编译器版本:gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1) uboot版本:2018.07 -linux4sam_6.0 板子型号:at91sama5d3x-xplained MCU型号:sama5d36 内核交叉工具链依赖于Makefile文件去级联编译,Kconfig文件做配置,比如现在的ESP32也是采用这种图形化配置,好用的东西接受度就会广。 一、调出配置界面 查看Makefile文件,查看版本信息4.19 make menuconfig General setup --- //通
[单片机]
[<font color='red'>linux</font> kernel]内核图形化裁剪配置
拒绝开发板, 用 SkyEye 就可以模拟 ARM Linux
对于希望学习 ARM 汇编的同学而言, 购买 ARM 开发板进行板上实测无疑是一个有效的方法,不过购买 ARM 开发板需要一笔费用,而且每次 测试 都需要连接开发板,比较麻烦。这里介绍一个 ARM 模拟器——SkyEye,通过 SkyEye 我们可以直接在一台 PC 上完成 ARM 汇编程序的开发和调试了,摆脱了 ARM 开发板的限制,真是不错! 下面介绍如何使用: 1、下载 SkyEye 的最新版(https://sourceforge.net/projects/skyeye/),本文用的是 skyeye-1.3.4_rc1.tar.gz,同时为了后面的实验,还要下载 testsuite,它是 skyeye 的测试文件,这里
[单片机]
拒绝开发板, 用 SkyEye 就可以模拟 ARM <font color='red'>Linux</font>!
基于ARM9与Linux的门禁监控系统软件设计
  门禁,又称出入管理控制系统,是一种管理人员进出的数字化管理系统。目前,随着工业自动化的发展和人们对应用需求的不断提高, 门禁监控 系统得到了越来越多的应用,但传统的门禁监控系统一般采用门禁控制和视频图片摄录相分离的实现办法,这给现场布线带来了很多的不便,同时其成本也会大大提高。   在该方案中提到的基于 ARM9 与 Linux 的嵌入式门禁监控系统集门禁控制和图片摄录功能于一体,并详细描述了其系统的软件设计。   本门禁系统使用B/S软件架构,采用嵌入式服务器boaserver,结合CGI技术,嵌入式数据库以及嵌入式图形库来实现门禁系统的需求。 1 系统工作原理及组成   1.1 系统工作原理   本门禁监控系统采用
[安防电子]
基于ARM9与<font color='red'>Linux</font>的门禁监控系统软件设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved