主页 > 游戏开发  > 

使用Simulink中的IsUpdated获取Rport的更新状态

使用Simulink中的IsUpdated获取Rport的更新状态

文章目录 前言建立带Update flag的模型Autosar接口配置生成代码分析总结

前言

应用层开发过程中,对于接收到的信号,有一部分是来自于CAN上的,并不是每个周期数据都会更新,如果报文周期小于Runnable周期,则部分读取实际是没有意义的,所以有一个Update的标志,是非常有必要的。本文介绍在Simulink中配置Update flag及其使用。

建立带Update flag的模型

Update flag只针对于ExplicitReceive的Rport,下面的模型中已经建立好一个Rport,还需要新增: 1.一个bool类型的输入端口 2.一个Enabled Subsystem模块 3.将bool类型的输入端口作为Enabled Subsystem模块的触发

Enabled Subsystem中不需要什么处理,如下

需要特别注意:新增的Enabled Subsystem需要放到Runnable中,否则会报错:模块 ‘rterunnable/receiverport_uptdateflag’ 只能连接到函数调用子系统

Autosar接口配置

配置新增的updateflag映射到IsUpdated,且关联同一个Rport及data element,如下: 配置好之后,就可以生成代码了

生成代码分析

对于新增了updateflag的代码,在Read函数前加了一个读取updateflag的函数调用,如下所示:

void RunnableTest_10ms(void) /* Explicit Task: RunnableTest_10ms */ { boolean tmpIsUpdated; /* Inport: '<Root>/ReceiverPort_Uptdateflag' */ tmpIsUpdated = Rte_IsUpdated_TestRport_Val(); /* RootInportFunctionCallGenerator generated from: '<Root>/RunnableTest_10ms' incorporates: * SubSystem: '<Root>/RunnableTest_10ms_call' */ /* Outputs for Enabled SubSystem: '<S1>/Enabled Subsystem' incorporates: * EnablePort: '<S3>/Enable' */ if (tmpIsUpdated) { /* SignalConversion generated from: '<S3>/ReceiverPort' incorporates: * Inport: '<Root>/ReceiverPort' */ (void)Rte_Read_TestRport_Val(&rtARID_DEF.ReceiverPort); } /* End of Outputs for SubSystem: '<S1>/Enabled Subsystem' */ /* Outport: '<Root>/SenderPort' incorporates: * Constant: '<S1>/Constant' * Sum: '<S1>/Sum' */ (void)Rte_Write_PRportTest_Val((uint8)(rtARID_DEF.ReceiverPort + 1)); /* End of Outputs for RootInportFunctionCallGenerator generated from: '<Root>/RunnableTest_10ms' */ }

通过调用Rte_IsUpdated_TestRport_Val接口来获取Read数据的更新状态,只有在update有效时,才会进行read的动作,且会在Read函数中,将更新状态进行清0,以等待下一次更新标志置位后的读取。

总结

此处只介绍到Simulink及配置,对于生成的arxml中,也有对应的配置生成,导入Autosar配置工具之后,便可以查看对应的更新标志配置,及后面的接口mapping工作。

标签:

使用Simulink中的IsUpdated获取Rport的更新状态由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“使用Simulink中的IsUpdated获取Rport的更新状态