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


  

关键词

嵌入式、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第二节。

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

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基本的 AUTOSAR RTE C/S 接口实例: 假设我们有一个名为 "Light" 的客户端组件,它希望请求一个名为 "Button" 的服务器组件来获取按键状态。首先,我们需要定义 "Light" 组件和 "Button" 组件之间的接口: ``` // Light 组件接口定义 typedef struct { uint8 Light_Status; } Light_InterfaceType; // Button 组件接口定义 typedef struct { uint8 Button_Status; } Button_InterfaceType; ``` 然后,我们需要定义一组标准的客户端 API 和服务器 API,用于创建、发送和接收请求消息。例如,以下是一个名为 "Rte_Button_GetStatus" 的服务器 API,用于获取按键状态: ``` // Rte_Button_GetStatus 服务器 API Std_ReturnType Rte_Button_GetStatus(Button_InterfaceType* Button_Interface) { // 获取按键状态并将其存储在 Button_Interface 中 return E_OK; } ``` 然后,我们需要定义一组标准的客户端 API,用于创建、发送和接收请求消息。例如,以下是一个名为 "Rte_Light_GetButtonStatus" 的客户端 API,用于获取按键状态: ``` // Rte_Light_GetButtonStatus 客户端 API Std_ReturnType Rte_Light_GetButtonStatus(Light_InterfaceType* Light_Interface) { Button_InterfaceType Button_Interface; Std_ReturnType status; // 创建请求消息 // ... // 发送请求消息 // ... // 等待响应消息 // ... // 解析响应消息并将按键状态存储在 Light_Interface 中 Light_Interface->Light_Status = Button_Interface.Button_Status; return status; } ``` 最后,我们需要定义一组标准的回调函数,用于通知客户端请求的处理结果。例如,以下是一个名为 "Rte_Light_GetButtonStatus_Callback" 的回调函数,用于处理请求成功的情况: ``` // Rte_Light_GetButtonStatus_Callback 回调函数 void Rte_Light_GetButtonStatus_Callback(Std_ReturnType status) { if (status == E_OK) { // 请求成功,可以执行相应的操作 } else { // 请求失败,可以执行相应的操作 } } ``` 这个示例只是一个基本的 AUTOSAR RTE C/S 接口实例,实际的接口可能会更加复杂和详细。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老灰╮(╯-╰)╭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值