文章目录
-
- 前言
- 模型及Autosar接口配置
-
- Autosar接口
- 模型接口
- 生成代码分析
- 总结
前言
在之前使用Simulink开发Autosar模型时,大部分使用的RTE接口都是Sender or Receiver接口。但如果是对于那些具有存储需求的接口来说,一个sender接口需要有另外一个receiver接口来对应,会导致接口数量增加。其实,在Autosar定义中有这种需求的对应处理,即定义为PR-ports(Provide Require Ports需求提供端口)。本文介绍Simulink中定义该类型的接口及使用。
模型及Autosar接口配置
Autosar接口
建立Interface
建立SenderReceiverPorts
模型接口
建立一个Input,mapping到刚刚建立好的Autosar RTE接口上
建立一个Output,同样mapping到刚刚建立的Autosar RTE接口上
此处我们只使用了一个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文件:
之后通过Autosar工具将RTE接口map到相对应的PR-port即可。
总结
使用PR-port不会减少应用层的输入输出端口个数,只是减少了一个RTE Port。但看起来会更加直观一些。