[AutoSar]基础部分 RTE 03 C/S Port 同步/异步

本文详细介绍了在DavinciDeveloper中C/Sportinterface的使用,包括同步和异步调用的区别,以及在server端如何映射到任务。主要讨论了C语言实现、autosar协议和TI平台的相关内容。


  

关键词

嵌入式、C语言、autosar、Rte

平台说明

项目Value
OSautosar OS
autosar厂商vector
芯片厂商TI
编程语言C,C++
编译器HighTec (GCC)

在这里插入图片描述

>>>>>回到总目录<<<<<<

一、C/S port interface 定义

  C = client,S = server,通俗可以这样理解
client:这是一个客户,客户需要其他人(component)提供一个服务。
server:这就是一个服务员,客户吼一声(触发调用)需要什么服务(输入参数)服务员就得立马跑过来进行服务(处理任务)并在服务后询问客户是否满意(返回值)。

在这里插入图片描述

1.1在Davinci developer中的创建

  在这里CtAp_Demo_Core1作为client,CpApSWC1作为server。该interface中创建一个option为OpenDoor()带一个输入参数和一个输出参数。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、同步调用和异步调用

在这里插入图片描述

  如图所示我们可以在client调用的时候选择同步还是异步。区别如下:
通俗来讲举个例,客人让服务员帮忙烤肉
**同步:**客人让服务员过来帮忙烤肉(client调用server),客人什么也不干(client wait),等着服务员把肉烤好了(返回状态或者值)再吃烤肉。
**异步:**客人让服务员过来帮忙烤肉(client调用server),客人可以先吃其他菜,预估着服务员应该把肉烤已经好了问一下服务员是否能吃了?(client 调用 server获取结果)再吃烤肉。

2.1 同步

  可以理解为:
①去调用了另一个函数,等待这个函数运行完后返回。
②在超时前返回状态(值)。
③返回状态错误或者超时则丢弃该结果。

2.1.1同步code

在这里插入图片描述

在这里插入图片描述

2.1.2同步处理时序图

在这里插入图片描述

2.2 异步

  
①异步调用有两个步骤,第一个是调用Rte_Call_AcsSWC1_OpenDoor()执行代码,第二个是调用
Rte_Result_AcsSWC1_OpenDoor()获取结果。
②获取结果方式有三种:
  1.poling:轮询直到服务执行完获取结果,和同步调用差不多。
  2.waiting:超时后获取结果。
  3.none:服务执行完成后触发获取结果。
在这里插入图片描述

2.2.1异步code

在这里插入图片描述

2.2.2异步处理时序图

2.2.2.1 poling

在这里插入图片描述

2.2.2.2 waiting

在这里插入图片描述

2.2.2.3none

在这里插入图片描述

三、server端的mapping到task详解

见链接: CS interface server runnable mapping第二节。

>>>>>回到总目录<<<<<<

<think>好的,我现在需要帮助用户理解AUTOSAR中的C/S接口调用原理。首先,我得回忆一下AUTOSAR的基本架构,尤其是RTE(运行时环境)的作用,因为C/S接口是通过RTE实现的。根据用户提供的引用,特别是引用[2][3],C/S接口涉及客户端服务器端,需要区分同步异步调用。 首先,用户可能需要了解C/S接口的基本概念,比如客户端发送请求,服务器端处理并返回结果。然后,同步异步调用的区别是关键点,引用[2]提到了这一点。同步调用会阻塞客户端直到服务器响应,而异步则不会,这会影响系统设计。 接下来,用户可能想知道接口在代码中的实现方式,比如如何通过Simulink生成对应的代码,引用[3]提到Simulink模块与Autosar接口的对应关系,比如ClientPorts对应Function Caller。这部分需要解释模块如何映射到实际代码,以及RTE如何协调通信。 另外,引用[1]提到添加server runnable的触发方式,这可能涉及到RTE如何触发服务器端的运行实体。需要说明触发机制,比如通过RTE事件或周期性触发。 用户的问题还涉及调用原理,可能需要分步骤解释,比如请求的发起、RTE的路由、服务器的处理、响应的返回等流程。同时,需要强调RTE的中介角色,确保通信符合AUTOSAR标准。 最后,要确保回答结构清晰,使用示例帮助理解,比如引用中的CtAp_Demo_Core1作为客户端,CpApSWC1作为服务器,说明实际应用中的配置。 总结来说,回答应包括C/S接口的定义、同步异步的区别、RTE的作用、触发机制、代码生成映射以及调用流程。同时,结合用户提供的引用,确保信息准确并正确标注来源。</think>### AUTOSAR C/S接口调用原理分步解释 AUTOSAR C/S接口的调用原理可分为以下核心环节: 1. **接口定义与角色划分** - **客户端(Client)**:发起服务请求的软件组件(SWC),通过调用操作(Operation)触发服务 - **服务器(Server)**:实现具体服务的SWC,包含可运行实体(Runnable)处理请求 - 通过ARXML文件定义接口规范,包含操作名称、参数类型通信属性[^1] 2. **通信模式** - **同步调用**:客户端发出请求后阻塞等待响应 ```c // 客户端伪代码 Std_ReturnType result = Rte_Call_OpenDoor(doorID, &status); ``` ▲ 调用线程暂停直至服务器返回结果[^2] - **异步调用**:客户端通过回调函数继续执行 ```c // 客户端伪代码 Rte_Send_OpenDoorAsync(doorID); // 继续执行其他任务... ``` ▲ 服务器处理完成后通过RTE触发回调通知客户端 3. **运行时环境(RTE)路由机制** RTE作为通信中介,实现以下关键功能: - **端口映射**:将逻辑端口绑定到具体SWC实例 - **序列化**:对复杂数据类型进行编码/解码 - **模式切换**:根据配置自动选择同步/异步通信路径 - **错误处理**:检测超时/无效调用并返回错误代码 4. **触发机制** - 客户端调用通过RTE事件触发: ```mermaid graph LR ClientSWC-->|调用操作|RTE RTE-->|生成服务请求|ServerRunnable ServerRunnable-->|处理请求|RTE RTE-->|返回响应|ClientSWC ``` - 服务器端通过RTE事件或周期调度激活Runnable 5. **代码生成实现** 在Simulink建模时: | Simulink元素 | AUTOSAR映射 | |---------------------|---------------------| | Function Caller | Client Port | | Function-Caller Subsystem | Server Port | | Trigger信号 | RTE事件触发器 | [^3] ### 典型调用流程 1. 客户端SWC发起`Rte_Call`操作 2. RTE验证接口契约(参数类型、访问权限) 3. 生成服务请求消息(包含操作标识符参数) 4. 通过IPC/信号量跨核通信(如适用) 5. 服务器Runnable被RTE调度激活 6. 服务处理完成后返回响应数据 7. RTE将响应传递回客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值