基于OSATE环境的AADL项目——简单的项目构建与分析示例

一、背景

本文描述了一个非常简单的AADL项目的构建,以及一个示例项目的分析过程。本文主要记录了OSATE工具环境的一些基本操作,适用于刚刚了解OSATE之后,对于整个工具环境无从下手的小白。

因为基于OSATE环境的AADL项目的构建和分析的详细示例较少,而我又有这方面的需要。正当我手足无措之时,无意中发现OSATE的用户帮助文档中有关于构建并分析项目的详细过程,因此就写了这篇文章做简要记录。这篇文章的内容主要基于帮助文档,文档中很多细节都被我略过,如果有需要的话自行阅读OSATE的帮助文档以获取详细信息(帮助文档的相关信息本文第三章有详细描述)。

二、简介

1. AADL简介

AADL即体系结构分析和设计语言(Architecture Analysis and Design Language,AADL)。因传统的制造后测试型系统设计方法,在构建当今的嵌入式、软件依赖性系统十分费时费力且成本高。所以,便有了AADL这一模型基软件系统工程框架。AADL 可以通过建模,对诸如性能、可信性、系统安全和数据完整性一类的关键性实时因素,进行简练而严格的分析,并能够在用户工程环境下集成额外建立的客户分析/规范技术,开发完全统一的体系结构模型,从而使得用户能够更容易地构建满足要求的可靠系统。

2. OSATE简介

OSATE (Open Source AADL Tool Environment),即开源 AADL 工具环境,它主要包括三大功能:建模功能、代码生成功能、分析功能。此开源的AADL工具环境官方文档如下。

Welcome to OSATE — OSATE 2.13.0 documentation

本次的AADL项目示例就是以OSATE为基本的开发环境进行的。OSATE本身基于 Eclipse框架 构建,其下载与安装可以参考上述链接的 install 部分。

三、帮助文档

1. 帮助文档的位置

本文的操作流程主要基于OSATE帮助文档。帮助文档可以在Help -> help Contents中找到。

打开帮助文档如下:

2. 帮助文档的主要内容

帮助文档主要包括以下八大模块的内容:

内容内容翻译简介
Workbench User Guide工作台用户指南Eclipse 平台概述。
ALISA User GuideALISA 用户指南架构主导的增量系统保障(Architecture-led Incremental System Assurance ,ALISA)用户指南。这是一个增量生命周期保障工作台,适用于高保障软件依赖系统。它利用模型中的架构抽象来管理跨系统架构多层的需求,并根据这些需求验证系统实现。该工作台补充了以架构为中心的虚拟系统集成工作台的功能,用于开发此类系统。
EGit DocumentationEGit 文档Git 版本控制参考。
Error Model Annex Documentation错误模型附件文档对安全关键系统进行功能危害评估(FHA)、故障影响分析(类似 FMEA)和故障树分析(FTA)模型 V2(EMV2),以及 OSATE 的分析功能参考。
OSATE API ReferenceOSATE API 参考OSATE 应用程序接口参考。
OSATE Core DocumentationOSATE 核心文档介绍了OSATE 的基本功能,以及如何使用 AADL 模型。
OSATE Graphical Editor DocumentationOSATE 图形编辑器文档图形编辑器的基本功能简介,以及图形编辑器的使用简介。
Scripting User Guide脚本用户指南

EASE 提供脚本支持。允许使用各种语言的脚本与 IDE 交互。
目前支持的脚本引擎:

JavaScript (Rhino)

JavaScript (Nashorn)

Jython

Python via Py4J

Ruby

Groovy

四、AADL项目的构建

1. 创建AADL项目

点击 “File -> New -> AADL Project”

输入项目名,确定项目的存储位置

可以看到,在AADL 导航器视图中已经成功创建该项目。

 注:

Plugin_Contributions 包含了OSATE 中默认可用的所有 AADL 属性集。其子文件夹 Predeclared_Property_Sets 是由 AADL 标准文档指定并由核心 OSATE 环境提供的。其余的为在其他文档中指定并通过 OSATE 插件提供的。

并且,通过在包规范中提供适当的 with 子句,工作区中的任何项目都可以使用 Plugin_Contribution 中的属性集。(不需要将这些内容复制到项目中就能够使用)。

2. 创建AADL包

选择刚刚创建的项目后,点击“File -> New -> AADL Package”。

为包命名。

点击完成,即可看到:

 编辑并保存,示例代码如下所示。

package my_aadl_model
publicprocess MyProcessend MyProcess;system MySystemend MySystem;system implementation MySystem.isubcomponentssub1: process MyProcess; end MySystem.i;end my_aadl_model;

3.实例化模型

大多数分析都是在系统的实例模型(instance models)上执行的。实例模型代表了系统的完整嵌套架构。通常,实例模型将从系统实现分类器创建。但 OSATE 允许从除子程序(subprogram)和子程序组(subprogram group)之外的 所有实现分类器 创建实例模型。

可以通过 以下 3种 方式创建实例模型:

3.1 在 AADL 编辑器大纲视图(Outline)的右键菜单。

在outline视图中选择一个或多个组件分类器,右键选择实例化(Instantiate)。只要没有任何分类器是子程序,该命令就会在上下文菜单中处于活动状态。

 3.2 从 AADL 导航器视图的右键菜单。

在视图中选择一个或多个组件分类器,右键菜单中选择实例化(Instantiate)。分类器可以来自不同的项目,只要没有任何分类器是子程序,该命令就会在上下文菜单中处于活动状态。

3.3  从 OSATE -> Instantiate 实例化。

首先在大纲视图或 AADL 导航器视图中选中一个或多个组件分类器(分类器可以来自不同的项目,但不能是子程序),然后选择 OSATE -> Instantiate 。

3.4 创建示例系统的实例模型

可以使用3.1-3.4所示的任何一种方法进行实例化,这里我们使用第一种方式来完成刚刚编写的示例系统的实力模型创建。

在右侧的 Outline视图中选择  System MySystem.i 然后点击右键菜单中的 Instantiate。

点击 ok。

一般来说,实例模型被创建并放置在名为instances的目录中,该目录与包含根组件分类器的.aadl文件位于同一目录中。如果该目录尚不存在,则创建该目录。仅当状态为“正常”时才会创建该文件。刚刚生成的模型 my_aadl_model_MySystem_i_Instance.aaxl2 如下图所示:

五、模型分析演示——以latency-case-study为例

在获得系统模型后,可以使用 OSATE 模型对模型进行分析,以确认设计是否满足预期标准。这里以系统的端到端流延迟分析作为演示(延迟分析插件随 OSATE 预装)。本节采用一个示例项目作为模型分析的操作演示。

1. 背景知识

延迟分析由OSATE延迟分析插件提供。延迟分析是在包括端到端流的AADL模型上执行的,它会计算最小和最大延迟,并会考虑到各种延迟影响因素。它基于分配给不同架构元素的延迟预算以及架构设计发展过程中的设计信息来实现这一点。AADL模型的范围可以从具有不同分解级别的延迟预算的功能架构,到具有映射到支持分区的硬件平台的执行速率的任务和通信架构。分析的保真度由AADL模型中的详细细节决定。 

延迟分析的结果以csv、xls等表格格式呈现。延迟分析可以通过一些首选项设置进行参数化,这些首选项设置允许用户探索架构变化,而无需更改模型中的细节,例如系统是否表现为异步系统或同步系统。

2. 获取项目源代码

该项目是GitHub上的一个示例项目,以下为项目的链接。GitHub - osate/examples: Examples and case-study that use OSATE

本次使用的是示例中的 “latency-case-study”项目。可以直接从GitHub或以下链接下载。

https://download.csdn.net/download/qq_44667259/88366885 (免费下载)

3. 打开项目

为了便于项目的管理,这里可以将latency-case-study项目复制到自己设置的工作目录中。

点击File -> Open Projects from File System,

设置项目文件的路径,点击 Finish 完成。

可以看到,项目已被打开。

4.实例化模型

在 integration.aadl 中找到 System Implementation integration.software_integrated 。单击右键并选择实例化,如下图所示。

点击 OK 。

可以看到,实例模型已经被生成,该文件被放置到 instances 目录下。

5.分析模型

左键单击选中 integration_integration_software_integrated_Instance.aaxl2 ,然后点击 Analyses -> Timing -> Check Flow Latency 。

调用上述延迟分析时,会显示一个配置对话框,如下图所示。这用于选择影响延迟计算方式的设置,允许用户在不改变模型的情况下沿着不同的维度进行研究

 配置对话框各个选项的含义如下:

- System type:

        异步系统(AS):组件时间不同步,即调度可能存在时移。

        同步系统(SS):组件时间同步,即跨系统的定期调度是一致的。

- Partition output policy:

        用于反映因分区系统中不同的内部通信策略而造成的分区间通信延迟贡献。

        分区结束(PE):假设在任务发送数据的分区末尾有可用的分区间连接。如果分区 A 中的任务向分区 B 中的任务发送数据,则如果分区 B 在分区 A 之后执行,后者将在同一主帧中接收数据。

        主帧延迟 (MF):假设分区间连接在主帧末尾刷新/实现。如果分区 A 中的任务向分区 B 中的任务发送数据,则无论分区 A 或分区 B 的执行顺序如何,只有在所有剩余分区完成后,新数据才会可用。

- For worst-case processing time use:

        用户可以在 截止时间 和 最坏情况计算执行时间 之间选择作为最坏情况处理时间。对于最佳情况,我们始终使用计算执行时间。此设置仅在没有可用响应时间时才相关。

        截止日期 (DL):截止日期表示假设任务是可安排的最坏情况下的完成时间。

        最大计算执行时间 (ET):在不考虑资源调度的情况下考虑处理时间时,最大计算执行时间非常有用。

- For best-case queuing latency on incoming ports:

        影响如何确定最佳情况排队延迟。对于最坏的情况,我们总是使用完整队列。

        假设队列为空 (EQ):没有延迟,因为假设队列为空。
        假设队列已满 (FQ):使用最小计算执行时间乘以队列大小来确定最佳情况排队时间。

- Disable queuing latency in the results:

        确定是否报告异步总线的最坏情况排队延迟。

        禁用:最坏情况下的排队延迟始终报告为0。

        启用:报告最坏情况的排队延迟。 

此处可以自定义或按照默认选项进行。

延迟分析完成后,报告结果(采用三种不同的格式)将被放在 instances 文件夹的 reports 子文件夹下,同时,我们也可以看到输出的错误信息(端到端流 etef0 和 etef1 未能满足预期的延迟约束)。

6. 延迟分析结果报告

对于 .csv 和 .xls等文件,可能无法直接在eclipse中打开,可以自行添加打开方式。在Window中选择 Preferences。

在General -> Editors -> File Associations 下,点击 Add。

输入 *.csv (先以csv文件演示) 

选中刚刚添加的 *.csv ,然后点击关联编辑器的 Add

 选择外部程序,浏览并选择指定的程序并点击OK。

将 *.xls 也按照上述方法添加,然后点击应用并关闭(此处我选择了WPS作为默认的关联编辑器)。

打开以下任意一个生成的报告即可。

文件打开后如下所示,可以看到etef0和etef1的端到端流延迟分析详情:

如有不当或错误之处,恳请您的指正,谢谢!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/140784.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode算法心得——美丽塔 I(HashMap)

大家好,我是晴天学长,hashmap的灵活应用,然后边界的细节处理,需要的小伙伴可以关注支持一下哦!后续会继续更新的。 1) .美丽塔 美丽塔 I 给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴…

Keil 无法烧写程序

问题描述: Keil MDK V5.38 按 F8 键无法烧录程序,提示: Error: Flash Download failed - "Cortex-M7", No Algorithm found for: 08000000H - 080013D3H 解决办法: Debug 工具改为:ST-Link Debugger Debug 的 Conne…

【C++】STL之list深度剖析及模拟实现

目录 前言 一、list 的使用 1、构造函数 2、迭代器 3、增删查改 4、其他函数使用 二、list 的模拟实现 1、节点的创建 2、push_back 和 push_front 3、普通迭代器 4、const 迭代器 5、增删查改(insert、erase、pop_back、pop_front) 6、构造函数和析构函数 6.1、默认构造…

Qt QCustomPlot介绍

介绍 主要介绍qcustomplot及其用法 最新版本:QCustomPlot Patch Release 2.1.1//November 6, 2022 下载:https://www.qcustomplot.com/index.php/download 官网:https://www.qcustomplot.com/index.php 简单使用 mainwindow.h /**************************************…

【pytest】 参数化@pytest.mark.parametrize

1.创建 test_parametrize.py 通过 pytest.mark.parametrize 方法设置参数 import pytestimport math#pytest参数化 pytest.mark.parametrize("base,exponent,expected", # 参数变量名称# 每个元组都是一条测试用例测试数据[(2,2,4),(3,3,9),(1,9,1),(0,9,0)],i…

R语言风险价值:ARIMA,GARCH,Delta-normal法滚动估计VaR(Value at Risk)和回测分析股票数据...

全文链接:http://tecdat.cn/?p24492 此分析的目的是构建一个过程,以在给定时变波动性的情况下正确估计风险价值。风险价值被广泛用于衡量金融机构的市场风险。我们的时间序列数据包括 1258 天的股票收益(点击文末“阅读原文”获取完整代码数…

Java————网络编程

一 、网络编程基础 1. 为什么需要网络编程 用户在浏览器中,打开在线视频网站, 如优酷看视频,实质是通过网络, 获取到网络上的一个视频资源。 与本地打开视频文件类似,只是视频文件这个资源的来源是网络。 相比本地资…

汽车电子——产品标准规范汇总和梳理(车载网络)

文章目录 前言 一、菊花链 二、K Line 三、L Line 四、RS485 五、LIN 六、CAN 七、FlexRay 八、MOST 九、Bluetooth 十、LAN 十一、移动网络 十二、实施和测试 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、菊花链 暂无统一的正式标准。 菊花链通信&…

Linux查看系统信息

# 查看操作系统的详细信息 uname -a# 查看已安装的Linux发行版信息 cat /etc/os-release# 查看Linux Standard Base (LSB)的信息 lsb_release -a# 查看主机的信息 hostnamectl# 查看文件系统的磁盘空间使用情况 df -h# 查看系统内存的使用情况 free -h# 查看网络接口的信息 ifc…

[React] react-hooks如何使用

react-hooks思想和初衷,也是把组件,颗粒化,单元化,形成独立的渲染环境,减少渲染次数,优化性能。 文章目录 1.为什么要使用hooks2.如何使用hooks2.1 useState2.2 useEffect2.3 useLayoutEffect2.4 useRef2.5…

【网络编程】TCP Socket编程

TCP Socket编程 1. ServerSocket2. Socket3. TCP的长短连接4. Socket 通信模型5. 代码示例:TCP 回显服务器 流套接字: 使用传输层TCP协议 TCP: 即Transmission Control Protocol(传输控制协议),传输层协议。 TCP的特点…

【计算机网络】IP协议(下)

文章目录 1. 特殊的IP地址2. IP地址的数量限制3. 私有IP地址和公网IP地址私有IP为什么不能出现在公网上?解决方案——NAT技术的使用 4. 路由5. IP分片问题为什么要进行切片?如何做的分片和组装?16位标识3位标志13位片偏移例子 细节问题如何区…

基于springboot地方废物回收机构管理系统springboot11

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

智慧农业农场小程序源码 智慧农场系统源码

智慧农业农场小程序源码 智慧农场系统源码 一、 智慧农场系统的组成 智慧农场系统一般包括传感器、控制器、数据采集与处理平台、应用软件等组成部分。其中, 传感器主要用于采集土壤温度、湿度、光照强度等环境参数,以及作物生长状态、水肥情况等生产信息。控制器则根据传感器…

GLTF编辑器的另一个作用

1、GLB模型介绍 GLB(GLTF Binary)是一种用于表示三维模型和场景的文件格式。GLTF是"GL Transmission Format"的缩写,是一种开放的、跨平台的标准,旨在在各种3D图形应用程序和引擎之间进行交换和共享。 GLB文件是GLTF文件…

PyCharm 手动下载插件

插件模块一直加载失败,报错信息: Marketplace plugins are not loaded. Check the internet connection and refresh. 尝试了以下方法,均告失败: pip 换源Manage Plugin Repositories...HTTP 代理设置...关闭三个防火墙 最后选…

RK3568平台开发系列讲解(工具命令篇)ADB的安装

🚀返回专栏总目录 文章目录 一、ADB介绍二、Windows 下安装 adb 工具沉淀、分享、成长,让自己和他人都能有所收获!😄 一、ADB介绍 adb 全称 Android Debug Bridge,直译过来就是 Android 调试桥,它是一个通用的命令行工具。adb 做为 Android 设备与 PC 端连接的一个桥梁…

MissionPlanner编译过程

环境 windows 10 mission planner 1.3.80 visual studio 2022 git 2.22.0 下载源码 (已配置git和ssh) 从github上克隆源码 git clone gitgithub.com:ArduPilot/MissionPlanner.git进入根目录 cd MissionPlanner在根目录下的ExtLibs文件下是链接的其它github源码&#xff0…

MySQL 高级(进阶) SQL 语句(二) -----存储过程

目录 1 存储过程 1.1 创建存储过程​ 1.2 调用存储过程 1.3 查看存储过程 1.4 存储过程的参数 1.5 修改存储过程 1.6 删除存储过程 2 条件语句 3 循环语句 1 存储过程 存储过程是一组为了完成特定功能的SQL语句集合。 存储过程在使用过程中是将常用或者复杂的工作预…