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

[深入浅出AutoSAR] SWC 设计与应用

依AutoSAR及经验辛苦整理,原创保护,禁止转载

专栏 《深入浅出AutoSAR》

全文 3100 字, 包含

1. SWC 概念

2. 数据类型(Datatype)

3. 端口(Port)

4. 端口接口(Portinterface)

5. Component


前言

SWC (Software Component) 是 AutoSAR 架构中的核心概念之一。SWC主要包含的内容有以下几点:数据类型(datatype),端口接口(Portinterface),端口(Port),软件组件(SW-C)。


1. SWC 概念

SWC最形象的对比就是一个.C文件了,那么Composition SWC顾名思义就是.C文件的集合,体现在代码上,就是保存.C文件的文件夹。

SWC 是指软件组件,是一个独立的、可重用的、自我描述的、可替换的软件单元。它具有清晰的输入输出接口,相较于整个汽车电子系统来说,是一个更小的功能模块。SWC 可以是一个可执行的模块或者是一个库,它独立于其他组件工作,自带相应的状态和管理接口。SWC 之间的通信通过 AutoSAR 定义的接口进行。SWC一般位于AUTOSAR架构的Application层。

在使用 AutoSAR 架构下,开发人员首先需要将整个汽车电子系统分解为不同的 SWC。每个 SWC 都应该具有一些特定的功能,如传感器数据处理、控制算法、用户界面等等。每个 SWC 都需要定义其输入输出接口,以及其它自述和控制接口,这些接口都要符合 AutoSAR 定义的规范。然后,开发人员需要将这些 SWC 部署在具体的硬件平台上,并在系统级别上进行配置和管理。

SWC 内容

通常包括以下内容:

  1. 接口定义文件:用于描述SWC和其他SWC之间的接口,包括输入输出信号、服务等。

  2. 算法实现:包括控制算法、诊断算法、通信协议等。

  3. 状态机和事件驱动的代码实现:用于描述SWC内部的状态和事件处理逻辑。

  4. 代码生成工具链:用于将SWC部署到目标平台,例如生成可执行代码、配置文件等。

2. 数据类型(Datatype)

SWC主要是用于上层应用层设计,偏算法设计,那么既然是算法就涉及函数,函数就涉及变量,变量就自然涉及变量的数据类型。AUTOSAR架构中Datatype方面我们主要用到的一般是下面4个:

SwBaseType定义ECU软件中使用的基本数据类型
ApplicationDataType应用数据类型
ImplementationDataType实现数据类型
Data Type Mapping
将应用数据类型和实现数据类型Mapping上

为什么要Mapping呢?

代码生成是基于实现数据类型的,就算没有应用数据类型,也能生成。

新建数据类型顺序:

  1. 新建实现数据类型,然后关联基本数据类型
  2. 新建应用数据类型
  3. 将应用数据类型和实现数据类型进行Mapping上(这里有个细节,datamapping要在IB里调用的)

3. 端口 (Port)

Port是依附在SWC上的概念,比如配置工具配置SWC后,需要配置这个SWC的Port。其实也好理解,如果一个C文件孤零零的放在那里,与别的C文件没有任何数据交互,那么作为一套代码中的一个C文件,根本没法发挥作用,所以必然在SWC上需要配置上或者输入(R-Port)的或者输出(P-Port)的Port。

端口比作结婚的两家亲家方,接口比作结婚时男方给女方的彩礼。在通信中,端口相当于需要接收和发送的两方;接口就相当于通信的数据内容,大概可以这么理解。那么显而易见,Port就可以分为接收,发送和接发送,分别对应RPort,PPort和RPPort。

所以,我们要实现数据通信,就必须建立Port,然后配置他对应的接口。值得注意的是,我们在SWC连线的时候就知道了,要实现连线,就必须PPort和RPort所调用的接口是一样的,当然很好理解,彩礼肯定一定要一样呀,如果男方说8.8万,女方说18.8万,这样的彩礼对接,即通信是不可能成功的。

SWC 有很多Port, 是 SWC 的输入输出。 可作多个 SWC 的交互。实际上,在配置好的代码中,可以发现,如果我为SWC1和SWC2之间配置了一个SR的interface的话,SWC1中会有一个函数Rte_Write(),里面会对一个全局变量进行赋值。而另一边SWC2的里面会有一个Rte_Read()的函数,来读取这个全局变量。通过这种方式,达到了数据的交互。

Port分为require-port和provide-port,用来获取/提供某一服务或数据。当然,PortPrototype的定义需要先有PortInterface详细描述是有哪些信息交换,类似于面向对象的编程语言中的Interface定义。

当需要进行数据交换时,链接两个PortPrototype即可,R-P port成对连接(Assembly Connections)。

4. 端口接口(Portinterface)


Port之间具体传输何种信息,是由端口接口(PortInterface)定义的, 可以认为是Port所携带的内容。

PortInterface有以下几种种类

  • SenderReceiverInterface
  • NvDataInterface
  • ParameterInterface
  • ModeSwitchInterface
  • ClientServerInterface
  • TriggerInterface

常用的是SR接口(SenderReceiverInterface)和CS接口(ClientServerInterface),当然还有ModeSwitch接口(一般BswM和EcuM用),外部触发trigger接口,标定参数接口等。主要记录一下SR和CS这两种。

5. Component

Component表示系统的模块化部分。Component根据提供的和所需的接口定义其行为。 因此,Component作为一种类型,其一致性由这些提供和必需的接口定义(包括它们的静态和动态语义)。一个Component可以由多个类或组件拼凑而成。
 

Component 分类

图片来源: 【精选】AUTOSAR SWC详解-CSDN博客

Component 分类用途

 

6. Composition

CompositionSwComponentType用来将已有的SWC组合起来,作为一个功能组(也可以说是一个模块)来实现。这样的话内部逻辑对于集成人员来说不必关系,只需关心Composition级别暴露的port,由于CompositionSwComponentType本身也是SwComponentType,同样可以将它作为一部分,被包含于另一个CompositionSwComponentType当中。

当你需要暴露某一port时,应当在Composition上创建相同类型的Delegation port,并用Delegation Connection连接对应的SWC上的port。

Q/A

Q: Interface和port的关系和区别?

A: Interface与Implementation相对应,它有自己的规章制度,到我这里,要按我的标准做事。

port就象一个洞,到这里取/放东西,需要经过这个“洞”,因为其他地方是封住的,当然,也有可能存在其他的“洞”,重要的是,“洞”的后面黑黑一团,进出这个“洞”,可能有规则,可能有规则但不告诉你,还可能没规则。


参考

KimChan[Classic AUTOSAR学习] SWC设计与应用(一)-- 什么是SWC (Software Component) - 知乎
智能汽车小拿Autosar基本概念介绍: SWC/Runnable/Port和 Interface - 知乎 (zhihu.com)

Autosar Architecture (Learn from Scratch with Demo)

图片来源: COMIDOC

免责声明

本文根据公开信息整理,旨在介绍更多的汽车知识,所载文章仅为作者观点,不构成投资或商用建议。本文仅用于学习交流, 不允许商用。若有疑问或有侵权行为请联系作者处理。

相关文章:

[深入浅出AutoSAR] SWC 设计与应用

依AutoSAR及经验辛苦整理,原创保护,禁止转载。 专栏 《深入浅出AutoSAR》 全文 3100 字, 包含 1. SWC 概念 2. 数据类型(Datatype) 3. 端口(Port) 4. 端口接口(Portinterface&…...

【Ubuntu系统搭建STM32开发环境(国内镜像全程快速配置)】

源于本人失败的经历苦心研究 虚拟机安装ubuntu换源VScode安装安装Java环境安装cubemx安装 arm-Linux-gcc安装gdb server安装OpenOCD 虚拟机安装ubuntu 系统镜像可以在阿里云镜像站且下载速度很快。 选择安装的版本。 我选择的是:ubuntu-22.10-desktop-amd64.iso。…...

Java 中的 Default 关键字

default 关键字:是在 Java 8 中引入的新概念,也可称为 Virtual extension methods——虚拟扩展方法与public、private等都属于修饰符关键字,与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。 default 修饰方法时只能在接口…...

AdaBoost:增强机器学习的力量

一、介绍 机器学习已成为现代技术的基石,为从推荐系统到自动驾驶汽车的一切提供动力。在众多机器学习算法中,AdaBoost(自适应增强的缩写)作为一种强大的集成方法脱颖而出,为该领域的成功做出了重大贡献。AdaBoost 是一…...

c++踩坑点,类型转换

std::string转换到PVOID std::string转换到PVOID的方式如下 这样的话成功转换 “const char *” 类型的实参与 “WCHAR *” “const char *” 类型的实参与 “WCHAR *” 类型的形参不兼容 可以看到这种报错,可以直接强转如下: 但是在我们这里不适…...

mysql—面试50题—1

注:面试50题将分为5个部分,每部分10题 一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student …...

vue解决报错Unable to preventDefault inside passive event listener invocation.

"Unable to preventDefault inside passive event listener invocation"是浏览器开发中的一个警告信息。这个警告通常出现在使用passive事件监听器时,当在事件处理函数中调用preventDefault()方法时会引发该警告。 在传统的事件监听模型中,当…...

实际项目中最常用的设计模式

在软件开发领域,设计模式是一种经过验证的通用解决方案,用于解决各种常见问题。它们有助于提高代码的可维护性、可扩展性和可重用性。虽然有许多不同的设计模式,但以下是实际项目中最常用的一些: 1. 单例模式 (Singleton Pattern) 单例模式确保一个类只有一个实例,并提供…...

使用stream流根据对象属性对复杂list对象去重

日常开发中,我们可能会遇到这样一种情况,需要对数据库查询出来的数据进行一个二次处理,从而达到我们需要的数据结构。stream流正是java8提供的对复杂list操作方便工具。 我们先介绍如何使用stream流根据对象属性对复杂list对象去重&#xff0…...

vue3脚手架搭建

一.安装 vue3.0 脚手架 如果之前安装了2.0的脚手架,要先卸载掉,输入: npm uninstall vue-cli -g 进行全局卸载 1.安装node.js(npm) node.js:简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是…...

MongoDB 未授权访问漏洞

简介 MongoDB是一个基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,它的特点是高性能、易部署、易使用,存储数据非常方便,默认情况下是没有认证的这就导致不熟悉它的研发人员部署后没有做访问控制导致…...

花5分钟学习机器学习基础知识

一、什么是机器学习 机器学习的目的是让机器学习,而不是执行预设的算法。 机器学习适用于难以制定规则的问题,如垃圾邮件识别、图像识别。 机器学习模拟人类学习过程:从样本中学习归纳总结,形成模型,然后应用模型完成任务。 机器学习需要大量样本数据和计算能力支持。当前数…...

Qt学习:使用OpenGL绘制3D图形

文章目录 前言一、Qt下使用OpenGL绘制图形介绍二、示例完整代码总结 前言 文章中引用的内容均来自这本书中的原文:【Qt Creator快速入门_霍亚飞编著】,本文的示例也是在书中代码的基础上进行编写的(其中部分代码使用原文编译不过&#xff0c…...

在chrom浏览器安装Vue.js devtools插件,遇到恶意扩展程序字样,附百度网盘下载链接

遇到的问题 拖拽下载好的 Vue.js devtools 插件到谷歌扩展程序, 百度网盘下载地址 链接:https://pan.baidu.com/s/1FeK6pwc2UzRUUlMFN3rW5w?pwdw361 提取码:w361 提示: 解决办法 将Vue.js devtools 插件的后缀从.crx改为.zi…...

WSL2的安装与配置(创建Anaconda虚拟环境、更新软件包、安装PyTorch、VSCode)

1. WSL2 安装 以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /a…...

【鸿蒙软件开发】ArkTS常见组件之单选框Radio和切换按钮Toggle

文章目录 前言一、Radio单选框1.1 创建单选框1.2 添加Radio事件1.3 场景示例二、切换按钮Toggle2.1 创建切换按钮2.2 创建有子组件的Toggle2.3 自定义样式selectedColor属性switchPointColor属性 2.4 添加事件2.5 示例代码 总结 前言 Radio是单选框组件,通常用于提…...

今年阿里云双十一服务器优惠价格讨论_看看大家怎么说?

2023阿里云双十一云服务器大概会降到什么区间?阿里云服务器网认为会在当前的优惠价格基础上,降价10%左右,可以在阿里云CLUB中心领券:aliyun.club 云服务器专用满减优惠券。阿里云服务器网从各个渠道了解到大家对今年阿里云双十一服…...

LC-1402. 做菜顺序(记忆化搜索 ==> 动态规划、贪心)

1402. 做菜顺序 困难 一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜的满意程度&#x…...

泰森多边形

泰森多边形 93 泰森多边形又叫沃洛诺伊图(Voronoi diagram),得名于Georgy Voronoi,是一组由连接两邻点线段的垂直平分线组成的连续多边形。一个泰森多边形内的任一点到构成该多边形的控制点的距离小于到其他多边形控制点的距离。…...

YOLOV8 进行docker环境配置

修改docker文件 原docekerfile中ADD https://ultralytics.com/assets/Arial.ttf https://ultralytics.com/assets/Arial.Unicode.ttf /root/.config/Ultralytics/下载很慢,可以在外部下载好,放入docker文件夹中,再将源代码改为ADD Arial.ttf…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...

高抗扰度汽车光耦合器的特性

晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...