一种基于模型的嵌入式系统流延时属性测试方法

文档序号:6337031阅读:735来源:国知局
专利名称:一种基于模型的嵌入式系统流延时属性测试方法
技术领域
本发明涉及一种基于模型的嵌入式系统流延时属性测试方法,是一种嵌入式系统 模型中流延时属性的测试技术。
背景技术
随着嵌入式系统的快速发展,嵌入式系统的复杂性、规模和质量要求日益增长,除 了对系统本身的功能有基本需求,对于系统的非功能属性也有着越来越高的要求。原有的 嵌入式软件开发方法存在着很多弊端,各种错误在开发过程中逐层积累,加大了软件测试 的技术难度和工作负荷,已经不能满足现在的嵌入式系统开发的质量保障需求。对象管 理组织(Object Management Group,0MG)对此提出了模型驱动结构方法(Model Driven Architecture, MDA),将模型这个统一的设计架构贯穿于整个开发过程中,并把模型作为开 发过程的核心,在系统设计初期对系统的属性进行分析、验证,并可由软件模型直接生成代 码和测试用例,大大提高了软件开发效率和软件质量,缩短了开发的周期。为了适应这样的发展趋势,美国自动化工程师协会(Society of Automotive Engineers, SAE)提出了架构分析与设计语言AADL。AADL在模型级对系统架构进行描述, 将进程、线程等软件概念抽象为软件构件,将处理器等实体抽象为硬件构件,通过构件及其 之间的交互描述嵌入式系统的拓扑架构,在构件之上可以定义系统属性和系统行为,进而 描述系统的运行。AADL作为一种半形式化建模语言,能在系统设计初期为设计者提供系统 功能、非功能的分析与检测方法。按照验证方式划分,面向模型的验证方法可以分为静态架 构分析和动态测试。实时性是衡量嵌入式系统功能和行为的重要指标之一,任何不满足实 时性约束的模型设计都会对系统性能造成重大影响。AADL规范通过信息流描述各构件之间 数据处理和通信等系统抽象信息路径,在系统级度量运行过程中构件间交互的实时性。嵌入式系统对实时性、可靠性等非功能属性有着极高的要求。目前业界对于AADL 模型实时性的验证主要采用静态分析的方法,将AADL模型结构及属性转化为成熟的数学 模型进行推理计算,其中比较著名的有法国Brest大学的LISyC团队采用Ada语言开 发的实时调度分析工具Cheddar,用于检验实时系统中的时间方面的约束;美国Fremont Associates开发的Furness工具集将模型转换为实时进程代数来检测状态空间是否有违 反时间需求的情况;卡耐基梅隆大学软件工程研究所(Software Engineering Institute, SEI)基于 Eclipse 平台开发了 的开源 AADL 设计工具 OSATE (the Open Source AADL Tool Environment),通过将构件时间属性按照流路径进行整合并与流的时间属性进行对比,对 信息流传递的实时性进行验证;法国INRIA的Su-Yoimg Lee等人将AADL流转换到统一建 Iflg-W (Unified Modeling Language, UML) ^MARTE(Modeling and Analysis of Real Time and Embedded systems)实时嵌入式系统建模与分析扩展包上进行流延时分析。静态分析的方法一般通过系统模型的状态空间对其进行抽象,在系统运行状态较 多的情况下有状态空间呈指数级爆炸的可能,无法对大规模复杂系统进行分析验证。另外, 静态分析方法并不能模拟运行系统,只是在逻辑的层面对模型设计进行检查,无法检测系
4统在具体硬件环境下运行时的状态及其动态属性变化,对于实时性、调度分析等系统运行 时属性,静态分析的方法存在着不精确的问题。动态测试的方法弥补了静态分析方法的缺陷。动态测试不同于静态分析,动态仿 真系统模型需要搭建软硬件协同仿真平台。静态验证的方法对AADL模型中的构件和属性 进行抽象提取,而动态测试的方法则需要向架构描述中添加仿真所必需的运行属性,如调 度实现、系统时钟和线程封装等辅助功能和属性。为了实现对AADL模型实时性的动态测 试,需要先将AADL模型转化成为可在仿真引擎上运行的系统实例。动态测试借助仿真平台,将待评估的架构模型元素转换为仿真平台可识别的测试 模型,对嵌入式系统的性能进行动态评估。动态测试过程通过构建测试用例,使系统实例在 仿真平台上模拟运行,在系统模拟运行的过程中对系统行为和动态属性值进行监控检测, 并对系统运行的行为及结果进行预期分析,以确认其是否满足设计需求。对比静态分析的 方法,动态测试不需要考虑系统的状态空间存储和遍历,进而回避了状态空间爆炸的问题, 并且针对实时性、调度等运行时的非功能属性,做到了精确和可信的测试。目前存在的问题 是,AADL模型抽象程度高,现有方法对AADL系统的模拟程度不够精确,对数据在任务和设 备构件之间的传输没有相应的时间属性测试等。

发明内容
要解决的技术问题为了避免现有技术的不足之处,本发明提出一种基于模型的嵌入式系统流延时属 性测试方法。本发明的思想在于基于SystemC硬件描述语言搭建AADL模型仿真测试平台,将 AADL模型转换为测试平台可执行的系统实例,并对流中的构件序列和端口序列进行抽象和 映射,将AADL模型中的流转换为C++描述的测试模型,在系统实例仿真执行的过程中完成 对AADL流延时属性的测试,并对测试结果进行分析与评估。技术方案一种基于模型的嵌入式系统流延时属性测试方法,其特征在于步骤如下步骤1 利用Eclipse平台的OSTAE工具对需要评估的AADL系统进行实例化操作, 得到AADL实例模型;步骤2 将步骤1中的AADL实例模型转换为基于SystemC描述的实例模型,转换 方法如下将AADL软件构件转换为C++格式的用户代码;将AADL硬件构件转换为SystemC格式的硬件实例;将AADL系统构件转换为C++描述的操作系统对象实例;将步骤1中AADL实例模型中的流转换为C++格式的测试模型,转换方法如下将流中的各AADL构件转换为C++格式的实例;将流中的各端口转换为C++格式的端口实例;将流中的各链接、路径转换为C++格式的流路径实例;步骤3 将步骤2中的用户代码、硬件实例和操作系统对象实例组合成为可执行的 系统实例,组合方法如下
将用户代码用SystemC可识别的快速线程标准函数封装成为线程,添加至操作系统对象实例的线程管理结构中;将操作系统对象实例的线程管理结构中的线程作为硬件实例中的CPU实例的运 行线程;将硬件实例中的总线实例的端口与其他硬件实例的端口相连接;将CPU实例与总线实例设为主动实例,其他与其相连的硬件实例设为从动实例, 使前者够调用后者的功能;步骤4 将步骤2中的C++格式描述的测试模型的端口实例的调用方法,添加至端 口所属的步骤3中的系统实例的构件实例中;步骤5 用SystemC提供的仿真函数驱动步骤3中得到的系统实例和步骤2中得 到的测试模型,并在系统实例和测试模型运行的过程中对各构件端口的通信时间进行监测 和记录;步骤6 在步骤5的仿真运行过程结束后,将步骤5中监测和记录的各构件端口的 通信时间赋值给构件实例的通信时间数据结构,求得构件实例输出数据与输入数据时间的 差值,将差值赋值给表示延时的数据结构,并按照步骤2中的测试模型中的计算公式计算 各层级流延时的值;步骤7 当步骤2中测试模型的各层级流的构件序列符合步骤1中的实例模型的 描述时,检查测试模型中构件间通信两端的端口实例;当通信端两端口为相同类型,且连接顺序为输入端口与输出端口的搭配情况时, 检查测试模型中各层级流的流延时值;当各层级流的流延时值按照步骤1的实例模型中的信息流的顺序形成单调时序, 并且无不符合步骤1的实例模型设计约束时,得到流延时属性测试结果正确的结论;当上述条件成立时,证明流延时符合模型设计需求;当上述各条件有任何一项不满足,得到流延时属性测试结果错误的结论,证明流 延时不符合模型设计需求;至此获得全部测试结果。有益效果本发明提出的一种基于模型的嵌入式系统流延时属性测试方法,基于SystemC硬 件描述语言搭建AADL模型仿真测试平台,将AADL模型转换为测试平台可执行的系统实例, 并对流中的构件序列和端口序列进行抽象和映射,将AADL模型中的流转换为C++描述的测 试模型,在系统实例仿真执行的过程中完成对AADL流延时属性的测试,并对测试结果进行 分析与评估。能够在模型的设计阶段动态测试AADL模型的流延时属性,并根据测试结果迭 代构造和精化设计模型,以便尽早发现设计模型中存在的问题,提高AADL模型设计初期的 开发效率。


图1 :AADL流规范图形表示;图2 =AADL流延时动态测试流程图;图3 控制系统AADL模型架构图4 控制系统流延时测试结果。
具体实施例方式现结合实施例、附图对本发明作进一步描述该实例描述了一个控制系统,包括一个主系统构件,一个主进程构件,七个功能线 程构件,处理器、总线、内存,以及传感器和作动器各一个。控制系统包含系统构件和所有的 硬件构件共六个子构件,系统构件绑定在处理器和内存上,传感器、作动器、处理器和内存 均包含请求总线访问属性,其相互通信通过总线来完成。进程构件为系统构件的子构件,包 含七个线程子构件。其中,按钮盘线程与仲裁线程、仲裁线程与主线程、主线程与备用线程 间通过事件数据端口链接进行通信。图3为控制系统AADL模型架构图。在控制系统的AADL架构中定义一个流按钮盘线程为流源,备用线程为流接收 器,其路径包含仲裁线程、主线程以及四个线程间的同级构件链接。本例中流路径并不经过 进程级构件端口和系统级构件端口,所以我们定义系统端到端流为线程级的流路径组合, 即由四个线程的流规范及其之间的链接交替构成。根据步骤1,利用Eclipse平台的OSTAE工具对控制系统的AADL模型进行实例化 操作,得到AADL实例模型。根据步骤2,将步骤1中的AADL实例模型转换为基于SystemC描述的实例模型,将 AADL软件构件转换为C++格式的用户代码,相应代码如下int Mymain(int argc, char** argv);void氺 user—code(void氺){char*argv[] = {" cruise, χ" };Mymain (1, argv);}将AADL硬件构件转换为SystemC格式的硬件实例,相应代码如下UC_TLM_bus_class *bus ;bus = new UC_TLM_bus_class(sc_gen_unique_name(〃 HAL" ),100000000);bus- > set_memory_address(RAM_START);UC_hw_memory*hcimem = new UC_hw_memory(" Hci_Memory" ,0x80000000, 0x80001000,100);UC_hw_memory*ccImem = new UC_hw_memory(" Ccl_Memory" ,0x80001001, 0x80002000,100);engspd_sensor*Hci_Engspd_sensor = new engspd_sensor(" Hci_Engspd_ sensor" ,0x80002001,0x80003000,20000*1000);throttlepos氺Ccl_Throttlepos = newthrottlepos( " Ccl_Throttlepos ", 0x80003001,0x80004000,20000*1000);((UC_master_base*) Hci_Engspd_sensor) _> bind (bus);将AADL系统构件转换为C++描述的操作系统对象实例,相应代码如下rtos = new UC_rtos_class(1);将步骤1中AADL实例模型中的流转换为C++格式的测试模型,流的结构图示如图1所描述,相应代码如下 rtos- > port_list = new port_list_class ();portso = new flow—port_class(0,1, “ Button—Panel_out “ , “ Button— Panel",0);rtos- > port_list- > port_list. push—back(portso);flowsource = new flowsource_class(0, “ Button—Panel“ ,portso);portri = new flow—port—class (0,0, “ Refspf_in,r , “ Refspdir ,0);rtos- > port_list- > port_list. push—back (portri);fpbr = new flowpath_class (" br",“ rtos" ,3,0);fpbr- > port_list. push—back (portso);fpbr- > port_list. push—back (portri);portro = new flow—port_class (1,1,“ Refspd—out",“ Refspd/r,0);rtos- > port_list- > port_list. push—back (portro);fpr = new flowpath_class(" Refspd—flowpath“ , “ Refspd" ,0,1);fpr- > port_list. push—back (portri);fpr- > port_list. push—back (portro);portcli = new flow—port_class(1,0, ” Cruisel_in〃 , ” Cruisel“ ,0);rtos- > port_list- > port_list. push—back(portcli);fprc = new flowpath_class (" rc",“ rtos" ,3,0);fprc- > port_list. push—back (portro);fprc- > port_list. push—back (portcli);portclo = new flow—port_class(1,1, ” Cruisel_out〃 , ” Cruisel“ ,0);rtos- > port_list- > port_list. push—back(portclo);fpcl = new flowpath_class (/r Cruisel_f lowpath/r , “ Cruisel/r ,0,1);fpcl- > port_list. push—back (portcli);fpcl- > port_list. push—back (portclo);portsi = new flow—port—class (1,0, “ Cruise2_in/r , “ Cruise2/r ,0);rtos- > port_list- > port_list. push—back (portsi);fpcc = new flowpath_class (" cc",“ rtos" ,3,0);fpcc- > port_list. push—back (portclo);fpcc- > port_list. push—back (portsi);flowsink = new flowsink—class(1, 〃 Cruise2〃 ,portsi);flowpath = new flowpath_class(" flowpath" , “ rtos" ,3,3);flowpath- > port_list. push—back (portso);flowpath- > port_list. push—back (portri);flowpath- > port_list. push—back (portro);flowpath- > port_list. push—back (portcli);flowpath- > port_list. push—back(portclo);flowpath- > port_list. push—back (portsi);
flowpath- > flowpath_list. push—back(fpbr);flowpath- > flowpath—list· push—back(fpr);flowpath- > flowpath_list. push—back(fprc);flowpath- > flowpath_list. push—back(fpcl);

flowpath- > flowpath_list. push—back(fpcc);flow = new flow—class(" cruise_flow“ , flowsource, flowsink, flowpath);rtos- > flow—list· push—back (flow);根据步骤3,将步骤2中的用户代码、硬件实例和操作系统对象实例组合成为可执 行的系统实例,相应代码如下(水rtos)
- > new—process (user_code,NULL);(*rtos)
- > bind (bus);bus-> bind (hcimem);bus-> bind (cclmem);bus- > bind(Hci—Engspd—sensor);bus- > bind(Ccl_Throttlepos);bus- > generate—memory—map ();根据步骤4,将步骤2中的C++格式描述的测试模型的端口实例的调用方法,添加 至端口所属的步骤3中的系统实例的构件实例中。根据步骤5,用SystemC提供的仿真函数驱动步骤3中得到的系统实例和步骤2中 得到的测试模型,并在系统实例和测试模型运行的过程中对各构件端口的通信时间进行监 测和记录,记录结果如图4所示,ButtoruPanel为按钮板线程,Refspd为仲裁线程,Cruisel 为主线程,Cruise2为备用线程。流路径的深度表示从端到端流开始流路径自顶向下的层 级序号,序号后面的数据依次为该段流路径延时时间、流路径的起始端口、终止端口以及 这两个端口的数据通信时间。从图中我们可以看到,流源和流接收器的对应构件分别为按 钮板线程和备用线程。系统创建了不同深度的两层流路径深度为0的第一层流路径为系 统级端到端流,起始于流源,终止于流接收器;深度为1第二层流路径的为线程级流路径分 解,交替包含3个同级传输链接和2个底层流路径。流路径所覆盖的线程为仲裁线程和主 线程。根据步骤6,在步骤5的仿真运行过程结束后,将步骤5中监测和记录的各构件端 口的通信时间赋值给构件实例的通信时间数据结构,求得构件实例输出数据与输入数据时 间的差值,赋值给表示延时的数据结构,并按照步骤2中的测试模型中的计算公式计算各 层级流延时的值,计算结果如图4中各深度序号后面的数据所示。根据步骤7,当步骤2中测试模型的各层级流的构件序列符合步骤1中的实例模型 的描述,检查测试模型中构件间通信两端的端口实例;当通信端两端口为相同类型,且连接 顺序为输入端口与输出端口的搭配情况,检查测试模型中各层级流的流延时值;当各层级 流的流延时值按照步骤1的实例模型中的信息流的顺序形成单调时序,并且无不符合步骤 1的实例模型设计约束的情况,得到流延时属性测试结果正确的结论,证明流延时符合模型 设计需求,如图4所示。测试结果说明系统端到端流的端口序列与端到端流的流源、流接收器构件序列相匹配;
各同级传输链接和各底层流路径的端口的输入输出类型符合设计逻辑,且端口序 列与构件序列相吻合,下推自动机运行结果正确;其端口序列中存储的发送时间和接收时间符合时刻单调递增的关系,说明信息按 流路径传输正确;线程级同级传输链接的延时值分别为14. 100ms,36. 381ms和56. 406ms,线程级底 层流路径延时分别为Oms和0. OOlms (此处简化任务对数据的处理时间加速仿真过程,并不 影响系统仿 真运行和流延时属性的测试),系统级端到端流延时为106. 888ms,小于约束中 所描述的140ms,测试结果证明流延时满足系统设计需求。至此,已完成对嵌入式系统模型流延时属性的测试。
权利要求
1. 一种基于模型的嵌入式系统流延时属性测试方法,其特征在于步骤如下 步骤1 利用Eclipse平台的OSTAE工具对需要评估的AADL系统进行实例化操作,得 到AADL实例模型;步骤2 将步骤1中的AADL实例模型转换为基于SystemC描述的实例模型,转换方法 如下将AADL软件构件转换为C++格式的用户代码;将AADL硬件构件转换为SystemC格式的硬件实例;将AADL系统构件转换为C++描述的操作系统对象实例;将步骤1中AADL实例模型中的流转换为C++格式的测试模型,转换方法如下将流中的各AADL构件转换为C++格式的实例;将流中的各端口转换为C++格式的端口实例;将流中的各链接、路径转换为C++格式的流路径实例;步骤3 将步骤2中的用户代码、硬件实例和操作系统对象实例组合成为可执行的系统 实例,组合方法如下将用户代码用SystemC可识别的快速线程标准函数封装成为线程,添加至操作系统对 象实例的线程管理结构中;将操作系统对象实例的线程管理结构中的线程作为硬件实例中的CPU实例的运行线程;将硬件实例中的总线实例的端口与其他硬件实例的端口相连接; 将CPU实例与总线实例设为主动实例,其他与其相连的硬件实例设为从动实例,使前 者够调用后者的功能;步骤4 将步骤2中的C++格式描述的测试模型的端口实例的调用方法,添加至端口所 属的步骤3中的系统实例的构件实例中;步骤5 用SystemC提供的仿真函数驱动步骤3中得到的系统实例和步骤2中得到的 测试模型,并在系统实例和测试模型运行的过程中对各构件端口的通信时间进行监测和记 录;步骤6 在步骤5的仿真运行过程结束后,将步骤5中监测和记录的各构件端口的通 信时间赋值给构件实例的通信时间数据结构,求得构件实例输出数据与输入数据时间的差 值,将差值赋值给表示延时的数据结构,并按照步骤2中的测试模型中的计算公式计算各 层级流延时的值;步骤7 当步骤2中测试模型的各层级流的构件序列符合步骤1中的实例模型的描述 时,检查测试模型中构件间通信两端的端口实例;当通信端两端口为相同类型,且连接顺序为输入端口与输出端口的搭配情况时,检查 测试模型中各层级流的流延时值;当各层级流的流延时值按照步骤1的实例模型中的信息流的顺序形成单调时序,并且 无不符合步骤1的实例模型设计约束时,得到流延时属性测试结果正确的结论; 当上述条件成立时,证明流延时符合模型设计需求;当上述各条件有任何一项不满足,得到流延时属性测试结果错误的结论,证明流延时 不符合模型设计需求;至此获得全部测试结果。
全文摘要
本发明涉及一种基于模型的嵌入式系统流延时属性测试方法,其特征在于基于SystemC硬件描述语言搭建AADL模型仿真测试平台,将AADL模型转换为测试平台可执行的系统实例,并对流中的构件序列和端口序列进行抽象和映射,将AADL模型中的流转换为C++描述的测试模型,在系统实例仿真执行的过程中完成对AADL流延时属性的测试,并对测试结果进行分析与评估。能够在模型的设计阶段动态测试AADL模型的流延时属性,并根据测试结果迭代构造和精化设计模型,以便尽早发现设计模型中存在的问题,提高AADL模型设计初期的开发效率。
文档编号G06F11/36GK102073585SQ201010564678
公开日2011年5月25日 申请日期2010年11月25日 优先权日2010年11月25日
发明者张云峰, 张凡, 朱宇峰, 董云卫, 马春燕 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1