Why does code generated by Embedded Coder change when subsystem does not change?

20 views (last 30 days)
Hi,
I am working on an aerospace product with Matlab/Simulink 2023b. Results of code generaton using Embedded Coder is unfortunately non-repeatable: file "A.c" from reusable subsystem stored in "A.mdl" sometimes changes when modifying other subsystems (B, C, ...) whereas file "A.mdl" has not changed. Changes in C code is not only in the comments or variable name; the number and order of statements change. However, the text generated by the %<ModelVersion> tag of our CGT template does not change.
This is problematic since once formal testing has been done on A, we want to take credit for it and avoid retesting it unless we do a functional change to A. It is not possible to skip retesting A.c because it's not impossible that Embedded Coder or the compiler introduce bugs.
Example of code generated:
/* DataTypeConversion: '<S395>/Data Type Conversion1' */
*rty_FMM_ACTIVEfdi_ui32 = (uint32_t)GNC_self_arg->dwork.fdi_ui8;
/* Constant: '<S395>/Constant1' */
*rty_FMM_ACTIVEoutflg_b = rtCP_pooled191;
/* Constant: '<S395>/Constant' */
*rty_FMM_ACTIVEstatusflg_ui32 = rtCP_pooled76;
which then becomes in a next generation where the model has not changed:
/* Constant: '<S366>/Constant1' */
*rty_FMM_ACTIVEoutflg_b = rtCP_pooled199;
/* DataTypeConversion: '<S366>/Data Type Conversion1' */
*rty_FMM_ACTIVEfdi_ui32 = (uint32_t)GNC_self_arg->dwork.fdi_ui8;
/* Constant: '<S366>/Constant' */
*rty_FMM_ACTIVEstatusflg_ui32 = rtCP_pooled81;
Is there some code generation settings that would allow deterministic behavior of Embedded Coder generation or a C-file basis?
Thanks

Answers (1)

Mark McBroom
Mark McBroom on 16 Nov 2024 at 22:38
The code from a subsystem model can change if the parent model changes, even if no changes were made to the subsystem. During the code generation process, the subsystem is "inlined" into the parent model and the overal model is run through the code generation process. Changes to other parts of the parent model can result in to changes to the code from the subsystem. The recommended approach is to convert the subsystem reference to a model reference.

Categories

Find more on Deployment, Integration, and Supported Hardware in Help Center and File Exchange

Products


Release

R2023b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!