嵌入方法(精选十篇)
嵌入方法 篇1
任何种类的软件在开发前期, 都需要对软件的规模大小进行度量。在对软件开发早期的功能规模和成本估算方面, 最广泛使用的方法包括传统的功能点和COSMIC功能点度量方法。后者的提出从原理上来看弥补了一些前者的缺点, 包括不适合度量实时系统和嵌入式应用程序。
1.1 IFPUG
IFPUG功能点分析是把应用系统按组件进行分解, 并对每类组件以IFPUG定义的功能点为度量单位进行计算, 从而得到反映整个应用系统规模的功能点数。功能点分析从用户对应用系统功能性需求出发, 对应用系统两类功能性需求进行分析:一类是数据功能性需求, 另一类为事务功能性需求。数据功能性需求又分为:内部逻辑文件 (ILF:Internal Logical Files) 和外部接口文件 (EIF:External Interface Files) 两类;事务功能性需求则分为:外部输入 (EI:External Inputs) , 外部输出 (EO:External Outputs) , 外部查询 (EQ:External Inquiry) 三类[1]。
1.2 COSMIC
COSMIC方法认为整个系统的功能规模是通过“数据移动”的数量来度量的, 一个数据移动是一个数据组的传输, 一个数据组是一个可区分的、非空的、无序且无冗余的数据属性的集合。COSMIC方法有四种类型的数据移动:数据入 (Entry) 、数据出 (Exit) 、读 (Read) 和写 (Write) 。一个数据移动记为一个COSMIC功能点 (Cosmic Function Point, CFP) , CFP是COSMIC方法中标准的度量单位。通过统计软件系统中的所有“数据移动”的数量来得到真个系统的功能规模[2]。
2 两种方法在嵌入式系统软件方面的应用
IFPUG通常被认为不适合度量嵌入式系统软件。因为当程序的大部分功能是完成一些电子数据处理时, IFPUG就可能不能准确的描述存储数据的功能规模和数据的移动操作。COSMIC方法从定义上克服了一些IFPUG方法存在的局限性。具体来说, COSMIC将涉及到的数据组中的数据运动 (出, 入, 读和写) 记录为功能点, 并且允许在不同的粒度级别进行度量。尽管如此, 由于COSMIC方法提出的时间更晚, 许多嵌入式系统软件的项目实际上都使用了IFPUG方法, 而使用COMSIC方法度量嵌入式系统软件的实例则少之又少。本文旨在提供一些关于两种方法在度量嵌入式系统软件适用性方面的对比和分析。我们对一些在度量实时系统和嵌入式软件时经常遇到的情况分别用两种方法度量, 以此来比对两种方法对实时系统和嵌入式软件的适用性。
2.1 初始化功能
在嵌入式软件中, 一些过程通常包括更新一些数据和产生的结果。考虑进程初始化和测试硬件自检显得很有必要。实际上, 一些硬件设备的初始化和测试都通过一个单一的执行命令:发送初始化命令, 返回结果数据, 以此检查设备是否正常工作 (图2) 。
对于IFPUG方法来说, 设备初始化或者自检 (图1) 是一个很模糊的概念, 在需求中也很少有明确的解释, 这让度量人员很难判断系统“初始化”或者“自检测”这一功能是否存在EI, EO或者EQ, 以及其对应的ILF和EIF。而在使用COSMIC方法进行度量时则可以避免这种情况的发生——大多数自检功能都是在边界内完成的, 没有数据穿越边界, 即没有产生功能点计数的变化。
2.2 系统内存
在嵌入式系统软件的需求说明中, 需求经常关注一些在非常底层的操作, 从而造成难以识别定义与基础功能组件相匹配的功能。例如:数据与内存。
在某些嵌入式软件中, 内存的使用作为一个整体介绍了新的需求。例如, 一个军事机载嵌入式软件需要能够在一些特殊情况下擦除整个RAM, 例如, 该飞机在敌人的区域坠毁 (因为储存在内存的信息不能向敌人提供) 。这个需求 (图2) 是独特的, 它是关于整个内存, 而不仅是用户相关数据。
根据IFPUG的度量原则, 在这个案例中应该把这个内存擦除功能记作一个外部输入 (EI) 。在这种情况下, 由于每个EI一定对应处理一个ILF, 所以应该把RAM记作一个ILF;但是从另一个方面来说, ILF “是一组用户可识别的在应用边界内且被维护的逻辑相关数据或者控制信息”, 而RAM显然不是, 因此便产生了矛盾。
而在使用COSMIC方法度量时, RAM作为一个擦除命令的感兴趣对象, 我们在这里只需要考虑为一次数据入和数据写即可。
2.3 功能点比较
IFPUG方法和COSMIC方法在针对不同系统的软件时的表现也一直存在争议。我们分别抽取了10个MIS系统软件和10个嵌入式系统软件用两种方法进行度量, 结果如表1所示。
通过表1我们不难发现, IFPUG在度量嵌入式软件时, 度量结果会显著偏大。通过对两种方法度量过程的比对后我们发现, 在使用IFPUG方法对嵌入式软件进行度量时, ILF和EIF显著影响了功能点数的大小 (表2) 。由于嵌入式软件的数据传输在相对底层操作, 根据IFPUG方法的度量原则, 很容易识别出多个低复杂度的ILF和EIF, 因此对功能点数产生了显著影响, 而COSMIC方法只关注数据的移动, 并不会受到所识别出的感兴趣对象数量所影响。
3 结语
本文针对两种最广泛应用的软件功能规模度量方法在嵌入式系统软件方面的应用, 通过从软件初始化、内存的识别、度量规则的定义三个方面讨论和分析了两种方法的在度量过程中所遇到的问题和产生的原因。我们的研究结果似乎表明, 总体来说COSMIC功能方法比IFPUG更适合度量特定的实时系统和嵌入式软件。
必须指出的是, 由于嵌入式系统软件的特点, 无论使用IPFUG方法还是COSMIC方法进行度量, 对于软件复杂度的定义都应该进行相应的调整和细化, 因为有些流程可能是非常复杂的。当面对特定的实时软件和嵌入式系统时, 我们的研究结果能够为从业者在度量方法的选择上提供有用的帮助。
参考文献
[1]International Function Point Users Group.Function Point Counting Practices Manual-Release4.3.1, January 2010.
[2]COSMIC-Common Software Measurement International Consortium, COSMIC Method v4.0 Measurement Manual, ISO/IEC19761:2011.
[3]Norman E.Fenton, Shari Lawrence Pfleeger著, 杨海燕等译.软件度量 (第二版) [M].北京:机械工业出版社, 2004.9.
嵌入式软件开发方法分析论文 篇2
摘要:随着信息化技术的快速发展,嵌入式软件组件开发方法因其具备针对性的软件开发能力而受到业界广泛关注,相关研究也因此大量涌现。基于此,笔者简单分析了基于组件的嵌入式软件开发方法,并详细论述了Qt下基于组件的嵌入式软件开发方法。
关键词:组件;嵌入式软件;Qt
1、引言
随着科学技术的快速发展,传统代码式软件开发方法已难以满足电子产品的复杂性功能需要,使得业界对扩展性好的软件开发方法需求程度不断提升。为了最大化发挥该开发方法的优势、推动我国嵌入式软件开发领域快速发展,本文围绕基于组件的嵌入式软件开发方法进行了深入探讨。
2、基于组件的嵌入式软件开发方法
2.1组件架构
“控制、监视或辅助装置、机器和设备运行装置”被称作嵌入式系统,该系统由硬件与软件共同构成,其中的软件正是本文研究的嵌入式软件。嵌入式软件具备灵活性强、运行效率高等优势,为了保证嵌入式软件的应用效率与应用质量,基于组件的嵌入式软件开发必须重点关注系统组件架构设计,系统的.整体资源配置效率也将因此得到提升。具体来说,组件架构设计需要遵循重用原则、信息传递原则和闭包原则。此外,模板的完整性和耦合性也需要得到设计人员的重点关注[1]。
2.2接口设计
该设计需在完成各类系统组件划分后结合接口、逻辑操作一一对应原则开展。基于组件的嵌入式软件组件接口设计属于灵活性较高的工作,为提升设计的专业性和针对性,需重点关注设计中的实际情况;为提升嵌入式组件结构的抽象性,需要采用接口与实际相分离的方式进行设计;为提高设计的准确性和规范性控制,需要避免出现私自改动接口设计方案的行为。
2.3开发流程
传统的嵌入式软件开发流程可概况为:需求分析→设计→实现→测试→运行。虽然该流程可最终满足开发需求,但其中存在大量的重复劳动,使得传统嵌入式软件开发流程效率较低、开发流程较繁琐。基于组件的嵌入式软件开发流程可概括为:应用系统/应用系统/应用系统→抽取领域共性→组件库→新应用系统/新应用系统/新应用系统。其中组件库为组件构成的组件仓库,可有效解决传统嵌入式软件开发存在的不足,具有较高的实用价值[2]。
3、基于组件的嵌入式软件开发方法应用实例分析
3.1开发环境
为提升研究的实践价值,本文选择了智能气象站的嵌入式软件设计作为研究对象。在基于组件的嵌入式软件开发方法应用中,引入了Qt这一跨平台C++开发环境,moc(元对象编译器)负责C++语言的扩展。在具体设计中,Qt的良好封装机制、“信号与槽”新消息机制大大提升了嵌入式软件的实用性。前者的程序开发和配置不受平台限制;后者拥有面向对象、真正信息封装和连接灵活等优势,共同为基于组件的嵌入式软件开发提供了有力支持。
3.2框架设计
在智能气象站的嵌入式软件设计中,需首先开展功能需求分析,考虑到智能气象站主要通过ZigBee(无线)和RS232(有线)方式进行智能传感器上传数据信息的接收。图1为系统组成及数据流图。结合图1发现,该系统由主控单元、两个数据采集单元(通信器)、传感器(软)、日志处理单元、数据存储单元和状态处理单元组成,各模块功能如下所示:(1)主控单位。主要根据配置信息设置工作路径,启动系统、同步时钟、连接信号与槽、创建单元实例和停止系统也属于其功能范畴;(2)通信器、传感器(软)。主要负责数据采集,其中传感器(软)指的是软件中定义的一个组件;(3)存储器模块。负责接收TCP模块指令、传感器模块指令及数据,将数据存储至数据库也属于该模块功能组成;(4)日志模块。负责接收并记录信息,以此实现设备运行状态的诊断;(5)状态模块。负责接收各模块的心跳信息、状态信息,并以此控制LED闪烁;(6)通信器。由ZigBee通信器、串口通信器组成,主要针对通信通道设计,负责通道的开闭、数据发送、数据获取,并与传感器(软)共同完成数据采集,具体采集流程可描述为:外部时钟→时钟信号→传感器(软)→采集指令→通信器→硬件,其中传感器(软)向通信器发出采集指令,通信器则向传感器(软)传递数据信号。
3.3框架实现
3.3.1单元间通信方式单元间通信需要对单元进行抽象处理,所有单元均拥有2路输入和输出,分别用于指令和数据的传输。为实现从CUnitBase继承来的各单元间指令格式、信号格式的统一,需要进行单元通用信号和槽的定义(CUnitBase)。具体设计存在四种信号和槽,分别对应通用信息、状态信息、数据信息、指令信息的信号与槽。3.3.2类的继承关系在Qt中,基类QObject继承属于所有类的来源,Qt自带的线程类QThread、设计采用的单元基础类CUnitBase便属于其中典型。类的继承关系可概括为:QObjec类→QThread类→CUnitBase类→具体功能类,其中非线程类继承属于QObject类。在具体设计中,CUnitBase类的定义必须得到重点关注,每一个组件的细化、具体功能类的派生也在设计中占据重要位置。如CControlCenter类,围绕其开展的设计需涉及数据连接、日志连接、指令连接和状态连接等重要内容。CLedControl类、CHYTcpServer类、CHYStatusMonitor类和CHYDataStorag类等在设计中同样占据重要地位。3.3.3系统配置系统启动流程为:开始→创建核心应用程序→创建主控单元实例→调用主控单元配置函数,实现系统配置→遍历、开始所有线程→运行核心运行程序,启动事件循环。系统配置流程为:开始→读取配置文件→根据配置文件创建相应单元→连接单元间信号和槽→设置同步时钟→结束。其中的调用主控单元配置函数步骤,需先后调动setWorkPath函数、loadConfiguration()函数。3.3.4其他设计ZigBee通信器模块、ZigBee传感器模块、串口通信器模块、串口传感器模块和存储器模块同样属于设计的关键内容。存储模块的存储器接收信息处理流程为:开始→接收到数据→数据→计算QC→存储到临时缓冲区,以及:开始→接收到数据→指令→标记发送者→读取数据库并打包数据→发送报告到发送者,由此可更深入了解基于组件的嵌入式软件开发方法。
4、结语
综上所述,基于组件的嵌入式软件开发方法具备较为广阔的应用前景。在此基础上,本文涉及的开发环境、框架设计、单元间通信方式、类的继承关系、系统配置和其他设计内容,提供了可行性较高的基于组件的嵌入式软件开发路径。为更好地推动嵌入式软件领域发展,Qt下的系统实时性必须得到重点关注。
参考文献
[1]王小锋.基于组件的嵌入式软件开发方法[J].电子技术与软件工程,(8):53.
[2]戴巍,霍亚,马尚昌,等.Qt下基于组件的嵌入式软件框架设计及实现[J].计算机应用,,36(S1):257-261.
嵌入式系统软件设计方法应用分析 篇3
【关键词】嵌入式系统;软件设计;应用分析
引言
嵌入式系统是一种以计算机技术为基础,以特定的应用功能为设计目的的一种能够完全嵌入控制件内部的计算机系统。嵌入式应用中虽然有很多像Qt/Embedded、MiniGUI之类的图形界面处理软件或工具包来辅助系统设计,但在很多情况下中却无法使用这些软件或工具包。尤其是近几年来,互联网和移动网络的高速发展, 更是将嵌入式系统的发展带到了一个全新的高度,对嵌入式系统应用的功能性要求也越来越高,给嵌入式系统设计和开发带来了更大的难度。这些应用的软件架构需要一种实用、简捷的设计模式来解决上述设计问题,从而保证系统的可靠性。
1.嵌入式系统的发展历程
1.1 早期的嵌入式系统设计方法,一般是采用“硬件优先”原则。即在只粗略估计软件任务需求的情况下,首先进行硬件设计与实现。
到现在,嵌入式系统的发展已经有了将近四十年的历程,在这四十年当中,嵌入式系统已经陆陆续续的渗透到工程设计、科学研究、军事技术以及网络技术中,成为人们生活所必不可少的一部分。采用这种设计方法,一旦在测试时发现问题,需要对设计进行修改时,整个设计流程必须重新进行,对成本和设计周期的影响很大。而且,随着科学技术以及计算机网络技术的不断发展,对嵌入式系统的功能和运行的可靠性要求也变得越来越高,使得嵌入式系统的设计和开发也变得越来越困难。
1.2 自从在上世纪七十年代最早的嵌入式系统的前身单片机问世之后,经过无数科学研究人员的不懈努力,各种各样的嵌入式微处理器和嵌入式微控制器相继出现,正式标志着嵌入式系统进入了发展阶段,成为了时代发展的一部分。因而出现了软硬件协同(codesign)设计方法,即使用统一的方法和工具协同设计软硬件体系结构,最大限度地挖掘系统软硬件能力,避免由于独立设计软硬件体系结构而带来的种种弊病,来获得高性能低代价的优化设计方案。
2.嵌入式应用系统软件设计的思路
简单版本的嵌入式应用系统在使用的过程中可以不涉及操作系统,但是当应用系统需要设计的功能比较复杂的时候,对系统软件所进行的设计是相当复杂的,当前,嵌入式系统设计人员已将擅长的设计方法发展到用软件来体现系统的部分功能。嵌入式操作系统的引入,在应用系统目标软件和硬件之间架起了一座桥梁,它可以大大减少系统设计的复杂性。
系统体系结构一旦确定,硬件和软件就可以相对独立地进行设计。协同设计的目标是做出恰当的体系结构决策,允许在以后的实现阶段中独立完成。这样,嵌入式操作系统作为应用程序和系统硬件之间的虚拟“视图”,将目标应用软件和硬件系统隔离开来,减少了目标应用软件对底层硬件系统的依赖,这样既增强了应用软件的可移植性,也减少了应用软件设计的复杂性。在设计或者对嵌入式操作系统进行移植的时候,应该将系统对硬件所产生的依赖部分转化到位于底层的设备驱动程序上面,这些设备驱动程序在这个时候只是提供给系统一个虚拟的视图,在此之后再由微内核提供将以上系统合并在一起的有效机制,这样既可以簡化内核所可能拥有的复杂程度,又能够进一步缩减内核可能拥有的体积。为了便于使用,提高系统的可维护性与可扩展性,将目标硬件相关代码封装成软件包的形式,以便开发者定制替换,定制和替换过程只是微内核中虚拟视图的增加与删减,相应只需改变硬件抽象层。嵌入式系统软件的设计,关键是有可用的工具包,在不同的开发阶段需要不同的工具包。在早期嵌入式应用系统软件设计时,首先使用的是内部电路模拟器(ICE)。内部电路模拟器插在微处理器和总线之间的电路中,开发者可以通过它控制所有的输入输出以及微处理器的行为。但是内部电路模拟器是异体,容易引起不稳定。近年来,出现的各种集成开发环境集成了代码编辑器、编译器、连接器、调试器、模拟器等工具,它使开发者可以首先脱离目标硬件环境,快速开发出应用软件原型。
这种平台式开发对基于标准的市场尤其有用,在这种市场中,产品必须支持一些基本功能,其他功能须进行定制。现在,各种各样的硬件开发板,为开发者提供了在与目标硬件兼容的硬件环境中调试应用程序的功能,更加加快了这个进程。
3.嵌入式系统软件设计方法应用
3.1 对软件的实时性进行设计:跟通用软件设计相比,嵌入式系统软件设计对系统的实时性具有很高的要求,只有保证嵌入式系统的实时性,让系统能够在规定时间内对激励做出反应,才能够保证嵌入式系统的正常运行。因此,在软件设计过程中,一定要按照实时性的不同,将软件功能分为实时和分时两个部分对软件的性能进行严格、合理设计,保证嵌入式系统软件的实时性能。
3.2 对软件的可靠性进行设计:为了能够有效保证嵌入式系统运行的可靠性,在对软件进行设计过程中,还需要对软件的可靠性进行合理设计。在对软件进行设计的过程中,一定要在充分考虑嵌入式系统运行特点的基础上,仔细编写功能模块的代码,尽可能避免错误的出现。同时,在编写完功能模块的执行代码之后,一定要立即对其进行试运行,如果发现问题,及时进行解决,以避免集成功能后对系统的运行的可靠性造成影响。
3.3 由于嵌入式设备中的资源有限,只能选择轻量级的Web Server(如:thttpd、boa等),考虑到应用的广泛性,建议选择boa服务器。作为与用户交互的主要方式,Web page力求简洁,并尽可能提供很多的功能接口。这些功能接口基本可以分为两种类型,一种是触发动作功能,主要利用button触发实现现场图片的采集等动作的操作。另一种是文件交互功能,这种功能的实现相对比较复杂,它不仅需要button触发, 还需要一些文本域作为用户配置的传递机制。动态Web交互功能主要通过form窗体来实现,当用户点击功能接口,浏览器将窗体内容通过http协议传输给服务器,服务器再根据form中的action字段来调用相应的CGI文件。
3.4 混合编程,提高软件的执行力:混合编程指的是在软件编程过程中,同时利用汇编语言和高级语言进行编程,这也是当前编程发展的一种主要趋势。在编程过程中,针对不同的编程要求选择不同的编程语言,比如,对一些执行能力要求比较高或者是实时性要求比较高的程序进行编程,应该选择严谨性比较好的汇编语言进行编写,而对于一些对逻辑性要求比较高的程序进行编程,可以选择具有一定智能性的高级语言进行编写。如此以来,就可以同时提高软件的执行力和分析能力,提高嵌入式系统的智能性。
4.结语
嵌入式系统已经成为人们生活的重要组成部分之一,因此,在日常工作当中,一定要对嵌入式系统的设计和开发引起足够重视。而在嵌入式系统中,软件占据着极为重要的组成部分,也是系统设计、开发的重点、难点,所以,在软件设计过程中,一定要从软件的实时性、可靠性以及可拓展性等方面进行综合考虑,对软件进行合理设计。
参考文献
[1]吕骏.嵌入式系统设计[M].北京:电子工业出版社,2012.
基于编码的视频嵌入视频方法的研究 篇4
视频隐藏的蓬勃发展激起了研究者在视频中嵌入视频的灵感。SWANSON[6]首先提出了在视频中嵌入视频的思路, 利用一种基于高比特信息隐藏算法的向量射线比较法, 将秘密视频信息隐藏于载体视频中完成传输, 避免了单独传输易丢失的缺点;肖柏创[7]等人对YANG3]的算法进行了改进, 实现了高比特率的视频嵌入视频的方案。尽管这些方法都取得了一定的效果, 但都只是针对秘密为原始视频的情况展开讨论, 并未考虑秘密信息为压缩视频码流的情况。视频鲁棒隐藏算法的隐藏容量较小, 宿主视频每帧中隐藏的数据量有限。而视频的数据量是海量的, 如果不对秘密视频进行压缩编码, 那么一帧秘密图像需要隐藏在多帧的宿主视频中, 这样势必会带来实时性不高、秘密视频隐藏帧数少等问题。
针对上述问题, 本文提出了将秘密信息压缩编码后再嵌入视频的信息隐藏方案。该方案将视频的嵌入过程看成是秘密视频隐蔽通信的过程。首先将秘密视频压缩编码成码流, 从而有效地减少秘密视频的比特数。同时为了克服压缩码流误码敏感的缺陷, 应用了纠错和交织编码增加秘密信息抗误码的性能。在嵌入时, 选用鲁棒性较好的变换域的隐藏算法进行嵌入, 进一步增加隐蔽传输的可靠性。
1 视频嵌入视频方案概述
1.1 算法的改进
本文的隐藏算法在对参考文献[3]的算法进行深入研究的基础上对其进行了改进。参考文献[3]的嵌入算法如下:
(1) 将宿主视频按照4×4块大小进行整数DCT变换, 并按照zigzag扫描的顺序选取前8个系数 (c0, c1, c2, …, c6, c7) 组成向量V;
(2) 计算l和lT:
其中, T表示阈值, [.]表示四舍五入操作。
(3) 计算lT′:
其中, 嵌入1时, +0.25;反之, -0.25
(4) 计算l′和V′:
Yang的提取算法如下:
(1) 计算l″和lT″:
秘密信息的值取决于I的数值。
与其他格式相比, 视频在视频中的嵌入对实时性的要求更高。参考文献[3]算法在鲁棒性和图像质量方面都具有良好的性能, 但由于其嵌入的步骤要涉及到zigzag扫描、向量计算等, 若直接将其应用到视频嵌入视频的方案中, 将不利于实时性目标的实现。因此, 本文在保持了原算法性能的前提下, 对算法进行了简化, 缩短嵌入所需的时间。图1是CIF (352288) 格式的News、Moblie和Foreman视频序列按照4×4分块、整数DCT变换后低频在块中的能量示意图, 其中, 比值
从图中可以看出块中的能量集中于直流系数, 占到前8个系数总能量的0.95~0.99, 则, 将提取端的l′、l、lT、lT′等参数带入到V′中, 则:
为了进一步简化式 (6) , 对News、Moblie和Foreman视频序列进行了抗压缩的鲁棒性实验, 秘密信息为随机序列, 其误码均值的结果如表1所示。通过实验数据可以看出, 选用直流系数的鲁棒性和8个低频系数抗压缩的性能近似。因此, 可将式 (6) 简化为:
同理, 接收端中DCT变换后的能量也主要集中在直流分量上。因此, 可以在保证鲁棒性和图像质量等算法性能的基础上, 利用直流系数作为载体完成秘密信息的嵌入, 这样有利于视频实时性嵌入目标的实现。
1.2 视频嵌入算法
秘密视频信息嵌入框架如图2所示。
(1) 对秘密视频采用视频编码标准进行编码。
(2) 利用纠错码提高系统的鲁棒性, 同时利用交织技术防止突发错误的出现。
(3) 隐藏算法:
(1) 将宿主视频按照4×4进行分块, 并进行整数DCT变换;
(2) 选取每块中的直流系数D (i, j) , 进行如下操作:
其中, m表示秘密信息。
(3) 计算l′和V′:
(4) 将V′写回到4×4块中;
(5) 重复上述过程直到秘密信息嵌入完全。
1.3 视频提取算法
秘密视频提取的框架如图3所示。
(1) 提取算法
(1) 将宿主视频按4×4分块, 并进行整数DCT变换;
(6) 重复上述操作直到将秘密信息提取完毕为止;
(2) 交织和纠错解码;
(3) 视频解码。
2 实验结果
实验中, 采用CIF (352×288) 格式视频序列News、Forman、Mobile作为宿主视频, 秘密视频为QCIF (176×144) 格式的视频序列Forman。视频编码采用H.264/AVC编解码参考软件JM8.6, 编码模式采用IPPPPP…的格式。
表2列出了3组不同运动强度视频序列为宿主视频的仿真实验结果, 其中PSNR/dB、TIME/s、BER/%分别表示利用参考文献[3]算法以及本文算法嵌入秘密信息前后载体图像的峰值信噪比、嵌入算法所需的时间和宿主视频经过编码后接收端提取秘密信息的误码率。QP表示编码宿主视频时的量化步长。
当秘密视频未编码时, 隐藏1帧QCIF视频信息需要48帧CIF宿主视频。按照参考文献[3]的算法提出的秘密视频效果图如图4所示。其中参数N、PSNR分别代表每48帧宿主视频隐藏的秘密视频帧数和接收端提取的秘密视频的峰值信噪比, QP表示宿主视频编码时的量化步长。
由于本文算法对采用了压缩和纠错编码, 隐藏视频的帧数与秘密视频编码的步长和BCH的参数有关。当QP=16时, 编码后的秘密视频的PSNR=45.82 dB, 实验结果如图5所示。
从以上的仿真实验可以看出, 应用本文的所提出的算法后, 嵌入隐藏信息的混合视频信号与原始视频几乎没有什么差别, 达到了隐藏信息透明的要求。从表2的实验数据中可以看出, 在相同压缩比的情况下, 本文的算法较之于参考文献[3]的算法缩短了嵌入所需的时间, 且误码率平均减少了76.6%, 具有更好的抗压缩性能。而当综合采用编码和隐藏算法后, 本文算法的优越性进一步凸显, 从图4、图5的实验仿真效果图中可以看到, 在相同压缩比的情况, 隐藏帧数提高了5~11倍, 并且接收端提取秘密信息的质量也获得了明显改善。
本文提出了一种视频压缩码流在视频中嵌入的方案, 为了避免视频压缩码流对误码敏感的缺点, 在隐藏算法上采用了高比特率的鲁棒算法, 通过修改视频的亮度分量Y在变换域中的直流系数来嵌入秘密信息;同时秘密信息在嵌入前采用预处理的策略, 即先对秘密视频进行压缩编码、纠错和交织编码等预处理。通过实验数据可以看出本方案所提出的视频嵌入视频的方法提高了隐藏的帧数及接收端提取秘密信息的质量, 实现了隐秘视频的高效传输, 为视频嵌入视频提供了一种新的思路。
参考文献
[1]LI Y, CHEN H.-X, ZHAO Y.A new method of data hiding based on H.264 encoded video sequences[J].IEEE Int.Conf.Signal Processing, 2010:1833-1836.
[2]ALY H A.Data hiding in motion vectors of compressed video based on their associated prediction error[J].IEEE Trans.Inform.Forensics Security, 2011, 6 (1) :14-18.
[3]YANG M, BOURBAKIS N.High bitrate multimedia information hiding for digital image/video under lossy compression[J].SPIE Journal of Electrical Imaging, 2007 (16) :1-12.
[4]HU Y, ZHANG C, SU Y.Information hiding based on intra prediction modes H.264/AVC[J].In Proc.IEEE Int.Conf.Multimedia and Expo, ICME, 2007:1231-1234.
[5]Ma Xiaojing, Li Zhitang, Tu Hao, et al.A data hiding algorithm for H.264/AVC video streams without intra-frame distortion drift[J].IEEE Trans.Circuits Syst.Video Technol., 2010, 20 (10) :1320-1330.
[6]SWANSON M D, ZHU B, AHMED T H.Date hiding for video-in-video[C].Proceed-ings of the 1997 International Conference on Image Processing.Sanata Barbara′CA, IEEE Comput Soc, 1997 (2) :676-679.
嵌入式计算系统调测方法与技术综述 篇5
摘要:叙述嵌入式计算系统在开发阶段、生产环境和现场环境三种情况下的调测技术和方法,以及如何在硬件和软件设计中进行可观测性和可测试性设计。
关键词:在线测试 可观测性 可测试性 BDM JTAG
引言
对于含有微处理器的装置来说,调测总是软件和硬件结合的。在产品开发的阶段以排错为主,在产品开发后期以及生产和现场运行阶段,则是以测试为主。不同的阶段,调测的内容、手段和使用的工具不尽相同。
测试接口并不是系统功能的一部分,测试接口设计本身也需要成本。对于小型简单系统来说,没有必要也不允许(成本考虑)设计测试接口;对于复杂系统来说,设计测试接口的花费是值得的。良好的测试接口设计可经缩短产品的开发周期,给产品维护、维修带来便利。
对于嵌入式计算系统来说,测试往往是软件和硬件相结合的,既有借助于“正确”的软件来测试硬件,也有借助于“正确”的硬件来测试软件。由于软件设计人员和硬件设计人员的技术隔膜,二者常常在出现问题后相互指责,难以界定是软件还是硬件问题。对于嵌入式系统的软件设计人员来说,必须对硬件有足够的了解。这一点,和通用计算平台上的软件设计是不同的;反之,硬件人员也必须能够编写一些测试软件,以证明其设计的正确性。
1 开发阶段的调制方法
1.1 RAM版本的目标系统调试
通过ICE(In-Circuit-Emulate)来调试目标板是开发人员最常用的手段。在产品开发初期,由于各种软件和硬件问题很多,通过仿真器并结合逻辑分析仪、示波器等硬件信号测试工具能够很好地发现问题。
在仿真器环境下,通过仿真器的监控软件来控制用户软件的运行,使用断点、单步跟踪和查看变量、CPU寄存器、存储器的数值等手段来查找问题。由于仿真器的软件和硬件需要一定的CPU资源,用户软件在仿真器环境下运行和脱离仿真器后独立运行是有区别的。好的仿真器能够尽量减小这种区别。常见的仿真器从技术上区分有:单CPU仿真器、双CPU仿真器和ROM仿真器。
在仿真器环境下,程序一般是在仿真器的RAM存储器中运行的,所以这种阶段也称为“RAM版本的目标系统调试”。
1.2 ROM版本的目标系统调试
在仿真器环境下,目标板运行调试正确后,(本网网收集整理)一般的做法是将应用程序写入目标板的非易失性存储器中,让目标板单独运行。在很多情况下,目标板系统往往不能运行或者运行结果和仿真器环境下不一致。而没有连接仿真器,无法观察各种软件状态,给分析问题造成一定困难。在目标板上设计指示电路有助于发现问题;在电路板上增加1个LED是最简单也是很有效的方法。对于复杂系统,可以设计1个数码管显示输出接口,或者设计1个调试用串口,将调试信息发送到PC机上显示。
在使用PC机作为显示输出设备时,一般的做法是使用Winodws自带的超级终端软件,无需另外编制程序。和前二种方法相比,该方法的接口信号是双向的,调试者可以通过PC机输入信息到目标板中,设定显示信息的类别。这一点,对于复杂系统的调试是很有价值的,CISCO公司的很多路由器产品就使用这种方法来维护和调试。
2 生产阶段的测试方法
生产阶段的测试只是对硬件电路或者系统进行测试。测试目的是为了对产品或者部件进行分检,找出有缺陷的产品。测试内容包括:
*裸板测试――检查未安装元器件的电路板上的开路和短路缺陷;
*成品生产缺陷分析――检查已安装元器件的电路板上焊点的短路和开路缺陷;
*成品电气性能测试――认证每个单元器件的上电运作;
*产品功能测试――认证电路模块的功能。
生产测试和开发阶段的硬件测试不同,需要测试方法快速、能成批测试,易于在制造生产线上安装。在生产的不同阶段使用的测试工具和技术也不相同。目前常用的测试工具和技术有:人工视觉检查(MVI)、在线测试(ICT)、自动光学测试(AOI)、自动X射线测试(AXI)。其中人工视觉测试(MVI)只能用于小批量试制产品。
在线测试(ICT)是最常用的一种线路板测试方法:使用专门的针床与已焊接好的线路板上的元器件接触,通过针床在线路板上施加微小电压来测试线路通断、元件是否正确安装。由于需要为特定电路板设计专用夹具,适合于单一品种民用型家电线路板极大规模生产的测试;缺点是在高密度的SMT线路板测试困难。目前的替代解决办法是使用光学方法测试(如AOI,AXI),或者使用边界扫描技术(即基于IEEE1394标准的JTAG测试接口)测试。后者需要IC或者线路板支持此技术。
功能测试是生产过程的最后阶段使用,测试线路板或者系统的功能指标,一般的
功能测试需要设计专用测试设备和测试软件。
3 现场测试技术
现场测试分为三种情况:一种是在线测试,测试设备不停止运行;一种是停机测试,被测试设备停止运行;第三种为脱机测试,将被测部件从运行现场取出,放到专用的测试装备上进行测试。从测试技术角度上说,后二者更容易进行各种测试;对于复杂系统来说,往往故障和问题需要在设备运行时才能发现和定位,必须进行在线测试。究竟采取哪种方式进行现场测试,取决于故障状况和实际应用是否允许立即停机。
开发阶段产品和成熟产品的现场测试要求也不同:前者测试目的主要是发现设计中的问题,由产品开发人员进行;后者侧重于发现使用中的问题和失效的部件,目的是更换部件,由产品使用人员进行。(但测试方法和步骤也有可能是设计人员制定的`。)
现场测试和试验室测试的最大区别就是测试设备难以安装和连接:线路板封闭在机箱中,测试信号线很难引入,即使设备外壳上留有测试插座,测试信号线也需要很长,传统的在线仿真器在现场测试中无法使用。另一方面,现场往往没有实验室里的各种测试仪器和设备,因此,必须有更好的方法和手段来完成测试。
嵌入式处理器中目前有很多芯片具有类似Motorola公司683XX系列处理器的BDM调试接口(详见第5部分)。这种接口是串行的,处理器内部固化了调试微码,为现场测试 带来了方便。对于不具备这种接口的嵌入式计算系统,在系统设计时将关键信号点引出到一个测试接口插座上,通过该插座可输入测试激励信号和观察输出信号;对于软件测试,可使用前文中所述的ROM板测试方法,外接显示部件来观察程序运行情况。
软件现场调试的另外一个要求是程序应能够现场下载,以便在发现问题后能够修改软件。现场在线下载程序的方法有两种:一种是使用具有ISP功能的处理(如Philips公司的P89C51RD系列MCU等),另一种方案是将软件设计成两部分,一部分是应用功能软件,另一部分是完成前者下载到系统中的下载通信软件。无论哪种方法,下载的主机均是PC机。如果需要达到远程调试和下载的目的,则要使用后一种方案。例如,在Echelon公司的Lonwork现场总线产品中,每个节点中的程序均可以通过网络下载,这种功能为多节点网络系统的现场调试带来了极大方便。
4 可测试性设计
在产品开发初期,产品测试的目的是验证产品设计的正确性,而可测试性部件的存在则能加快测试速度,缩短产品开发周期;在生产阶段,通过测试来剔除有缺陷的产品和部件;在使用阶段,测试则用于故障定位,找出失效的部件并更换或者维修。可见,产品的测试在产品生命周期各阶段均有十分重要的作用。可测试性设计应该在产品设计初期就加以考虑,结合测试在不同阶段的作用来设计测试模块和接口。
产品的可测试性设计要考虑的问题有:测试的目的、测试部件的位置、测试部件的基本要素、内置测试部件与外部测试设备仪器之间的电气和机械连接,添加测试部件对被测模块功能和性能的影响、测试部件的成本以及何时使用测试功能等。
如前所述,测试在产品不同阶段是有差别的。在产品开发阶段,很多参数需要定量和详细地进行测试,以验证产品在各种不同情况下是否能正常工作;测试参数,测试点较多,可以方便地连接各种外部测试仪器,也不需要考虑添加测试部件所带来的附加成本。在产品生产和使用阶段,测试的节点和参数数量也相对减少,测试一般是定性的,无需借助于外部设备的自测试,成本因素也必须考虑。
测试部件一般位于被测部件的接口和边界位置上,如图上所示,用于产品控制被测部件的激励信号和采样被测部件的输出信号。测试部件一般由测试信号源、信号传输通道、测试观察装置等组成。测试部件可以完全包含在被测部件中,也可部分位于外部(如外接信号源和示波器等)。对于自动测试,测试部件还包括被测部件的预期输出存储部件比较部分。
在一个系统中,如何划分模块,确定测试位置(即模块的边界)是关系到可测试性设计是否合理的首要问题。模块间最小相关原则和模块内最小相似原则是两个重要依据:前者保证测试可以独立进行,不需要很多其它模块的配合;后者可以使测试能正确反映被测模块的大部分工况,不至于漏测很多工作状态。
很多情况下,从被测模块的边界直接引出信号有困难,测试信号需要经过其它模块引入到被测模块上。如果作为信号路径的模块对信号特征没有改变,则称这种测试路径是透明的,路径模块必须能在旁路模式和正常工作模式之间切换,实现起来有局限性。对于硬件来说,最简单的透明路径是使用跳线。
对于简单嵌入式系统来说,测试一般包括上电自测试和人为测试。后者在故障出现时进行。对于复杂系统来说,还包括定时自动测试,比如在大型程控交换机和飞机机载电子设备的运行过程中,均定时进行自检。
可测试性设计还应考虑测试功能所使用对象的不同。产品设计人员、产品使用人员和产品维护人员对测试内容的要求是同的,需要进行分层次的可测试性设计。
对于硬件和系统的可测试性设计已有IEEE1149.1/4/5等标准可以借鉴,对于单纯的软件测试,目前尚无具体和统一的标准,只有诸如代码格式分析、白盒测试、黑盒测试、覆盖测试等测试方法。软件测试的途径有两个。一是在源代码中增加大量测试代码,使用条件编译指令来控制形成调试、测试和最终发布等不同版本。调测版本的代码规模要比最终的发布版本大很多,在问题解决后,一般将临时性测试代码通过编译开关屏蔽。另外一个软件测试途径是使用专用的测试软件(如法
国Telelogic公司的LOGISCOPE测试工具),这些测试软件能完成诸如覆盖测试、代码格式分析等功能,但均是针对特定的语言和操作系统环境,使用上一些限制。
还需要说明的就是“可观测”设计的概念。可观测性和可测试性不同,不需要加入激励信号,只观察系统运行中某些内部状态,比如软件中某个重要变量的数值变化,硬件电路中某个IC引脚的信号电平等。在设计中,应该保留这些观察接口,以便需要时用它来判断和分析系统的问题。一个可测试的系统,一定是可观测的,反之则不然。设计可测试性系统的目的是为了以后修改和改进设计,而使系统具有可观测性则是为了维护系统,判断哪个是出故障的部件,以便更换。可测试性设计一般用于新产品,而可观测性设计用于成熟产品。当然,在结构、安装条件和成本允许的情况下,成熟产品也应具有可测试性。实际上,由于处理器技术和芯片的日新月异,已经不存在真正意义上的成熟产品了。
在一类产品中的可测试性设计应该具有一致性,例如,用红色LED表示电源状态,所有电路板均应采用红色LED,点亮的频率也应该一致。作为企业,应制定相关的测试接口标准,并且这些标准应符合行业习惯或者行业标准。
5 测试和调试接口标准
测试和调试接口标准:JTAG和BDM。
5.1 背景调试模式
在使用传统的ICE来调试时,使用ICE中的CPU来取代目标板中的CPU,目标板和ICE之间使用多芯扁平电缆来连接,而ICE在使用时一般还需要缩主机(一般来PC)来连接。
在一些高端微处理器内部已经包含了用于调试的微码,调试时仿真器软件和目标板上的CPU的调试微码通信,目标板 上的CPU无需取出。由于软件调试指令无需经过一段扁平电缆来控制目标板,避免了高频操作限制、交流和直流的不匹配以及调试线缆的电阻影响等问题。这种调试模式在Motorola公司产品68300系列中被称为背景调试模式BDM(Background Debug Mode)。在仿真器和目标之间使用8芯(或者10芯)的BDM接口来连接,其他公司的嵌入式处理器也有类似功能,不过叫法不同,例如AMD公司在其X86微处理器上提供“AMDebug”的调试接口。
实际上,BDM相当于将ICE仿真器软件和硬件内置在处理器,这使得我们直接使用PC机的并口来调试软件,不再需要ICE硬件,大大节约了汽油发成本。一些调试器供应商也提供这种软件产品(如XRAY)。对于用户来说,为了调试一些特定问题,可以直接使用BDM命令来调试目标系统,以弥补商业调试软件的不足。
BDM接口有8根信号线,也有为10根信号线的,如图2所示。调试软件通过4脚使CPU进入背景调试模式,调试命令的串行信号则8通过脚输入,同时4脚输入信号步时钟,而CPU中的微码在执行命令后会在10脚输出调试结果指示信号。可见,BDM接口引线由并口和PC机相连,调试命令则是通过串行方式输入的。
目前在CPU内置的调试接口和微码方面,各厂家尚无统一标准。处理器厂家、工具开发公司和仪器制造商曾于组成了Nexus 5001 Forum(Nexus 5001论坛),成员包括Motorola、Infineon Technologies、日立、ETAS和惠普公司等,正致力于制定一个统一的片上通用调试接口。这方面的进一步情况可查阅www.nexus-standard.org/网站。
5.2 边界扫描测试技术和JTAG接口
边界扫描测试技术(Boundary-Scan Test Architecture)属于一种可测试性设计。其基本思想是在芯片引脚和芯片内部逻辑之间(即芯片边界位置)增加串行连接的边界扫描测试单元,实现对芯片引脚状态的设定和读取,使芯片引脚状态具有可控性和可观测性。
边界扫描测试技术最初由各大半导体公司(Philips、IBM、Intel等)成立的联全测试行动小组JTAG(Join Test Action Group)于1988年提出,1990年被IEEE规定为电子产品可测试性设计的标准(IEEE1149.1/2/3)。目前,该标准已被一些大规模集成电路所采用(如DSP、CPU、FPGA等),而访问边界扫描测试电路的接口信号定义标准被称为JTAG接口,很多嵌入式处理器内置了这种测试接口。在Cygnal公司的C8051F000系列单片机中和一些FPGA芯片中,JTAG接口不仅能用于测试,也是器件的编程接口。
IEEE1149.1标准支持以下3种测试功能:
*内部测试――IC内部的逻辑测试;
*外部测试――IC间相互连接的测试;
*取样测试――IC正常运行时的数据取样测试。
图3给出了具有2个芯片的系统的边界扫描测试原理。
图3中,TCK为测试同步时钟输入,TMS为测试模式选中输入,TDI为测试数据输入,TDO为测试数据输出,由测试移位寄存器产品。图3中的小方框表示位于芯片外围的边界扫描测试逻辑单元,芯片每个引脚信号经过边界扫描单元和内部的功能单元相连接。
目前,边界扫描技术的应用主要在数字
嵌入式系统应用课程教学方法实践 篇6
关键字: 网络 多媒体技术 嵌入式系统 应用课程 教学方法
DOI:10.3969/j.issn.1672-8289.2010.09.052
随着信息化,智能化,网络化的发展,嵌入式系统技术也获得了广阔的发展空间。嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。它的发展给社会带来了巨大的经济效益,与此同时,社会对嵌入式专业人才的需求也逐步扩大。据有关部门不完全统计,国内每年嵌入式系统技术人才紧缺达40多万人左右[1]。
为社会培养人才正是高校办学的宗旨,嵌入式系统作为一个新兴的技术领域,正逐渐成为许多高校的重点建设课程,如何尽快培养出满足社会发展需要的各种嵌入式技术高级人才,是高校从事嵌入式技术教学的老师必须面临的问题[2]。已有嵌入式系统教育工作者在嵌入式系统教学现状[3]和教学模式[4]方面做了一些研究。
但对嵌入式系统教学方法的研究也不容忽视,好的教学方法会起到事半功倍的效果。嵌入式系统可以认为是软件和硬件的综合体,它涉及计算机体系结构、操作系统、微机原理、接口技术、计算机编程等诸多知识内容,是一门综合性和实践性都很强的课程。如何有效的提高课堂教学效果,达到预期的教学目标,是高校教师应该思考的问题。
1 嵌入式系统应用课程设置
嵌入式系统应用课程[5]是整个嵌入式系统教学中最重要的部分,其设置的合理性,直接关系到嵌入式系统教学的成败。嵌入式系统应用课程的设置要具有针对性,下面就这一问题从以下四个方面进行讨论。
(1) 嵌入式微处理器的选择
嵌入式技术发展到今天,嵌入式微处理器的种类也日益繁多,单从嵌入式微处理器的架构来讲,目前市场上流行的就有ARM、MIPS、PowerPC以及68000等架构。
但在高校教学领域推广十分广泛的就属ARM架构嵌入式微处理器,它是由ARM(Advanced RISC Machines)公司推出的32位RISC处理器。毫无疑问,ARM芯片嵌入式微处理器中的佼佼者,是很多数字电子产品的核心。如95%的手机里面的核心处理器使用的都是ARM芯片,而ARM在整个手持市场上占有90%以上的份额,这是一个惊人的比例。目前,全球已有超过700多家的软硬件系统公司加入了ARM Connected Community,其中中国本土公司也已有超过70多家公司加入了ARM生态伙伴系统[6]。
而且ARM公司提供了一套完整的产业链,确保了ARM芯片的开放性和通用性。因此,高校开设嵌入式系统专业课程,ARM芯片应是首选的学习对象,其相关的学习资料和开发工具较多。比如三星公司ARM7内核的S3C44B0X,以及ARM9内核的S3C2410等。
(2) 嵌入式操作系统的选择
嵌入式操作系统是嵌入式系统的灵魂,它使得嵌入式系统的应用更加广泛。目前在市场上流行的嵌入式操作系统多达十几种,常见的有uC/OS II,ucLinux,Arm-Linux,Windows CE,VxWorks,Palm OS,Symbian,Windows Mobile,Android等等。
在嵌入式系统教学上,应从市场对人才需求来考虑,这里建议选择Linux操作系统作为教学内容。因为该操作系统是内核代碼开源的,可以免费下载使用。可根据应用情况进行内核裁剪,具有很好的移植性。
(3) 实验平台的选择
嵌入式系统实验平台是嵌入式系统教学不可缺少的教学资源,目前推广嵌入式系统实验教学平台的公司也比较多,比如北京博创兴业科技有限公司、英蓓特信息技术有限公司、亿道电子技术有限公司等。
每个公司所推出的实验平台有所不同,主要是所采用的处理器平台、操作系统平台、以及外围硬件资源的不同。在教学实验平台的选择上,应根据教学培养目标来进行选择。建议在嵌入式系统基础实验上要重点考虑。
(4) 应用课程教材的选择
在嵌入式系统教学中,嵌入式系统应用课程教材的选择也尤为重要。目前市场上关于嵌入式系统的教材可以说是琳琅满目、百家争鸣。选择一本合适的教材,对于学生学习和掌握嵌入式系统起着关键的作用。如果所选教材太难,或者太简单,那么学生会觉得学习起来没有意思,缺乏激情。所以,教材内容的难易度,要根据教学目标和学生的实际情况来进行选择,并且应与嵌入式系统实验平台相配合,通过实验加深对知识的理解和掌握。
2 传统的教学方法
嵌入式系统应用课程是嵌入式系统专业的核心课程,它具有综合性强和实践性强的特点。不仅在课程设置上对教学提出了挑战,更是在教学方法上提出了更高的要求。采用何种教学方法以达到较好的教学效果,成为了嵌入式系统教学成败的关键。
教学方法是指教师在教学过程中为完成教学目的、任务而采取的活动方式的总称。但它不是教师孤立单一的活动方式,它包括教师“教”的活动方式,还包括学生在教师指导下“学”的方式,是“教”的方法与“学”的方法的统一。
讲台—实验室教学方法是一种传统的教学方法,它注重的是在新知识的传授过程中,以老师讲授为主,老师的注意力集中在自己“教”的内容上,而无暇顾及学生实际“学”的情况。而是教学之后,通过实验来巩固所学知识。在这样的教学过程中,学生就会觉得十分乏味,以致对嵌入式的学习产生厌倦的情绪。而且,学生在真正做实验的时候,已经是很被动的去完成相关任务,而失去了挑战新知识的动力。
3 一种新的教学方法
改进教学方法[7],提高教学质量是教育界一直都关注的问题。面对嵌入式系统应用课程综合性和实践性的特点,传统的教学方法显得心有余而力不足。高校培养合格的嵌入式技术人才是高校办学的宗旨。结合嵌入式系统应用课程特点和学院实际情况,通过研究讨论,提出了一种创新型的教学方法——网络多媒体技术教学方法,该教学方法有别于一般的多媒体教学法。
如何有效地组织实施该教学方法,是获得理想教学效果的关键。下面从三个方面来阐述这种新的网络多媒体技术教学方法的实施步骤。
(1) 网络多媒体环境的布置
网络多媒体环境的布置是这种新型的教学方法有效实施的前提。如图1所示为网络多媒体环境的平面图。第一,要构建一个局域网络。在这个局域网络里,以教师机主机控制端、学生机为受控端,安装好“红蜘蛛”多媒体教学软件;第二,要组装好嵌入式系统实验平台。要求在教师和每一位学生座位上组装配置好实验教学平台;第三,要在教师机配有扩音器和话筒。
(2) PPT课件的制作
PPT课件的制作,在形式上要新颖、多样化,给学生以一定的视觉冲击,以防止学生视觉单调而疲劳乏味;在内容上要结合课本、联系实际,给学生带来除课本之外的知识享受。
(3) 示例演示与互动
嵌入式系统课程是一门应用性、实践性很强的课程。所以在教学过程中,要特别注意示例演示,以加强学生对新知识的理解和掌握。并要考虑学生的主体地位,留有一定的时间给学生,让他们自己动手操作。
该新的教学方法,教师和学生都可以处于主体地位,教师在传授新知识过程中,以边讲边操作的方式进行,让学生能够直观的理解知识难点。学生也可以在课堂剩余的时间里,对新知识进行验证理解。
4 两种教学方法的对比
我们对嵌入式系统课程教学进行了研究讨论,并对上课的184名学生进行调查统计,得到表1所示的统计数据。
从这些数据表明,网络多媒体教学方法在嵌入式系统教学上是可行的,也是十分有效的。
5 结束语
随着嵌入式应用的迅猛发展,企业对嵌入式人才需求的缺口越来越大,越来越多的高校开始加强嵌入式系统的教学和科研,培养更多的适应社会需求嵌入式系统人才。嵌入式系统应用课程教学是嵌入式系统教学的核心,针对嵌入式系统应用课程的特点,本文在讨论了如何设置嵌入式系统应用课程的基础上,讨论了传统教学方法在嵌入式系统应用课程教学中的不足,并提出了一种新的教学方法,教学实践证明,该教学方法获得了显著的教学效果。该教学方法具有一定的参考价值,可以在其它高校进行推广和借鉴。
参考文献
[1] 中国教育培训行业发展趋势研究报告[R]. http://www.hdcmr.com/34587.pdf.
[2] 刘国梅.浅谈普通高校的嵌入式系统教学[J].中国科技信息. 2008(20).
[3] 李岩,王小玉,孙永春.嵌入式系统教学研究[J].电气电子教学学报.2006(03).
[4] 马忠梅.嵌入式系统教学模式探讨[J].单片机与嵌入式系统应用.?2008(11).
[5] 毕春越.计算机专业嵌入式系统教学模式探析[J].教育与教学研究.2008(04).
[6] 2010年ARM技术研讨会(上海/北京/深圳)[C].http://www.arm.com/chinese/.2010.
[7] 雍克勤.?基于现代科学技术发展下的高等学校教学方法改革研究[J].兰州大学报.2007.
作者简介:
谭华(1983-),男,助教,硕士研究生,研究方向为嵌入式系统应用、形式化方法、模型检验;
嵌入式软件运行内存余量测试方法 篇7
目前, 高实时性的可靠嵌入式操作系统广泛应用于各类装备中。由于系统内核小、系统资源相对有限为保证系统的时效性和可靠性, 设计系统运行内存留有一定余量是很有必要的[1]。
余量测试是对软件是否达到需求规格说明中要求的余量的测试, 若无明确要求, 一般至少留有20%的余量。
由于嵌入式系统为非桌面系统, 不容易观察其内存占用情况, 因此测量运行内存余量缺乏精确手段结合有/无操作系统支持的嵌入式软件特点, 介绍静态分析计算法、动态运行监测法与逆向证明法3种嵌入式软件运行内存余量测试方法, 并分析各种测试方法的优缺点及适用场合。
1 静态分析计算法
对于DSP类无操作系统和IDE不支持内存监控的嵌入式软件, 由于无法监测软件动态运行内存使用情况, 可采用静态分析计算内存使用情况。静态分析法根据软件开发平台不同可分为代码分析计算法和map文件分析计算法。
1.1 方法1:代码分析计算法
代码分析计算法的原理是通过对软件源代码中的变量声明、内存申请和软件部署占用空间进行统计, 分析计算出软件运行内存占用余量, 具体步骤:
(1) 分析统计代码中所有变量的声明占用的空间。
(2) 分析统计代码中所有内存申请操作申请的空间。
(3) 分析软件部署设置的内存分配空间。
(4) 计算内存余量= (可用内存总量-上述所有内存占用的总和) /可用内存总量。
1.2 方法2:map文件分析计算法
map文件是CCS软件编译后产生的有关DSP用到所有程序、数据及IO空间的一种映射文件。通过分析软件源代码编译后生成的map文件[2], 可统计计算软件运行时的内存占用余量, 具体步骤:
(1) 查看文件中.bss (全局变量和局部变量) 、.eb ss1/.ebss2 (使用大寄存器模式的全局变量和静态变量) 、.stack (堆栈) 、.sysmem (为动态存储分配保留的空间) 字段实际分配大小。
(2) 计算内存余量= (可用内存总量-上述所有内存占用的总和) /可用内存总量。
1.3 优缺点
静态分析计算法的优点:环境依赖性弱, 不需要专门的环境支持。
缺点:
(1) 置信度较低, 因为没有实际运行软件, 不能确认实际的内存占用, 不能发现内存泄露的问题。实际测试时可借助Klocwork、RTInsight Pro等静态/动态分析工具进一步分析, 消除内存泄露问题。
(2) 方法1工作量大。软件规模如果比较大时, 计算所有的变量是一个大工程。
1.4 适用场合
(1) 方法1适合完全采用静态内存分配申请操作、结构简单、规模不大的软件 (≤10000Loc) 。
(2) 无法提供其他环境支持。
(3) 可用内存总量远大于初步分析的软件内存占用量。
(4) 余量测试精度要求不高的情况。
2 动态运行监测法
对于运行在Vx Works平台的嵌入式软件, 可采用动态运行监测法查看其内存使用情况。其原理是通过Vx Works提供的API, 在被测软件运行时监控Vx Works提供的系统内存占用情况, 并输出到显示界面[3], 从而计算内存余量。动态运行监测法根据对内存占用量的取样次数可分为memshow指令监控法和代码嵌入memshow指令法。
2.1 方法1:memshow指令监控法
memshow指令监控法只是获取系统当前某一时刻的内存占用结果, 具体步骤:
(1) 在Vx Works提供的shell指令界面中使用memshow命令, 返回结果如下:
(2) 在shell指令界面查看当前系统空闲内存大小和已分配占用的内存大小。
(3) 计算当前内存余量= (当前系统空闲内存大小) / (当前系统空闲内存大小+已分配占用的内存大小) = (2909436) / (2909436+969060) =0.75。
2.2 方法2:代码嵌入memshow指令法
代码嵌入memshow指令法通过在源代码中插桩调用memshow指令, 实现对内存占用量的多次采样, 具体步骤:
(1) 在Tornado开发编译环境中, 修改被测软件, 增加memshow () 的调用。可以在被测软件本身的周期任务中或专门增加一个低优先级的任务调用。
(2) 重新编译运行被测软件。
(3) 将被测软件运行于最大内存负荷的场景中, 采集和记录运行过程的内存占用情况。
(4) 分析Vx Works的输出信息, 找到被测软件运行过程的最大内存占用量, 并计算内存占用余量。
使用该方法时应注意:若在原有周期任务中增加memshow () 调用, 则应事先确认不会影响到软件的实时性;若采用新增任务调度的方式, 为保证实时性, 应将新增任务的优先级设为最低, 但任务优先级过低可能会导致无法被调度, 可将其优先级设置为与原有任务中最低优先级任务相同;采集记录时必须将被测软件运行在最大内存负荷的场景, 否则影响置信度。
代码嵌入memshow指令法插桩的示例代码如下:
2.3 优缺点
动态运行监测法的优点:
(1) 置信度高, 因为是对实际运行的被测软件进行测试。
(2) 结果精确。
缺点:
(1) 方法1的shell界面下调用memshow不能保证是在软件内存负荷最大时监控的, 可能影响置信度。
(2) 方法2需要修改被测软件, 可能影响被测软件的时序而引入问题。
(3) 分析计算工作有难度, 因为需要确定被测软件的标准输出是否可记录, 是否需要重定向输出, 还需要从一段时间的大量实时监控数据记录中找出最大的内存占用量。为减轻查找最大内存占用量的工作量, 可以使用shell脚本多次采样, 然后记录每次的结果, 比较选取最大的占用量作为测试结果。
2.4 适用场合
(1) 动态内存分配申请操作的软件。
(2) 软件运行时内存占用变化较小的, 且提供了shell界面的软件, 可用方法1。
(3) 软件实时性要求不是特别高, 增加代码不会影响到实时性的, 可用方法2。
(4) 软件的标准输出可以记录。
(5) 余量测试精度要求高。
3 逆向证明法
逆向证明法是间接测试软件运行内存余量是否不小于某设定值。其原理是额外占用一定内存后测试被测软件是否仍能正常运行, 特别是最大内存负荷的场景下如果仍能保持功能、性能, 则证明被测软件不会用到这部分内存, 说明内存余量不小于这个值。具体步骤:
(1) 根据内存余量要求和可用内存总量, 计算要求的内存余量的具体大小 (KB或MB) 。
(2) 在开发编译环境中, 修改被测软件, 增加一个任务。此任务通过静态内存申请语句calloc () 申请步骤 (1) 中计算得到的空间大小, 保持能被调度, 重新编译运行被测软件。
(3) 将被测软件运行于最大内存负荷的场景中, 并检查相关功能性能是否不受影响。
使用该方法时应注意:为保证实时性, 应将新增任务的优先级设为最低, 但任务优先级过低可能会导致无法被调度;可将其优先级设置为与原有任务中最低优先级任务相同;必须使用静态分配内存的内存申请语句, 以确保内存不会被系统回收, 如malloc就可能会被回收;保证该任务可被调度, 建议在申请内存之后使用while (1) 死循环来保持任务活跃, 最好在while (1) 中增加打印语句来观察是否被调度;测试运行时必须将被测软件运行在最大内存负荷的场景, 否则影响置信度。
逆向证明法插桩的示例代码如下:
3.1 优缺点
逆向证明法优点:
(1) 置信度较高, 因为是对实际运行的被测软件进行测试。
(2) 数据分析工作量小。
缺点:
(1) 需要修改被测软件, 可能影响被测软件的时序而引入问题。
(2) 不能得到精确的余量值。如果需要获取精确的余量值, 可通过不断增加占用的内存, 找到占用至无法正常运行和可以正常运行之间的边界值作为相对准确的余量值;或者先用静态分析法大概估计一个可能的余量值, 然后占用该内存, 如果可运行, 则按一定步进增大占用值重复测试, 如果不可运行, 则按该步进减小占用内存值重复测试, 直至找到内存占用的边界值。
3.2 适用场合
(1) 动态内存分配申请操作的软件。
(2) 软件实时性要求不是特别高, 增加代码不会影响到实时性。
(3) 软件的标准输出无法记录分析, 不能采用动态监控法。
(4) 余量测试精度要求不高。
4 结语
在实际测试实施中, 应根据被测软件实现和应用特点, 结合软件测试环境的支持情况, 以高置信度、高精度、低风险、低工作量为目标, 选择合适的方法进行内存余量测试。
参考文献
[1]Bart Broekman, Edwin Notenboom.嵌入式软件测试[M].北京:电子工业出版社, 2004
[2]彭启琮, 管庆.DSP集成开发环境——CCS及DSP/BIOS的原理与应用[M].北京:电子工业出版社, 2004
嵌入式软件测试流程及方法 篇8
伴随计算机技术不断成熟,人们对软件的各项要求也在提升。作为保障软件各项要求的有效方法,软件测试已经被越来越多的人重视。目前,根据统计测试在软件开发的总成本中占30% 到50%。近些年,嵌入式软件越来越多的应用在生活、生产等各领域,但由于嵌入式软件本身的特点,例如实时性、输入 / 输出通道较少、内存不够丰富、开发工具比较昂贵、CPU种类较多、与硬件密切相关等原因,测试嵌入式软件比一般的软件相对更复杂,因此我们需要找到一种高效的测试方法来提高嵌入式软件质量。
1 嵌入式软件
嵌入式软件的最大特点是专用性,它只在需求规定的硬件平台上才能执行,一般情况下嵌入式软件的应用平台和开发平台是分开的。
嵌入式软件和普通的计算机软件相比存在特殊性,主要体现在以下几方面 :(1)一般嵌入式软件都规模较小,大多在几MB之内,但是开发过程中的难度却较大,通常是桌面机上来开发,而在目标机上去运行。在嵌入式软件的开发过程中要将不同的工具和开发手段灵活的运用,所开发的软件一般包括驱动程序、初始化程序、应用程序以及测试程序等。(2)嵌入式软件在上电后到进行正常的工作状态只需要几十秒的时间,大多数上电以后直接运行是因为嵌入式软件提前已经被固化在Flash中,或是由Flash调入内存以后直接运行,或是被存在电子盘里,上电以后较快的调到RAM中来运行。(3)嵌入式软件不论内部系统在何种状态下,都应能对在较短的时间内对外部的事件做出相应的反应 ;需要有自动复位和出错处理的功能,可以在死机或者运行出错时自动恢复到死机或者运行出错前的状态 ;能够处理异步的并发事件。(4)嵌入式软件是由操作系统以及应用程序两类型软件紧密的结合在一起组成的一体化程序。(5)嵌入式软件的开发平台、运行平台这两个平台是不同的 , 开发是在宿主机上 , 而运行在目标机上。
鉴于嵌入式软件的特殊性,以及目前在嵌入式领域的应用系统越来越复杂 , 而且硬件的发展日趋稳定,但软件的故障却越来越突出,因此软件测试才不断被人们接受并重视,也有更多的人意识到嵌入式软件测试的重要性,人们也在有序的开展测试的工作,但仍缺少一个有效的指导方法,这样导致的后果是计划性差、经费和进度都不受控、无法保证有效性,因此我们需要制订一个有效的嵌入式软件测试流程。
2 嵌入式软件测试流程
软件测试即在预先设定好的条件下操作程序,尽可能多的找出错误(这里的错误指的是实际结果和预期结果的偏离),并对软件整体进行评估。
软件通常是数据、程序以及文档构成,所以测试软件就是对构成软件的数据、程序以及文档进行测试。
在软件的整个生命周期过程中一般有四个级别的测试,分别为单元测试、部件测试(也叫集成测试)、配置项测试和系统测试。软件生命周期开发过程模型见图1。
单元测试是对程序当中的函数、单个子程序或过程进行测试的过程。也就是说,在开始的时候并不是测试整个程序,而是集中注意力测试构成程序的较小的模块。单元测试的依据是软件详细设计说明,目的是测试是否每一个软件单元都能实现详细设计说明中所要求的功能、接口、性能及其它设计约束,发现可能存在于软件单元中的错误。
部件测试的对象是相关单元的组装过程及组装后得到的软件部件,目的是验证软件单元与软件部件之间的接口关系,并检验软件部件是否满足概要设计的要求。
配置项测试的对象是软件配置项,软件配置项是可以满足用户部分最终功能且为了可以独立配置管理设计的一组软件,常见的软件配置项有模块、子系统等。配置项测试的依据是软件需求规格说明,目的是验证软件是否满足软件需求中所要求的功能、性能、接口、余量等。
系统测试是针对模块和配置项的集合,全部的子系统,并在真实的环境中进行测试。系统测试的重点是新研的软件配置项集合,依据是软件研制任务书,目的是检验软件在真实环境下所有的软件配置项是否能和系统连接正确,并满足软件研制任务书规定的各项功能、性能等。
测试级别的选择是依据软件的类型、规模、安全性等级,在各级别的测试中都包括测试策划、测试设计与实现、测试执行、测试总结四个过程。
首先,在测试策划阶段要先编制测试计划,在测试计划中应明确测试的内容、测试的基本方法、测试充分性要求、测试的技术需求和资源、测试进度的计划等。
其实,在测试设计与实现阶段需要编制测试说明,基中包含测试数据、测试用例、测试用例的执行顺序、测试环境等。测试说明编制完成后应该由相关的专家进行预审和会议评审。
再次,在测试前准备工作都就绪后,开始执行测试用例,并在测试过程中记录测试的数据及现象,分析判定测试的结果,根据不同的判定结果采取相应措施。
最后,进行测试总结,完成测试报告。测试报告中包括测试效果以及被测软件的评估、被测试软件的状态。
3 嵌入式软件测试方法
测试方法一般分为静态测试和动态测试。静态测试包括依据检查单对文档进行检查,人工或借助工具进行静态分析、代码审查。动态测试分为白盒测试和黑盒测试。
文档审查是检查软件研制任务书、软件需求规格说明、软件设计说明等文档的准确性、一致性和完整性。静态分析是采用Test BED等工具对软件进行数据流分析、控制流分析、表达式分析和接口分析。代码审查是依据所使用语言的编码规范确定的检查单来检查检查代码执行标准的情况、代码和设计的一致性、代码结构的合理性、代码逻辑表达的正确性以及代码的可读性。
白盒测试方法包括程序插桩、控制流测试、数据流测试,黑盒测试方法包括功能分解、判定表、因果图、边界值分析、随机测试、猜错法等。单元测试一般采用白盒为主黑盒辅助的方法,部件测试通常采用黑盒测试为主白盒辅助的方法,配置项和系统测试则通常采用纯黑盒的测试方法。
整个测试过程中最关键的因素是测试用例,测试用例是否准确和全面决定着测试的有效性。测试用例的设计原则是基于需求和测试方法,兼顾测试充分性和效率,并且可重复使用。测试用例的要素包含 :名称和标识、测试追踪、用例说明、测试初始化要求、测试输入、期望的测试结果、测试通过准则等。
一般情况下测试人员在测试过程中发现的软件缺陷由开发人员来解决,修改完成后再由测试人员进行回归,直到没有发现新的缺陷。
4 嵌入式软件测试实例
某软件的输入数据有马赫数mach和高度h。马赫数的范围为 [0 M,1.6M],是通过总线传输数据,最小分辨为0.1。高度的范围为 [-300m,12000 m],为整型数据。
通过分析上述软件有两个功能点马赫数和高度的输入,可分别输入两个数据的正常测试点、边界测试点和异常测试点,见表1。
测试人员在测试时输入上述测试点进行测试,并查看实际的输出结果是否符合预期,对不符合预期的情况判断是软件还是文档的问题,与开发人员进行交流确定后由开发人员修改,完成测试总结。
5 结语
嵌入式软件测试为软件测试的一种,多数的软件测试理论、流程和方法都能用于嵌入式软件测试,但由于嵌入式软件实时性的特点,使嵌入式软件也有独特性。本文中结合了嵌入式软件特点,分析了嵌入式软件的测试流程和测试方法,并通过一个简单的测试实例来验证。不论进行什么软件测试,要想测试工作开展顺利,首先都应先进行测试需求分析,针对需求确定执行哪几个级别的测试并制订测试计划、测试说明等,最终的目的是保证软件的质量。
摘要:随着嵌入式软件的快速发展,高效的嵌入式软件测试就越来越重要。本文中结合了嵌入式软件特点,分析了嵌入式软件的测试流程和测试方法,并通过一个简单的测试实例来验证测试的全面性和有效性。
嵌入式动态Web网页实现方法探究 篇9
在嵌入式系统中内置Web管理功能是其一大发展方向, 随着人们对这种功能和效果的要求越来越高, 动态网页技术在嵌入式Web技术中也显得越来越重要。然而由于嵌入式系统中系统资源和处理能力的限制, 难以部署复杂且功能强大的Web服务器。而类似BOA这种体积小, 结构简单, 易移植的Web服务器非常适合于各种嵌入式系统。
1 动态网页生成方法
目前在BOA服务器下实现动态网页主要有CGI、CSP、AJAX、自定义标签及标签预处理等四种方法[1,2], 下面分别对其性能进行比较。
方法一:CGI
CGI (通用网关接口) 定义了Web服务器与CGI脚本之间的接口标准, Web服务器在接收到客户端传送过来的信息后, 启动所指定的CGI脚本, CGI脚本从环境变量或者标准输入中获取信息, 执行相关动作后, 负责整个HTML页面的生成, 并将页面返回给浏览器。最常用的方法是用C语言实现CGI脚本, 用printf函数输出HTML代码, 包括HTML头。方法简单, 但会使得CGI代码混乱不堪, 特别是HTML页面多且复杂时, CGI方法就显得笨拙, 代码比较混乱, 较大的系统难以组织。
方法二:CSP、页面预处理
CGI的缺点是C代码中嵌入HTML页面[3], 可以改变一种思路:在HTML中嵌入C语句。这样做的好处是使代码容易阅读和修改, 因为动态网页中大量的是HTML脚本, 大家熟知的ASP的写法也类似是这样的。但这种方法是和ASP的原理是完全不同, 它先要编译成CGI脚本, 而ASP引擎运行时来处理这些嵌入的代码。所以这种方法需要一套预处理的工具和手段。
eyBuild是xxx公司的一套解决方案[4], 是一套软件工具集, 提供了所谓CSP的语法及页面预处理, 可以将图片等资源文件和所有HTML文件编译成一个CGI文件, 大大节省存储空间, 非常适合嵌入式Web系统。
这种方法本质仍是使用CGI, 优点是速度快, 执行效率高, 这在各种资源都十分有限的嵌入式系统中很重要。但这种方法虽对第一种方法有改进提高, 但仍有缺点:需页面预处理, 需开发页面预处理工具或依赖于相关的软件;另外一个简单数据的更新, 也会使整个页面重新生成, 重新传送。
方法三:自定义标签及标签预处理
参考大型Web服务器的做法, 在HTML页面中, 加入自己定义的标签, 例如<%S|DATA%>等。增强嵌入式Web服务器功能, 当浏览器向服务器请求页面时, Web服务器读取页面内容, 将自定义标签进行运算和替换等操作, 然后再将处理过的页面传给浏览器。这种方法客户端和服务器的交互和CGI的原理一致, 只是在服务器生成页面时, 静态不变的部分保持不变, 服务器只负责生成动态更新的部分, 再把它加入到HTML页面中。
这种方法页面简洁明了, 但所有页面的静态的动态的部分, 都会被服务器读取和分析, 检查是否包含自定义标签, 增加了系统开销。另外需要自己设计标签, 并增强Web服务器使之能够解析自定义的标签, 要求较高。
方法四: AJAX技术
前面三种方法有两个共同的缺点:一小部分的数据更新, 也会使整个页面重新生成并全部重传;都是由服务器来完成, 对于资源和处理能力紧张的嵌入式Web服务器来说也构成一种压力。目前在Web应用开发中, AJAX是一种非常流行的局部动态网页刷新技术, 考虑借鉴这种技术的思路可以比较好的解决在嵌入式系统中动态网页生成的很多问题。
AJAX指异步JavaScript及XML (Asynchronous JavaScript And XML) , AJAX不是一种新的编程语言, 而是一种用于创建更好更快以及交互性更强的Web 应用程序的技术。AJAX主要有JavaScript、XMLHTTPREQUEST、XML三部分组成, 其中JavaScript用于页面数据传递、刷新局部页面;XMLHTTPREQUEST用于向服务器提交请求, 与 服务器响 应;XML是服务器返回数据的格式。使用AJAX技术的Web服务器并没有生成动态页面, 仅仅是通过浏览器支持JavaScript刷新了页面的数据。
与传统的Web应用通过表单传递用户信息、服务器回传整个页面不同, AJAX应用可以仅向服务器发送并取回必需的数据, 因此在服务器和浏览器之间交换的数据大量减少, 结果能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成, 所以Web服务器的处理时间也减少了。AJAX的最大优点, 就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作, 并避免了在网络上发送那些没有改变过的信息。
在BOA服务器上是不能支持XMLHTTPREQUEST发出的请求, 为了解决这个问题, 仍可以用原始的CGI技术来实现刷新请求的传送和相应。另外也不一定按照XML格式来携带数据, 可以自定义数据格式。这样不需要实现页面预处理, 也不需要改进BOA服务器实现自定义标签及标签处理引擎功能, 较好地实现了动态页面的功能, 而且减少了数据传输的开销, 减轻了服务器的压力。
2 结束语
本文根据BOA服务器下动态网页生成的技术实践, 分析比较了四种动态网页的生成方法。在不同的应用中, 可根据需要选用适当的方法来实现。AJAX是一种性能好且简单的动态网页生成技术, 其技术思路用于嵌入Web系统中是一种不错的选择。另外, 随着嵌入式系统的资源越来越丰富, 移植能够支持ASP、JSP、PHP技术的服务器已经成为可能, 这也为嵌入式系统动态网页的生成提供了另外的一种思路。
摘要:根据BOA服务器下实现动态网页的具体情况, 分析比较了CGI、CSP、AJAX、自定义标签及标签预处理等四种动态网页的生成方案, 得出AJAX是一种性能好且简单的动态网页生成技术, 其技术思路很适合应用于嵌入式Web系统中。
关键词:BOA服务器,CGI,CSP,AJAX,自定义标签
参考文献
[1]旬启峰.基于嵌入式WEB服务器动态生成网页的方法探讨[J].甘肃科技, 2007.
[2]谢仕义, 徐兵.嵌入式Web服务器的设计及其GUI实现[J].计算机工程与设计, 2007.
[3]高云鹏.嵌入式Web服务器的研究与实现[D].北京:北京邮电大学, 2004.
嵌入式智能系统底电流的调试方法 篇10
现在嵌入式智能系统的软件功能越来越复杂,接的外围设备也越来越多,导致便携嵌入式设备耗电惊人。人们对便携式嵌入式智能系统续航能力的要求愈加强烈,由于便携设备的特点是便于移动,所以不适合配有大容量大体积的电池。这样嵌入式智能系统电能消耗和供给之间产生了矛盾。为了解决这个矛盾,只能从系统的耗电角度考虑节省更多的电能。现在很多嵌入式软件系统都有电源管理功能,系统的硬件进行能耗管理,可是面对多种外围设备和丰富的软件资源都在正常工作的情况下,难以获得整个系统休眠时的最低电流---底电流,本文介绍一种能够较快并准确获得系统底电流的方法。本文使用INTEL PXA270芯片组成的嵌入式系统为例,通过该方法获得的底电流,能够作为系统休眠的底电流的标准,对比出系统电源管理的不当之处。
2、嵌入式系统的耗电分析
2.1 PXA270嵌入式系统功耗计算公式
是文献[3]提供的PXA270功耗与电压、电流、频率关系的表达式。但是,半导体器件工作时还存在内部漏电流做功,这部分功耗也应该计算在内。功耗的计算公式应为:
P是单位时间内硬件系统总的功耗。PL是单位时间内半导体原件工作时产生的漏电流的功耗,这个功耗对于给定的半导体原件来说是无法改变的。正常的供电情况下即V一定,系统的功耗和系统电流C、系统频率F成正比。所以,通过改变电流C,和系统的工作频率F,就能够改变系统的整个功耗。
2.2 底电流的调试策略
要找到系统电流的最低值,首先,要简化系统的硬件。制作最小系统,在最小系统运行时得到真实的底电流。最小系统具备嵌入式系统正常运行所使用的电压、时钟和存储器这些基础的硬件资源。第二,要简化系统软件。在功能丰富的系统软件正常运行的情况下,让系统睡眠,难免会有对设备和软件控制失误和不当的地方,影响系统的底电流。为了排除软件复杂度造成的影响,我们选择在Bootloder启动代码中调试底电流。
2.3 Bootloader启动程序中的电流调试
2.3.1 Bootloader启动代码的修改
这里对完整的Bootloader功能做了截取,重点是去掉加载内核和主程序加载,主函数入口跳转代码。因为,我们的目的是在Bootloader的环境下调试硬件,不需要加载和启动系统代码。同时在Bootloader中加入了PXA270的睡眠唤醒代码。Bootloader中的代码均为汇编语言编写。修改后的Bootloader流程如图1所示:
2.3.2 睡眠配置
PXA270芯片有多种电源状态,本文关注的是SLEEP睡眠模式。实现的方式是,在芯片的特权模式下向PWRMODE电源模式寄存器中写入模式对应的值,PXA270立刻进入低功耗状态。需配置的有关睡眠模式的寄存器有:待机配置寄存器(PSTR)、通用输入输出状态寄存器(PGSR)、芯片电源模式寄存器(PWRMODE)。
2.3.3 唤醒配置
PXA270在SLEEP模式下醒来是睡眠退出复位操作。所以,Bootloader启动程序中对复位的原因进行了判断和处理。PXA270芯片的唤醒源有:GPIO,RTC alarm中断等事件,根据文献[2]唤醒源配置寄存器有:唤醒源设置寄存器(PWER)。
3、实验结果
3.1 PXA270最小系统不同工作模式实测电流
使用数字电源供电,对PXA270最小系统两种种工作模式进行电流测试,实验数据如表1所示:
3.2 唤醒测试
唤醒测试,使用周期时钟事件(Periodic RTC alarm)作为唤醒源对PXA270最小系统进行定时睡眠和唤醒操作。睡眠和唤醒的时间比为4:1。
3.3 结果分析
整个最小系统在SLEEP状态下的工作单元是PXA270的时钟、电源管理和处于自刷新状态的片外SDRAM。当PXA270带有外围设备,由软件控制进入SLEEP时,在正确关闭外围设备并且无板间漏电的情况下,整个系统工作的也是PXA270的时钟、电源管理和处于自刷新状态的片外SDRAM。这和最小系统的SLEEP状态下的工作单元是完全相同的。所以,最小系统的SLEEP电流值和复杂系统SLEEP状态下电流值是一样的。我们实际上调试的就是复杂系统正确进入SLEEP这种低功耗状态下所能达到的电流值。
4、结语
在嵌入式系统软件内核程序和应用程序运行后,对系统的底电流进行调试是很难获得准确值的。本文从最简单的硬件系统和功能最少的软件着手,对系统的低功耗状态进行调试获得系统实际能够到达的最小电流值,并以此作为复杂系统的最小电流值的标准。
摘要:本文针对如何获得嵌入式系统低功耗状态下的准确电流值的方法进行了阐述和验证。硬件使用Intel PXA270芯片构成的最小系统为基础,提出了软件先在bootloader中进行系统进入低功耗状态和退出低功耗状态的调试方法。分析了最小系统睡眠时功耗值与配有其它外围设备的嵌入式系统睡眠时功耗值相同的原因。
关键词:嵌入式系统,低功耗,软件,硬件,启动程序,调试方法
参考文献
[1]Stanislav Pavlov;Pavel Belvesky.Windows Embedded CE 6.0Fundamentals.[M]:Washington,Microsoft?Press,2008.
[2]Intel?PXA27x Processor Family Developer’s Manual.[M]April2004,Order Number:280000-001.