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