MATLAB Answers

What is the difference between ImplicitReceive and ExplicitReceive in AUTOSAR Code?

143 views (last 30 days)
What is the difference when changing DataAccessMode for AUTOSAR inputs between ImplicitReceive and ExplicitReceive?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 1 May 2020 at 4:00
Edited: MathWorks Support Team on 1 May 2020 at 13:31
In the AUTOSAR sense for the RTE, the main difference is the following:
  • ImplicitReceive: The input is always buffered. So, the input value remains the same in a single execution of the runnable, no matter how many times it is used.
  • ExplicitReceive: The input is not buffered. So, the input value changes whenever it is used within a single execution of the runnable.
However, when generating code from Simulink, the code for the explicit case can be seen as buffered in the code, as shown in the examples below:
1) ImplicitReceive
/* Model step function for TID1 */
void Runnable_2s(void) /* Sample time: [2.0s, 0.0s] */
{
/* Update for RateTransition: '<Root>/RateTransition' incorporates:
* DiscreteIntegrator: '<Root>/Integrator'
*/
Rte_IrvIWrite_Runnable_2s_IRV1(rtDW.Integrator_DSTATE);
/* Update for DiscreteIntegrator: '<Root>/Integrator' incorporates:
* Inport: '<Root>/In2_2s'
*/
rtDW.Integrator_DSTATE += 2.0 * Rte_IRead_Runnable_2s_ReceivePort_In2();
}
2) ExplicitReceive
/* Model step function for TID1 */
void Runnable_2s(void) /* Sample time: [2.0s, 0.0s] */
{
real_T tmpRead;
/* Inport: '<Root>/In2_2s' */
Rte_Read_ReceivePort_In2(&tmpRead);
/* Update for RateTransition: '<Root>/RateTransition' incorporates:
* DiscreteIntegrator: '<Root>/Integrator'
*/
Rte_IrvIWrite_Runnable_2s_IRV1(rtDW.Integrator_DSTATE);
/* Update for DiscreteIntegrator: '<Root>/Integrator' */
rtDW.Integrator_DSTATE += 2.0 * tmpRead;
}
As it can be observed from the code above, the explicit case can be considered buffered in the sense that "tmpRead" is used in the algorithm instead of direct calls to "Rte_Read".
This is required in order to make code and simulation behaviors match, because in Simulink there is no notion of a signal line changing value in the middle of a time step between downstream blocks reading it, for example.

  0 Comments

Sign in to comment.

More Answers (1)

Vincenzo Salvo
Vincenzo Salvo on 23 Oct 2019
Edited: Vincenzo Salvo on 23 Oct 2019
Is it possible to rename tmpRead variable when the ExplicitReceive option is active?
How? I wasn't able to change it using the "signal name must resolve to Simulink signal object" flag...
Thank you in advance

  0 Comments

Sign in to comment.

Sign in to answer this question.


Translated by