聊城网站建设推广企业网站优化软件
文章目录
- 前言
- 建立带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工作。