Autosar PRport 在Simulink中的使用

文章目录

    • 前言
    • 模型及Autosar接口配置
      • Autosar接口
      • 模型接口
    • 生成代码分析
    • 总结

前言

在之前使用Simulink开发Autosar模型时,大部分使用的RTE接口都是Sender or Receiver接口。但如果是对于那些具有存储需求的接口来说,一个sender接口需要有另外一个receiver接口来对应,会导致接口数量增加。其实,在Autosar定义中有这种需求的对应处理,即定义为PR-ports(Provide Require Ports需求提供端口)。本文介绍Simulink中定义该类型的接口及使用。

模型及Autosar接口配置

Autosar接口

建立Interface
image
建立SenderReceiverPorts

image

模型接口

建立一个Input,mapping到刚刚建立好的Autosar RTE接口上
image
建立一个Output,同样mapping到刚刚建立的Autosar RTE接口上
image
此处我们只使用了一个PR-Port,实现了输入输出的两个接口

简单处理Runnable中的逻辑,将输入加1,传递给输出。(demo演示用)

生成代码分析

主函数调用了Read接口和Write接口(此处为Explicit类型),对应了一个RTE Port

/* Model step function for TID1 */
void RunnableTest_10ms(void)           /* Explicit Task: RunnableTest_10ms */
{
  uint8 rtb_TmpSignalConversionAtReceiv;

  /* RootInportFunctionCallGenerator generated from: '<Root>/RunnableTest_10ms' incorporates:
   *  SubSystem: '<Root>/RunnableTest_10ms_call'
   */
  /* SignalConversion generated from: '<S1>/ReceiverPort' incorporates:
   *  Inport: '<Root>/ReceiverPort'
   */
  (void)Rte_Read_PRportTest_Val(&rtb_TmpSignalConversionAtReceiv);

  /* Outport: '<Root>/SenderPort' incorporates:
   *  Constant: '<S1>/Constant'
   *  Sum: '<S1>/Sum'
   */
  (void)Rte_Write_PRportTest_Val((uint8)(rtb_TmpSignalConversionAtReceiv + 1U));

  /* End of Outputs for RootInportFunctionCallGenerator generated from: '<Root>/RunnableTest_10ms' */
}

Simulink生成的模板RTE(Rte_xx.h)文件定义如下:

/* Data access functions */
#define Rte_Read_PRportTest_Val        Rte_Read_RTERunnable_PRportTest_Val

Std_ReturnType Rte_Read_PRportTest_Val(UInt8* u);

#define Rte_Write_PRportTest_Val       Rte_Write_RTERunnable_PRportTest_Val

Std_ReturnType Rte_Write_PRportTest_Val(UInt8 u);

此处Interface都对应的PRportTest

在Autosar工具中查看生成的Arxml文件:
image
image
之后通过Autosar工具将RTE接口map到相对应的PR-port即可。

总结

使用PR-port不会减少应用层的输入输出端口个数,只是减少了一个RTE Port。但看起来会更加直观一些。