RTE对Ports的作用(Client-Server)

>>>点我返回《AUTOSAR专栏》目录

目录

  1. 回顾Client-Server通信的特点
  2. 同步调用
  3. 异步调用
  4. 同步和异步达芬奇工具中的体现

1. 回顾Client-Server通信的特点

  1. 支持多对1的调用(n:1),多个模块调用1个函数
  2. 客户端(client)调用服务端(Server)的Runable
  3. 同步和异步两种方式都支持
  4. Server Runable要么运行在Task上下文(在另外一个task中运行),要么运行在调用上下文(Server Runable跟调用者在同一个task)

2. 同步调用

RTE对Ports的作用(Client-Server)_第1张图片

  1. 等待Server的响应,这时候Client是阻塞的,没有继续运行
  2. Server的返回结果,通过OUT(输出型参数返回给Client)

RTE对Ports的作用(Client-Server)_第2张图片
调用接口:

Std_ReturnType Rte_Call_<p>_<o>( IN | IN/OUT | OUT <param_1>,
IN | IN/OUT | OUT <param_2>,
IN | IN/OUT | OUT <param_3>,
...
IN | IN/OUT | OUT <param_n>
)

代表Operation,操作的意思。

举个例子:

Client要调用Server端的GetSeed()函数获取车速
RTE对Ports的作用(Client-Server)_第3张图片
Client端:

Std_ReturnType Rte_Call_<p>_GetSpeed(uint32 *Speed)

Server端:

Std_ReturnType GetSpeed(uint32 *Speed)

3. 异步调用

  1. Client不会阻塞等Server的结果,而是继续运行、

  2. Client通过调用另外一个函数获取Server的结果,另外一个函数可以选择等待,并且也可以选择有超时处理,还可以Server运行完了,然后通知Client端的Runable。

轮询:轮询或者等待,注意这里的等待区分和同步的阻塞的区别,是调用获取Server执行后的结果函数的等待。

超时:时间到了去读取Server的结果,对Client端来说,是主动性质的。

通知:Server执行完了,产生事件触发Client的Runable去读取结果,这种对Client端来说,是被动性质的。

获取Server结果函数如下:

Std_ReturnType Rte_Result_<p>_<o>( IN | IN/OUT | OUT <param_1>,
IN | IN/OUT | OUT <param_2>,
IN | IN/OUT | OUT <param_3>,
...
IN | IN/OUT | OUT <param_n>
)

RTE对Ports的作用(Client-Server)_第4张图片
举个在Runable中调用的例子

Ruanble1()
{
  uint32 speed;
  Rte_Call_<p>_GetSpeed();
  //可以做其它的事情
  
  //最后调用下面这个函数获取Spped的结果
  speed = Rte_Result_GetSpeed_Speed()
}

4.在Davinci工具中的体现

1)同步
在Port Access中设置,选同步的时候,watting是灰色的
RTE对Ports的作用(Client-Server)_第5张图片
生成的接口如下:

Client/Server Interfaces:
 * =========================
 *   Server Invocation:
 *   ------------------
 *   Std_ReturnType Rte_Call_GetAngle_Angle(uint8 angle)
 *     Synchronous Server Invocation. Timeout: None

2)异步
RTE对Ports的作用(Client-Server)_第6张图片
异步,结果轮询
RTE对Ports的作用(Client-Server)_第7张图片
生成的代码如下:

*   Server Invocation:
 *   ------------------
 *   Std_ReturnType Rte_Call_GetAngle_Angle(uint8 angle)
 *     Asynchronous Server Invocation
 *
 *   Server Result:
 *   --------------
 *   Std_ReturnType Rte_Result_GetAngle_Angle(void)

异步等待设置20ms超时
RTE对Ports的作用(Client-Server)_第8张图片

* Client/Server Interfaces:
 * =========================
 *   Server Invocation:
 *   ------------------
 *   Std_ReturnType Rte_Call_GetAngle_Angle(uint8 angle)
 *     Asynchronous Server Invocation
 *
 *   Server Result:
 *   --------------
 *   Std_ReturnType Rte_Result_GetAngle_Angle(void)
 *     Blocking Result. Timeout: 20ms

>>>点我返回《AUTOSAR专栏》目录
扫描下方的二维码关注“汽车软件攻城狮”可第一时间获取更新!

RTE对Ports的作用(Client-Server)_第9张图片

你可能感兴趣的:(AUTOSAR专栏)