SWC 流程

  • 一个arxml 存储SWC (可以存多个,也可以一个arxml存一个SWC)
  • 一个arxml 存储 composition (只能存一个)
  • 一个arxml 存储 system description (通过import dbc自动生成system)

存储SWC和composition的arxml文件分开,有效的实现了swc的复用。因为SWC的创建只是依赖于interface。【不依赖与Implementation data type,所以不用担心】 所以拿着 SWC的arxml 和定义 Interface的arxml这两个文件,就可以在任意的project里面复用了。【创建composition可以直接import该SWC】

1.  AUTOSAR自带文件

新建AUTOSAR project的时候,就会自己创建文件

“ISOLAR_PlatformTypes.arxml”

  • Implementation Data Type
  • BaseType
  • DataConstr

这个文件就干了一件事,通过BaseType和DataConstr,把IDT定义了,可以直接在c文件里面直接用 【有了长度和符号,就可以被编译器识别了】

2. 预先准备的输入

系统工程师会自己创建一个文件

“01_TypesAndInterface.arxml”

  • Application Data Types
  • Interfaces

这个文件里面的ADT还没有与上面提到的IDT链接起来,这时只是名字而已(会在之后的SWC过程中link起来?)

Interfaces 下面创建了3个Sender-Receiver Interface实体,每个Interface下面都分配了data element。data element的数据类型是由ADT定义的

也就是说, 我们是先有了需要这个三个通信接口的需求,然后才开始在AUTOSAR project里面去创建SWC的 【可以把每个 Interface看作是函数吗,data element是函数的输入输出】

至此,用户的需求全部在 “01_TypesAndInterface.arxml” 文件中出现

3. 新建SWC

3.1 用户在ISOLAR内 create AXRML文件,用作存储之后创建的SWC的信息

然后右键arxml,即可创建SWC信息

注意,这个package是AUTOSAR很重要的概念

可以看到:每个arxml文件下只能有一个package,且各个arxml的package name不能一样。也就是说,不管是SWC还是BSW模块,他们的信息都是挂靠在package下面。

这个可以类别为c project, package就是c文件【这就是为什么package不能重名】,SWC/BSW可以看作是函数,可以放在任意的c文件下

3.2 用户在package下面创建SWC,并添加相应信息给该SWC

  • Port
    • Interface - (Data Element + Application Data Type) 【一个SWC下面可以有多个port】
  • Internal Behavior
    • Runnable Entity 【函数:一个SWC下面可以有多个runnable】
      • DataAccessPoint  【函数参数】
      • Timing Event 【函数的周期】
    • DataTypeMapping 【Application Data Type 到 Implementation Data Type】

  1. SWC是功能模块而不是函数的抽象,所以一个功能模块(SWC)下面一开始就要声明好要多少port,是输入还是输出port,有哪些data element参与传输【这样high level的抽象总结,方便接下来在system 级别确定/规划接口怎么跟外界连】 【swc可用看作是.c文件,port定义可用看作是对应的.h文件】
  2. SWC跟外界通讯的port定义完成以后,接下来就是SWC内部的函数定义了【函数名 + 参数 + 运行周期】。Runnable Entity就是函数名, Runnable Entity下面的DataAccessPoint 就是函数参数【通过分配之前port下面的interface下面的data element实现】
  3. 每个package下面都要有DataTypeMapping,或者说每个SWC下面都要有DataTypeMapping,可用看作SWC是.c文件,而转换ADT - IDT的DataTypeMapping就是对应的.h 文件

一个port下面只能有一个Interface

port只做一件事情,确定传输方向是输入还是输出

一个arxml下面可以有多个SWC,但是为了复用最好还是一个SWC一个arxml文件

过程是怎样,在哪个界面操作的不重要,重要的是理解,tool给我们提供了哪些可用的功能

Port是SWC最重要的概念

可创建的Port 只有 Pport 和 Rport 两种,用来表示方向,是send还是receive 数据

而可以被分配到Port下面的Interface则分为 sender/receiver 和 clien/server 两种【Interface已经在“01_TypesAndInterface.arxml”文件里面事先被system engineer定义好了,我们在接下来的步骤中不会涉及到新建或者修改Interface的定义】

可以将SWC看作是一堆函数集合抽象出来的一个统一实体,比如将雨刷控制器的所有相关函数统一放在一个SWC里面。而给SWC分配Interface,就是让SWC里面的函数可以通过interface下面的data element与外界通信【外界指其他SWC或者com来的CAN signal】

sender/receiver 和 client/server 接口的区别,以及生成的code的区别:

All the Runnables of an SWC只能被map到同一个core上(对多核ecu而言)

4. 新建一个Composition

,并将之前创建的多个SWC之间的port连接起来

新建一个arxml文件,【以及对应的package,用来存储这个composition的所有信息】右键arxml,即可创建composition

在composition里面把需要的SWC全部添加进来,然后再assembly connector里面可以把port连接上

5. 导入CAN dbc

,包括了Signal,PDU,ECU等系统信息

通过import dbc文件,tool会自动生成一个或多个arxml,自动将dbc文件里面的Signal,PDU,ECU等信息转换到这些arxml文件内, 用来以AUTOSAR的格式存放dbc的信息,相当于一个DLL库 【并且会生成COM module,里面有各个CAN signal】

6. 新建一个system description

,system level的核心配置都在这个文件里面进行

右键新建system,会自动生成一个arxml,此为system description

system description是 system level配置的核心文件,有两大功能

  • SWC to ECU mapping: 将 composition的那些SWC分配到各个ecu【system description相当于库文件,里面的ECU等信息会被自动识别出来等待被调用】
  • System Data mapping: 将SWC的port里面的需要和外界通讯的data element与刚才system extract里面的CAN signal连起来【system description相当于库文件,里面的system signal等信息会被自动识别出来等待被调用】

每次更改过system description,都要运行 Create Ecu Extract 来重新生成 EcuExtract.arxml,使改动生效

7. EcuExtract生成RTE

, 将之前在SWC中创建的Runnable Entity分配到Task上

EcuExtract.arxml是在对system extract.arxml文件执行Create Ecu Extract操作之后,自动生成的。

RTE editor里面包含RunnableToTaskMapping的界面

  • 新建 Task,设置period
  • 将unmapping runnable拖拽分配到Task下面

至此实现了

  • 函数名的创建
  • 函数参数的创建
  • 函数的周期性调度

不配置DataTypeMapping,就会导致c code里面只有函数框架,没有对应的data read/data write。因为ISOLAR不知道这些变量正确的implementation data type是什么,从而无法生成

IDT和base type相连,相当于用IDT给c data type重命名了一下,从而满足了MISRA的要求

从c语言的角度去理解,SWC的创建是是什么样的

这个右键component,直接生成code真好用,要好好利用上

RTE实际生成的文件是什么?

生成RTE之前,需要做什么,先生成 system extract 和 ecu extract吗?

OSNeeds.arxml 是干什么的

我现在有一个SWC,已经生成函数了

为什么我在EthSwt_CDD里面新建了port,但是在system extract的System data mapping里面根本就没有对应的port可以和system signal相连起来?

我想验证的是,对component右键生成代码的时候会不会把我在函数里面手写的code覆盖掉?

答:不会  tool在生成代码的时候,/* PROTECTED REGION */  里面的code不会被覆盖掉

从c代码的角度,SWC的创建分两种

  1. 在函数内读取变量(其他SWC内部的变量) 
  2. 在函数内调用函数 (其他SWC内部的函数)

通过 sender/receiver interface,实现了第一点: 【RTE传输对象是Interface下面的DataElement

在各自的SWC的runnable里面添加对应的Pport或者Rport【不要忘了在data mapping里面将ADT和IDT对应起来】,即可右键component生成下入所示的runnable函数框架(存储在src/asw文件夹下的一个.c文件里面,跟rte没有关系.)。【右键生成代码的时候不会覆盖掉PROTECTED REGION里面的code】

然后在composition的assembly connector里面将两个port下面的dataelement连接起来,生成RTE的时候rte.c里面就会生成这些个Rte_IRead, Rte_Write函数实体,从而实现数据传输【RTE只会生成rte.c,不会生成/更新 上面的component.c 文件】

通过 client/server interface, 实现了第二点: 【RTE传输对象是interface下面的Operation(Event)

原理其实是client runnable内部通过set event,来触发server runnable的运行。

实现分三步

  1. client SWC的runnable里面设置server call point来调用client/server interface下面的Operation【其实就是event】
  2. server SWC里面设置runnable为OperationInvokeEvent出发
  3. 然后在composition的assembly connector里面将两个SWC的interface下的Operation连起来即可

函数调用想传递参数的话,通过ArgInOut实现【定义interface的时候,Operation本来就跟Arguement绑定好了,所以是全自动的,不需要在ISOLAR里面额外操作】

只要保证两个SWC的port下面添加的是同一个interface,composition里面就能把这两个Operation(event)连接起来

1 需求

        传输 data 和 调用 函数

2 为满足需求创造的概念: interface

        operation: 调用函数

        data element: 传输data

想想创建一个diagnostic SWC的流程

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

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

相关文章

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址:点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧:清晰明了的问题表达 ChatGPT中级使用语法中级使用语法:具体化问题并提供背景信息 ChatGPT高级使用高级使用:追问、…

安防监控系统/视频云存储/视频监控平台EasyCVR无法级联上级平台,该如何解决?

安防视频监控系统EasyCVR平台能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也…

Linux三大搜索指令的区别

find:可以在指定的路径下进行文件的搜索 —— 真的在磁盘文件中查找 例如find /usr/bin/ -name ls which 可以在指令路径下,/usr/bin,搜索指令文件 例如:which ls whereis:在系统特定的路径下查找,既可以找到可执行程序&#xff…

设计模式之观察者(发布订阅)模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同事监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己 class Program{static void Main(string[] args){ConcreteSubject concreteSu…

字符串函数

目录 一、求字符串长度 strlen 用法: 注意: 用例: 二、长度不受限制的字符串函数 strcpy 用法: 注意: 用例: strcat 用法: 注意: 用例: strcmp 用法: 三…

Vue系列(三)之 基础语法下篇【事件处理,表单综合案例,组件通信】

一. 事件处理 在 Vue.js 中,v-on 指令被用于监听 DOM 事件,并在事件触发时执行相应的方法,这些方法就是事件处理器。v-on 指令有简写形式 ,例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…

1小时掌握Python操作Mysql数据库之pymysql模块技术

大家好,我是python222小锋老师。前段时间卷了一套 Python3零基础7天入门实战 近日锋哥又卷了一波课程,Python操作Mysql数据库的pymysql技术,文字版视频版。1小时掌握。 视频版教程 1小时掌握Python操作Mysql数据库之pymysql模块技术 文字版…

RHCSA_Linux 从命令行管理文件

目录 一、文件命令规范: 二、创建链接文件 1、创建软链接文件 2、创建硬链接文件 三、目录操作命令 1、创建目录 -- mkdir 2、统计目录及文件的空间占用情况 -- du 3、删除目录文件 四、创建、删除普通文件 1、创建普通文件 2、删除普通文件 五、数据流和…

golang实现远程控制主机

文章目录 ssh原理使用golang远程下发命令使用golang远程传输文件 ssh原理 说到ssh原理个人觉得解释最全的一张图是这张华为画的 Connection establishment 这一步就是建立tcp连接 version negotiation 这一步是ssh客户端(连接者)和被ssh服务端(连接者)进行协议的交换&#xf…

Redis桌面管理工具Redis Desktop Manager mac中文版功能特色

Redis Desktop Manager for Mac是一款实用的Redis可视化工具。RDM支持SSL / TLS加密,SSH隧道,基于SSH隧道的TLS,为您提供了一个易于使用的GUI,可以访问您的Redis数据库并执行一些基本操作:将键视为树,CRUD键…

Springboot整合分页插件pagehelper

首先需要有一定的springbootmybatis的基础&#xff0c;才能使用顺畅 项目结构如下 引入依赖&#xff0c;springboot版本选的是2.7.16版本&#xff0c;jdk选的17&#xff0c; <!--分页插件--> <dependency><groupId>com.github.pagehelper</groupId><…

静态通讯录

今天我们分享一下静态通讯录详细解释和代码&#xff0c;之前分享过的只是通讯录的代码&#xff0c;但是我们没有进行讲解和解释&#xff0c;今天我们一边分享它的代码一边解释原因&#xff0c;让大家可以手撕通讯录。现在开始我们的学习吧。 首先我们应该要有三个文件&#xf…

java面试题-jvm基础知识

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&a…

计算机丢失msvcp140_1.dll的解决办法,丢失msvcp140_1.dll的原因

丢失 msvcp140_1.dll 是一个常见的错误信息&#xff0c;通常会在尝试运行某些程序时出现。msvcp140_1.dll 是一个动态链接库文件&#xff0c;它包含了许多 C标准库函数的实现&#xff0c;这些函数在许多程序中都是必需的。因此&#xff0c;如果丢失了该文件&#xff0c;程序可能…

微软最热门的10款前端开源项目!

本文来盘点微软开源的十大前端项目&#xff0c;这些项目在 Github 上获得了超过 45 万 Star&#xff01; Visual Studio Code Visual Studio Code 是一款由微软开发的开源的代码编辑器。它支持多种编程语言&#xff0c;如C、C、C#、Python、JavaScript 和 TypeScript 等&…

记一次linux下pip安装包时出错及奇怪的解决过程

一、问题说明 如图&#xff0c;在使用pip安装测速工具speedtest-cli时&#xff0c;终端提示“Externally managed environment &#xff08;从外部管理的环境&#xff09;”&#xff0c;导致无法安装该库。 二、问题解决 1 尝试提示的解决方案&#xff0c;改用命令apt inst…

c++获取当前时间的字符串

代码 void getNowTimePrefix(std::string& prefix) {std::time_t nowTime;struct tm* p new tm;std::time(&nowTime);localtime_s(p, &nowTime);int year p->tm_year 1900;int month p->tm_mon 1;int day p->tm_mday;int hour p->tm_hour;int …

机器学习算法基础--逻辑回归

目录 1.数据收集及处理 2.数据提取及可视化 3.逻辑回归训练样本并且测试 4.绘制散点决策边界 逻辑回归的方法已经在数学建模里面讲过了&#xff0c;这里就不多讲了。 本篇我们主要是利用逻辑回归的方法来求解分类问题。 1.数据获取及处理 import pandas as pd from sklearn…

计算机竞赛 深度学习YOLO抽烟行为检测 - python opencv

文章目录 1 前言1 课题背景2 实现效果3 Yolov5算法3.1 简介3.2 相关技术 4 数据集处理及实验5 部分核心代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习YOLO抽烟行为检测 该项目较为新颖&#xff0c;适合作为竞赛课…

《Kubernetes部署篇:Ubuntu20.04基于外部etcd+部署kubernetes1.25.14集群(多主多从)》

一、部署架构图 1、架构图如下所示: 2、部署流程图如下所示: 二、环境信息 1、资源下载基于外部etcd+部署容器版kubernetes1.25.14集群资源合集 2、部署规划主机名K8S版本系统版本内核版本IP地址备注k8s-master-121.25.14Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.12ma…