使用Simulink中的IsUpdated获取Rport的更新状态
- 游戏开发
- 2025-09-21 01:42:02

文章目录 前言建立带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的更新状态”