Problem with code reusabilty of inlined S-Function // multiple referencing
7 views (last 30 days)
I'm trying to use model referencing in my project. Therefore, I need model references to models containing S-Functions. The S-Function is inlined using a tlc file and I have used
ssSetOptions(S,(SS_OPTION_USE_TLC_WITH_ACCELERATOR | SS_OPTION_WORKS_WITH_CODE_REUSE));
in the mdlInitializeSizes routine of the corresponding c file to make it reusable.
However, when trying to build the model, I keep getting the following error report:
'Configuration Parameters > Model Referencing > Total number of instances allowed per top model' is set to 'Multiple' for model 'Submodel'. S-Function block 'Submodel/Init_PWM/fcn_VentOn_uP1/fpga_interface' of this model does not support code reuse. This is not allowed in a model configured to be referenced multiple times.
To enable code reuse, the block must have a TLC implementation and the S-function's mdlInitializeSizes function must set the options 'SS_OPTION_USE_TLC_WITH_ACCELERATOR' and 'SS_OPTION_WORKS_WITH_CODE_REUSE'.
To configure the model to be referenced only once, change the configuration parameter 'Total number of instances allowed per top model' to 'One'.
Any suggestions about my point of failure?
A question closely related to the one above is: When will the mdlInitializeSizes c-routine be executed? Shouldn't it normally be ignored due to the existing tlc file?
Kaustubha Govind on 1 Mar 2011
Do you ensure that your S-function also meets all the other requirements for code reuse?
mdlInitializeSizes is run when the S-function's parent model is compiled by the Simulink Engine - in other words, right before code generation. The TLC file is used to generate code for the S-function. So, the S-function MEX file is ignored when the top-level model is calling into the referenced model's generated code.