您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   模型库  
会员   
   
基于 UML 和EA进行分析设计
9月9-10日 北京+线上
大模型核心技术RAG、MCP与智能体实践
8月14-15日 厦门
图数据库与知识图谱
8月28日-29日 北京+线上
   
 
 订阅
一文搞定Autosar SWC开发秘籍,码住!
 
作者:GeeksTool
   次浏览      
 2025-7-28
 
编辑推荐:
本文主要介绍了Autosar SWC开发相关内容。希望对您的学习有所帮助。
本文来自于微信公众号汽车电子工具智慧库,由火龙果软件Linda编辑、推荐。

SWC 是什么?

软件组件(SWCs)是AUTOSAR的构建模块,SWCs可以组合起来创建一个完整的系统。

SWC 如何进行通信?

PORTS

SWCs通过端口进行通信。数据由P端口提供,并由R端口请求,P端口连接到R端口。

(S/R)通信:一个SWC向另一个SWC发送数据,当需要将数据“推送”给接收者时使用

(C/S)通信:一个SWC可以触发另一个SWC上的代码执行。 通常,服务器会返回一些结果

软件组件(SWCs)之间的连接映射到虚拟功能总线(VFB)上。VFB 的实现被称为运行时环境(RTE)。RTE 管理 SWCs 之间通信的所有方面。RTE 生成器通过读取 ECU 描述来生成实现 VFB 的代码。

interface

现在我们已经定义了我们的通信方法,我们可以看看端口是如何定义的:

每个端口的“形状”由其接口定义,包括其通信方法。

接口可以被认为是端口的“类型”。

由兼容接口定义的端口可以互相连接。

S/R interface

S/R接口包含了类型化的数据元素。数据元素彼此独立,即每个数据元素都是单独发送或接收的。

C/S interface

C/S接口包含操作。操作是服务器上运行的可执行代码片段。操作可以接受参数,并返回结果。操作也是独立的。

SWC 的 Runnable 如何被触发

SWC的内部结构:

可执行代码(称为Runnable Entity,或Runnable)由开发人员编写。

Runnables 发起 API 调用以进行通信。

Runnables 由 RTE 事件触发。

RTE-Event

RTE 事件是触发 Runnable 启动的原因,例如:

定时事件

数据接收事件

服务器调用事件

SWC传输的数据

S/R 接口包含数据元素:

每个数据元素都有一个数据类型(这是一个熟悉的概念)。

AUTOSAR 中有不同种类的数据类型:

ApplicationDataType(应用数据类型):在 SWC 设计阶段(在 VFB 级别),使用 ApplicationDataType。这是一个抽象类型。

ImplementationDataType(实现数据类型):ImplementationDataType 在概念上对应于 (C) 源代码级别。

SwBaseType(基本数据类型):SwBaseType 提供了 ImplementationDataType 的平台相关部分。

C/S接口使用操作的参数中的类型。C/S 参数也有一个方向。

例如,“Multiply”操作可能执行以下计算:

SWC的开发过程

开发SWC分为若干个阶段,这些阶段在逻辑上依次进行:

数据类型定义

接口和端口定义

SWC定义

Step1:数据类型定义

ApplicationDataTypes (ADTs) 是抽象的,描述“现实世界”的类型。

单位(SI单位)

物理维度

物理限制

ImplementationDataTypes (IDTs) 是代码级别的类型,用于实现ADTs。

内部限制

软件开发人员必须将每个ADT映射到一个IDT。

数据类型映射(Data Type Mapping)

虽然AUTOSAR允许SWC开发人员定义使用IDTs的接口,也允许使用ADTs,但在定义接口时最好始终使用ADTs,因为:

语义得以保留

来自不同供应商的SWC可能在内部使用不同的类型

例如,供应商#1可能使用‘float’表示速度,而供应商#2可能使用32位整数。只要ADT的单位和物理维度一致,RTE生成器将自动生成代码以在这两种类型之间进行转换。

示例

定义一个 ApplicationDataType:

使用一个名为 SwitchState 的Application Data Type,它有两个值:

On

Off

对于其 ImplementationDataType,将使用 UInt8。

应用程序数据类型(Application Data Types)不会出现在C代码中。

Step2:接口和端口定义

定义一个 S/R 接口

定义一个包含单个数据元素的 S/R 接口。这个接口将用于描述连接 Light Manager SWC(发送端)和 Light SWC(接收端)的端口。

由于描述了一个开关,接口仅包含一个类型为 SwitchState 的数据元素。

描述这个接口的 XML 看起来如下:

Step3:SWC定义

一个 SWC 需要一些配置数据。这些数据保存在一个 XML 文件中,我们将描述以下内容:

SWC 名称

端口定义

可运行实体(Runnables)

事件

数据类型映射

示例:定义一个简单的SWC

如下所示:

Step1:S/R PORT定义

使用之前定义的接口来定义一个具有 R 端口的 SWC。R 端口引用了之前定义的接口。

Step2:Runnable定义

假设希望在接收到灯光开关信号时执行一些代码。该可运行实体还需要从 R 端口读取数据。

Runnable代码

Step3:Event定义

假设在端口接收到数据时触发可运行实体。事件定义引用了端口和可运行实体:

Step4:数据类型映射

接口中使用的应用数据类型需要一个实现数据类型。(这不是SWC定义的一部分,但SWC包含对它的引用)

示例2:定义一个发送 SWC

如下图所示:

Step1:S/R PORT定义

使用相同的接口定义来定义 SWCLightManager 的 P-Port。

Step2:Runnable定义

假设定期运行一些代码来轮询开关的状态。这个 Runnable 通过 P-Port 发送数据。

Runnable 代码

Step3:Event定义

假设 runnable 每 100 毫秒触发一次。如下所示:事件定义中简单地指定了 runnable 和事件周期(以秒为单位)。

现在我们定义了两个具有相同 Sender-Receiver 接口的 SWC 类型。

(我们还没有将它们连接在一起 —— Composition将在后面讲解)

到目前为止,发送方的新数据会覆盖先前接收到的数据。

AUTOSAR 还支持排队通信。

S/R 通信

排队的 S/R 通信:

通过将 S/R 接口中的数据元素的 SwImplPolicy 设置为 QUEUED,它将变为排队模式:

队列的长度在 R-Port 定义中的 QueuedReceiverComspec 中进行配置。

更改为排队通信会导致 RTE 生成器构建不同的 API。

隐式 S/R 通信 (1):

为了使 Runnables 执行,它们必须映射到操作系统任务。用户的配置定义了 Runnables 到任务的映射。

RTE 生成器构建包含所有映射的 Runnables 调用的任务体。

隐式 S/R 通信 (2):

如果 Runnables 访问相同的 S/R 数据,使用数据项的本地副本可能更有效。

− 这就是隐式 S/R 通信。

− 数据在开始时从源读取,并在结束时写回。

− 当多个 Runnables 读取相同的数据时,这可以提高效率。

隐式 S/R 通信 (3):

在配置中使用的是 DataReadAccesses 和 DataWriteAccesses,而不是 DataSendPoints 和 DataReceivePoints。

C/S 接口定义

如何定义客户端-服务器接口。这个接口将用于描述连接 Light SWC(客户端)和 ECUAbstraction SWC(服务器)的端口。

这个客户端-服务器接口仅包含一个操作,用于在抽象层中设置一个值。

描述该接口的XML如下所示:

客户端端口定义如下:

服务器端口定义如下:

客户端 Runnable 如下声明server-call:

生成的函数示例:

C/S---Synchronous VS asynchronous

客户端/服务器通信可以是同步的或异步的:

API 是相同的 (Rte_Call):

否则会导致 RTE_E_LIMIT 错误。

调用的结果会在之后通过 Rte_Result 检索。

同步调用 仅在服务器响应后才会返回。

异步调用 会立即返回。

客户端对同一服务器发出的异步调用不能超过一个。

运行间变量(INTER-RUNNABLE VARIABLES)

前面的章节讲述了 SWC 之间的发送者/接收者和客户端/服务器通信。如果一个 SWC 内部的运行体(Runnables)需要进行通信,有一种更高效的方法:运行间变量(IRVs)。

显式运行间变量(Explicit IRV)的定义如下:

每个运行体进行访问(运行间变量的访问在 SWC 内部是私有的):

IRV 通信

 

   
次浏览       
 
相关文章

CMM之后对CMMI的思考
对软件研发项目管理的深入探讨
软件过程改进
软件过程改进的实现
 
相关文档

软件过程改进框架
软件过程改进的CMM-TSP-PSP模型
过程塑造(小型软件团队过程改进)
软件过程改进:经验和教训
 
相关课程

以"我"为中心的过程改进(iProcess )
iProcess过程改进实践
CMMI体系与实践
基于CMMI标准的软件质量保证

最新活动计划
基于 UML 和EA进行分析设计 7-30[北京]
大模型RAG、MCP与智能体 8-14[厦门]
软件架构设计方法、案例实践 7-24[北京]
用户体验、易用性测试与评估 7-25[西安]
图数据库与知识图谱 8-23[北京]
需求分析师能力培养 8-28[北京]
 
 
最新文章
iPerson的过程观:要 过程 or 结果
基于模型的需求管理方法与工具
敏捷产品管理之 Story
敏捷开发需求管理(产品backlog)
Kanban看板管理实践精要
最新课程
基于iProcess的敏捷过程
软件开发过程中的项目管理
持续集成与敏捷开发
敏捷过程实践
敏捷测试-简单而可行
更多...   
成功案例
英特尔 SCRUM-敏捷开发实战
某著名汽车 敏捷开发过程与管理实践
北京 敏捷开发过程与项目管理
东方证券 基于看板的敏捷方法实践
亚信 工作量估算
更多...