当前位置: 首页 > news >正文

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的流程

相关文章:

SWC 流程

一个arxml 存储SWC (可以存多个,也可以一个arxml存一个SWC)一个arxml 存储 composition (只能存一个)一个arxml 存储 system description (通过import dbc自动生成system) 存储SWC和composition的arxml文件分开&#…...

怒刷LeetCode的第10天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:两次拓扑排序 第二题 题目来源 题目内容 解决方法 方法一:分治法 方法二:优先队列(Priority Queue) 方法三:迭代 第三题 题目来源 题目内容…...

java框架-Springboot3-场景整合

文章目录 java框架-Springboot3-场景整合批量安装中间件NoSQL整合步骤RedisTemplate定制化 接口文档远程调用WebClientHttp Interface 消息服务 java框架-Springboot3-场景整合 批量安装中间件 linux安装中间件视频 NoSQL 整合redis视频 整合步骤 RedisTemplate定制化 Re…...

在Bat To Exe Converter,修改为当异常结束或终止时,程序重新启动执行

在Bat To Exe Converter,修改为当异常结束或终止时,程序重新启动执行 .bat中的代码部分: .bat中的代码echo offpython E:\python\yoloProjectTestSmallLarge\detect.pypause,我想你能帮在Bat To Exe Converter,修改成…...

PythonWeb服务器(HTTP协议)

一、HTTP协议与实现原理 HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种用于在网络上传输超文本数据的协议。它是Web应用程序通信的基础,通过客户端和服务器之间的请求和响应来传输数据。在HTTP协议中连接客户与服务器的…...

Northstar 量化平台

基于 B/S 架构、可替代付费商业软件的一站式量化交易平台。具备历史回放、策略研发、模拟交易、实盘交易等功能。兼顾全自动与半自动的使用场景。 已对接国内期货股票、外盘美股港股。 面向程序员的量化交易软件,用于期货、股票、外汇、炒币等多种交易场景&#xff…...

c语言进阶部分详解(经典回调函数qsort()详解及模拟实现)

大家好!上篇文章(c语言进阶部分详解(指针进阶2)_总之就是非常唔姆的博客-CSDN博客)我已经对回调函数进行了初步的讲解和一个简单的使用事例,鉴于篇幅有限没有进行更加详细的解释,今天便来补上。…...

win下 lvgl模拟器codeblocks配置

链接: 官方lvgl的codeblocks官方例子 下载慢的话,可能需要点工具。 需要下载的东西 https://github.com/lvgl/lv_port_win_codeblocks https://github.com/lvgl/lv_drivers/tree/4f98fddd2522b2bd661aeec3ba0caede0e56f96b https://github.com/lvgl/lvgl/tree/7a23…...

Quartus出租车计价器VHDL计费器

名称:出租车计价器VHDL计费器 软件:Quartus 语言:VHDL 要求: 启动键start表示汽车启动,起步价7元,同时路程开始计数,停止键stop表示熄火,车费和路程均为0,当暂停键pa…...

浅谈单元测试:测试和自动化中的利用

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程,刷完面试就稳了,你也可以当高薪软件测试工程师(自动化测试) 浅谈单元测试是一件棘手的事情。我很确定测试人员在某个时候会抱怨开发人员没有正确地进行单元测试&…...

深度详解Java序列化

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

Linux下的网络编程——B/S模型HTTP(四)

前言: HTTP是基于B/S架构进行通信的,而HTTP的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、Internet Explorer、Google Chrome、Safari、Opera等,此外,客户端的命令…...

Go语言入门篇

目录 一、基础数据类型 1.1 变量的定义方式 1.2 用%T输出变量的类型 二、复合数据类型 2.1 数组 2.1.2、数组的遍历 2.1.3 数组传参 2.2. 切片slice 2.2.1. 初始化切片 2.2.2. append向切片中追加元素 2.2.3. 切片的截取 2.3. map 2.3.1. map初始化 2.3.2. 添加和…...

基于springboot+vue的青年公寓服务平台

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

Spring-ImportSelector接口功能介绍

ImportSelector接口是至spring中导入内部类或者外部类的核心接口,只需要其定义的方法内返回需要创建bean的class字符串就好了,比如:当我们引入一个外部share包,我们拿到里面的Class返回出去,就能得到这个bean,是多么神…...

YOLOv5如何训练自己的数据集

文章目录 前言1、数据标注说明2、定义自己模型文件3、训练模型4、参考文献 前言 本文主要介绍如何利用YOLOv5训练自己的数据集 1、数据标注说明 以生活垃圾数据集为例子 生活垃圾数据集(YOLO版)点击这里直接下载本文生活垃圾数据集 生活垃圾数据集组成&…...

李航老师《统计学习方法》第1章阅读笔记

1.1 统计学习 统计学习的特点 统计学习:计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析 现在人们提及机器学习时,往往指统计机器学习,所以可以认为本书介绍的是机器学习方法 统计学习的对象 统计学习研究的对象是数据(data)…...

基于微信小程序的背单词学习激励系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有:管理员的主要功能有:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉…...

VScode调试复杂C/C++项目

以前都是用的VScode调试c/cpp的单个文件的编译和执行, 但是一遇到大型项目一般就用gdb了, gdb的调试效率和VScode差距还是比较大的, 但最近发现VScode其实也能调试复杂的cpp项目, 所以记录一下. 首先明确一下几点: 首先cpp文件需要经过编译, 生成可执行文件, 然后通过运行/调…...

【Hash表】字母异位词分组-力扣 49 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

云原生安全实战:API网关Kong的鉴权与限流详解

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...