Problem with code reusabilty of inlined S-Function // multiple referencing

7 views (last 30 days)
Eike
Eike on 1 Mar 2011
Hello,
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?

Answers (4)

Kaustubha Govind
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.
  2 Comments
Kaustubha Govind
Kaustubha Govind on 3 Mar 2011
In my book, a device driver is any software that somehow accesses a hardware resource. It would not be suitable for re-use because it could result in multiple instances trying to access the same hardware resource (a bad idea in most situations, unless the resource can manage competing requests).
Could you try creating multiple instances of your S-function is a single model and try generating code from it? (Don't use model reference). Are you able to build code successfully? Is the S-function code generated as a reusable function?

Sign in to comment.


Eike
Eike on 3 Mar 2011
mmh?
Commenting seems to be not the best idea since noone notices... :-)
  1 Comment
Kaustubha Govind
Kaustubha Govind on 3 Mar 2011
FYI: I had seen your comment yesterday, but didn't have time to address it. :)

Sign in to comment.


Eike
Eike on 3 Mar 2011
Building with multiple instances of the S-Function in one model works, we do that extensively. However, I just checked the code generation report and indeed all of my S-Functions are marked as not reusable due to the following reason:
The following block contains an S-Function that does not conform to Code Reuse restrictions. The S-Function block (a) should have a TLC implementation and (b) should set the option 'SS_OPTION_WORKS_WITH_CODE_REUSE'. [testmodel2/out_OutSignalCondition_lib/Init_PWM/fcn_PWMPEEPmax_uP2/fpga_interface]
Which is quite ironic since I (a) have a TLC implementation and (b) set the options SS_OPTION_WORKS_WITH_CODE_REUSE and SS_OPTION_USE_TLC_WITH_ACCELERATOR.
Maybe you're right and the real problem is that I'm accessing hardware. But then I'd kind of expect Matlab to tell me...
  1 Comment
Eike
Eike on 3 Mar 2011
Btw. I'm also pretty sure that my TLC file is used correctly since the block is marked as inlined.

Sign in to comment.


Eike
Eike on 4 Mar 2011
Okay, that was a really stupid problem. -.-
I just built the model in its original project path (before, I did in my own development folder with copies of all relevant libraries) and it works. I have no clue about the exact problem before, but since it works now I don't care too much.
Nevertheless thank you very much for your effort! :-)
  2 Comments
Kaustubha Govind
Kaustubha Govind on 4 Mar 2011
I'm glad you fixed the issue, but I agree that error reporting should be improved. I could create an internal change request to improve this error, but I will need an example model and S-function to reproduce the issue. Please let me know if it is possible for you to pare down your model to its bare minimum so we can use it for testing.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by