AutoSAR配置与实践(基础篇)2.4 RTE对Ports的支持 – C/S介绍

AutoSAR配置与实践(基础篇)2.4 RTE对Ports的支持 – C/S介绍

  • 一、同步和异步C/S接口实现原理
    • 1.1 同步模式
    • 1.2 异步模式
  • 二、同步和异步C/S接口结果获取
  • 2.1 同步调用结果获取
  • 2.2 异步调用结果获取
  • 三、异步Pooling和Waiting方式小结
  • 四、进阶篇C/S介绍

传送门 点击返回 ->AUTOSAR配置与实践总目录

C/S接口算是内容稍多的章节,特别是异步C/S。因此打算分为两篇文章介绍。第一篇基础,第二篇深入。所介绍的内容,是结合Autosar标准文档作为基础,同时分析配置工具生成代码及经过最终调试验证,得出的结论。

一、同步和异步C/S接口实现原理

此前章节在AppL中讲过了C/S接口,这里再进一步说明其实现原理:

  • C/S接口就是客户/服务接口,这个接口就是客户来调用服务端的操作的一个接口;
  • 可以理解成client和Server是在不同的C文件,Client端通过RTE实现对Server端的调用。

1.1 同步模式

AutoSAR配置与实践(基础篇)2.4 RTE对Ports的支持 – C/S介绍_第1张图片

  • 同步模式指的是Client端调用Server端接口后,需要等Server端接口内的逻辑完全执行完成后,才能执行Client端下一条语句。

举个例子的话类似任务执行方式是串行的,同一时刻client和Server端只能有一个在执行,执行时序是Client -> Server -> Client。

再举例的话类似串口通信的半双工方式。执行client时可以理解成串口在发送,
执行Server时可以理解成串口在接收,但是同一时刻,只能发送或者接收,不能发送和接收并行(Client和Server同时执行)。

1.2 异步模式

AutoSAR配置与实践(基础篇)2.4 RTE对Ports的支持 – C/S介绍_第2张图片

  • 异步模式指的是Client端调用Server端接口后, Client端可以立即执行下一条语句。
    同时服务器端的被调函数也在同步执行。等Server端执行完成后可以告知Client端或者由client端轮询结果,关于通知或轮询详细的设计将在后续章节详解。

举个例子的话,类似任务执行方式是并行的,同一时刻client和Server同时在执行,执行情况是Client -> Client 与此同时 Server ->Server,表示Client 调用完server接口继续执行自身其他逻辑(非接口相关),同时Sever端被调用后执行接口内部逻辑,执行完毕后,继续执行其他逻辑,Client 和Server端并行。

再举例的话是类似串口通信的全双工方式。执行client时可以理解成串口在发送,
执行Server时可以理解成串口在接收,同一时刻,发送和接收可以同时执行(Client和Server同时执行)。

二、同步和异步C/S接口结果获取

同步和异步调用不是通过函数区别的,这必须是事先配置好由RTE生成的,所以在Davinci中配置runnable的port时是有这个选项的
AutoSAR配置与实践(基础篇)2.4 RTE对Ports的支持 – C/S介绍_第3张图片

2.1 同步调用结果获取

从上文的例子,可以看出,同步调用其实就是我们平时调用函数是一样的,就是等同于将被调函数代码嵌入当前调用的函数代码中运行即可。在请求接口内执行完毕反馈执行结果,所以同步调用只需一个Rte_Call_xx格式接口即可,请求和反馈结果的实现都在这个接口内了。

2.2 异步调用结果获取

异步调用相当于有两个线程,一个线程运行我们的原函数中的内容,另一个执行被调函数的内容。然后可以过一段时间去读取一下被调函数的返回结果。
所以异步调用需要Rte_Call_xx接口发出请求,同时需要Rte_Result_xx接口获取请求的数据和请求结果,需要两个接口。

如何获取C/S接口的执行结果,有下面四种获取方法:

1.循环检测(pooling.不配置timeout) Client端定期会去检测Server端的执行状况,如果没有结果就继续执行下一行语句,等下一次循环间隔后继续轮询结果,直到有结果为止。
2.循环超时检测(pooling. 配置timeout),其实也是循环检测的一种,只不过增加了超时机制。 Client端调用Server端接口后,定期会去轮询(使用Rte_Result_xx接口)状态,同时设定超时返回时间。如果在超时设定时间内反馈,则认为是正常结果,否则判定超时。
3.事件触发 (waiting, 不配置timeout) 当服务函数运行结束,Server端可以通过事件(RTE event)触发client端,告知函数执行完毕可以读值。如果一直在执行没有通知,Client就要一直等待。
4.事件超时触发(waiting, 配置timeout) 当服务函数在未超时时间内运行结束,Server端可以通过事件(RTE event)触发client端。如果一直在执行没有通知,则Server端触发超时事件通知Client端

三、异步Pooling和Waiting方式小结

  • Pooling虽然配置上叫pooling方式,但循环检测的调用时机是由调用端SWC决定的,可以周期调用,也可以根据需要选择调用时机;

  • Pooling超时设定开始时机是从client端调用请求时(使用Rte_call_xx接口)开始的;

  • Waiting方式在Client发出请求后,一旦执行获取结果操作就会进入等待状态,需要Server端发出事件结束Client端的等待(执行完成或超时);

  • Waiting方式超时设定开始时机是从client端调用获取结果(使用Rte_result_xx接口)开始计算的。

四、进阶篇C/S介绍

由于异步方式内容较多,后续将再单独一篇C/S进阶篇,详细介绍C/S方式具体实现的操作,包括不同类型接口的参考代码。

传送门 点击返回 ->AUTOSAR配置与实践总目录

你可能感兴趣的:(实时互动,c语言,开发语言,mcu,单片机,汇编)