-
Notifications
You must be signed in to change notification settings - Fork 1
UserStackData
The C signature for a MATLAB entry-point function is typically
void thread1(void)but if reentrant code is requested (cfg.MultiInstanceCode = true) and the MATLAB code:
- contains very large variables
- calls certain MATLAB functions with state
then the code generator may produce code with a call signature like
void thread1(userStackData *SD)or
void thread1(userStackData *SD, struct0_T *arg)where SD is a pointer to statically allocated storage of type userStackData which is defined in
user_data.h
#ifndef typedef_userPersistentData
#define typedef_userPersistentData
typedef struct {
unsigned int state[625];
} userPersistentData;
#endif /*typedef_userPersistentData*/
#ifndef typedef_userStackData
#define typedef_userStackData
typedef struct {
userPersistentData *pd;
} userStackData;The details of the structure/type will depend on details of the code. That storage must be initialized by an autogenerated function user_initialize.c which is called before the user function is invoked. The pd element must point to an instance of a userPersistentData type, either statically or dynamically allocated.
If the thread entry-point function requires a userStackData argument then this must be flagged to the thread stl.launch method by providing a third argument
stl.launch('thread1', arg, true);At the C-level this causes the stack data pointer to be passed to the thread entry-point function as the first passed parameter. The argument, if present, is the second passed parameter.
If the third argument to stl.launch is inconsistent with the generated code's use of a stack pointer argument then a run-time error will occur, most likely a segmentation violation.
If the user's main function user.m requires a stack pointer, this must be handled by editing main.c.
| This part of the process is difficult to fully automate. It requires inspection of the generated C code |
|---|