Export c++ code from simulink scheme with s-function
Show older comments
Hello everyone,
I have a simulink working simulink schema in which there are some s-function, I want to export this code in c++ and compile it. I already tried to export and compile a simple schema and it works, but when i try to compile the exported code of my project I get a lot of errors like
error: #error Unrecognized use
error: #error Must define one of RT, NRT, MATLAB_MEX_FILE, SL_INTERNAL, or FIPXT_SHARED_MODULE
error: #error Unhandled case
error: ‘mxArray’ does not name a type mxArray **dlgParams; /* The S-function parameters
error: ‘mxArray’ has not been declared mxArray **)
error: ‘mxArray’ does not name a type mxArray *propVal;
error: ‘RTWSfcnInfo’ does not name a type; did you mean ‘RTWLogInfo’? RTWSfcnInfo sfcnInfo
The main settings that i used are:
Code generation system target file --> grt.tlc
language --> C++
Pack code and artifact --> <name_zip>
Tool chain GNU gcc/g++ | gmake (64-bit Linux)
default parameter behavior --> tuanble
code interface packaging --> nonreusable function
external mode --> chcked
standar math library --> c++ 03(ISO)
single output/update function --> checked
i used a fixed step size solver
Im using Ubuntu 18.
The source is generated succesfully the problem is when i try to compile the code.
Once the code is generate I get a zip folder with all the sources and also some external header file that I include when I make the CMakeLists.txt. I also tryied to compile directly the code with the .mk file but also I get a bounch of errors. The problem is realated with the s-function because I built a simple simulink schema with a source an s-function that implements a dynamical model and an output and when i generate the code and compile it I get the same errors. I also tryied to make a simple schema without s-function and this works. So is there any settings for the s-function to be exportable?
Answers (1)
Srija Kethiri
on 16 Jan 2023
Hi Dario,
From my understanding, you are trying to generate the code for your model which has a s-function in it. When you are compiling the exported code getting an error.
This issue has several possible root causes. Here are some troubleshooting steps you can try to find the root cause of the issue.
1. Does the S-Function use TLC inlining files but also has the parameter "S-function modules" set to a specific file name?
If an S-Function has TLC inlining files, then the S-Function block parameter "S-function modules" should be left blank.
- If the "S-function modules" parameter is set to the name of MEX source code for the S-function, this will introduce non-inlined MEX source code into the build process.
- This results in an error message because the build process saw that the S-Functions were inlined with TLC, so it didn't put the -DRT onto the compile line.
- Refer to the following documentation page for more information: https://www.mathworks.com/help/ecoder/ug/inlining-s-functions.html
2. Did the C/C++ MEX S-Function file contain the following preprocessor directive?
#define MATLAB_MEX_FILE
This should be removed from the C/C++ MEX S-Function file.
- This definition will automatically be included in the compiler arguments when the MEX file is built.
- When writing your own C/C++ MEX S-Function, do not include the MATLAB_MEX_FILE definition.
- Refer to the following documentation page for information on creating a C MEX S-Function: https://www.mathworks.com/help/simulink/sfg/example-of-a-basic-c-mex-s-function.html
3. If you are you trying to build the code in an external IDE then please
Try the following troubleshooting steps:
- Make sure the required defines are set properly. You can find the required defines in the "defines.txt" text file in your model's code generation directory.
- Check to see if any compiler flags (for example RT or USE_RTMODEL) should be added to the external IDE.
- Check that the following folder is included by the external IDE:
<matlabroot>\extern\include
Hope this helps!
Categories
Find more on Simulink Coder in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!