'rtwinext': undefined symbol "__imp__Z13TT_Initializev" Error loading real-time executable Error occurred while executing External Mode MEX-file motive 1.5 API C-MEX S-Function
    9 vues (au cours des 30 derniers jours)
  
       Afficher commentaires plus anciens
    
    Or Hirshfeld
 le 13 Mai 2015
  
    
    
    
    
    Commenté : Christine
 le 10 Juin 2015
            I wrote custom C-mex s-function to get data from external software using API Library. the s-function is working well in Normal mode but when i switch to external mode using Real-Time Windows Target it show the following error.
also i"m using C++ compiler because the API Library is written in C++.
Error occurred while executing External Mode MEX-file 'rtwinext': Error loading real-time executable: undefined symbol "__imp__Z13TT_Initializev"
I'm trying to get position data from Natural-Point's optitrack cameras using Motive 1.5 API and to control a quad-copter in real-time Simulink
my project is avilable in GitHub: https://github.com/orhirshfeld/Motive-S-function.git

my s-function is the following:
#define S_FUNCTION_NAME Get_Data_From_Motive_API_v2_realtime #define S_FUNCTION_LEVEL 2
#include "simstruc.h" //for s-function building
//#include "mex.h" //for mexing
//#include stdio.h //for printf function //#include windows.h //for sleep function //#include math.h //for isnan function
#include "NPTrackingTools.h" //for motive API
/*================* * Build checking ================*/
/* Function: mdlInitializeSizes =============================================== * Abstract: * Setup sizes of the various vectors.  / static void mdlInitializeSizes(SimStruct *S) { ssSetNumSFcnParams(S, 0); if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; / Parameter mismatch will be reported by Simulink */ }
    if (!ssSetNumInputPorts(S, 1)) return;
    ssSetInputPortWidth(S, 0, 1);
    ssSetInputPortDataType(S, 0, DYNAMICALLY_TYPED );
    ssSetInputPortDirectFeedThrough(S, 0, 1);
    if (!ssSetNumOutputPorts(S,8)) return; // insert here to change number of output ports
    ssSetOutputPortWidth(S, 0, 1);
    ssSetOutputPortDataType(S, 0, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 1, 1);
    ssSetOutputPortDataType(S, 1, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 2, 1);
    ssSetOutputPortDataType(S, 2, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 3, 1);
    ssSetOutputPortDataType(S, 3, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 4, 1);
    ssSetOutputPortDataType(S, 4, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 5, 1);
    ssSetOutputPortDataType(S, 5, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 6, 1);
    ssSetOutputPortDataType(S, 6, DYNAMICALLY_TYPED );
    ssSetOutputPortWidth(S, 7, 1);
    ssSetOutputPortDataType(S, 7, DYNAMICALLY_TYPED );
    ssSetNumSampleTimes(S, 1);
    /* specify the sim state compliance to be same as a built-in block */
    ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE);
    ssSetOptions(S,
                 SS_OPTION_CALL_TERMINATE_ON_EXIT |
                 SS_OPTION_EXCEPTION_FREE_CODE);
// SS_OPTION_WORKS_WITH_CODE_REUSE and SS_OPTION_USE_TLC_WITH_ACCELERATOR were romoved
    // set inner value for old_timestamp to messure delta time btween ithreations
    ssSetNumDWork(S, 1);
    ssSetDWorkWidth(S, 0, 1);
    ssSetDWorkDataType(S, 0, SS_DOUBLE);
}
/* Function: mdlInitializeSampleTimes ========================================= * Abstract: * Specifiy that we inherit our sample time from the driving block.  */ static void mdlInitializeSampleTimes(SimStruct *S) { ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME); ssSetOffsetTime(S, 0, 0.0); ssSetModelReferenceSampleTimeDefaultInheritance(S); }
#define MDL_START void mdlStart(SimStruct S) { int ret1; const char project_file_name[130] = "c:\\Users\\sasson\\onedrive\\work control lab aero summer 2014 technion\\C_code\\Motive-S-function\\MOTIVE15.ttp"; double *TimeStamp_old = (double) ssGetDWork(S,0);
    TimeStamp_old[0]=0;
    ret1=TT_Initialize();
    //Sleep(100); not avilable in real-time
    ret1=TT_LoadProject(project_file_name);
    //Sleep(1000); notavilable in real-time
}
/* Function: mdlOutputs =======================================================  / static void mdlOutputs(SimStruct *S, int_T tid) { InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); real_T *X = ssGetOutputPortRealSignal(S,0); real_T *Y = ssGetOutputPortRealSignal(S,1); real_T *Z = ssGetOutputPortRealSignal(S,2); real_T *Yaw = ssGetOutputPortRealSignal(S,3); real_T *Pitch = ssGetOutputPortRealSignal(S,4); real_T *Roll = ssGetOutputPortRealSignal(S,5); real_T *TimeStamp = ssGetOutputPortRealSignal(S,6); real_T *DeltaTime = ssGetOutputPortRealSignal(S,7); double *TimeStamp_old = (double) ssGetDWork(S,0);
    float x1=999, y1=999, z1=999, qx1=999, qy1=999, qz1=999, qw1=999, yaw1=999, pitch1=999, roll1=999;
    double          TimeStamp1=0;
    double          DeltaTime1=0;
    int_T           width = ssGetOutputPortWidth(S,0);
    int             ret2;
    int             ID_num;
    ID_num=(int) *uPtrs[0]; //obtain input    
    ret2=TT_UpdateSingleFrame();
    TT_TrackableLocation(ID_num, &x1, &y1, &z1, &qx1, &qy1, &qz1, &qw1, &yaw1, &pitch1, &roll1);
    TimeStamp1=TT_FrameTimeStamp();
    DeltaTime1=TimeStamp1-TimeStamp_old[0];
    TimeStamp_old[0]=TimeStamp1;
    *X=(real_T) x1;
    *Y=(real_T) y1;
    *Z=(real_T) z1;
    *Yaw=(real_T) yaw1;
    *Pitch=(real_T) pitch1;
    *Roll=(real_T) roll1;
    *TimeStamp=(real_T) TimeStamp1;
    *DeltaTime=(real_T) DeltaTime1;
    // Sleep(100); not avilable in real-time
}
/* Function: mdlTerminate ===================================================== * Abstract: * No termination needed, but we are required to have this routine.  */ static void mdlTerminate(SimStruct *S) { int_T ret3;
// ret4=TT_FinalCleanup(); //create error ret3=TT_Shutdown();
}
#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? / #include "simulink.c" / MEX-file interface mechanism / #else #include "cg_sfun.h" / Code generation registration function */ #endif
Thank you Or Hirshfeld אור הירשפלד
0 commentaires
Réponse acceptée
  Or Hirshfeld
 le 28 Mai 2015
        
      Modifié(e) : Or Hirshfeld
 le 28 Mai 2015
  
      2 commentaires
  David St-Onge
 le 29 Mai 2015
				ok, but what if you use #pragma comment with static .lib library? In my understanding it should work, but I'm having the same issue as you....
  Christine
 le 10 Juin 2015
				I'm facing a similar issue. Could you please report the answer from MATLAB support. It isn't quite legible. Thank you.
Plus de réponses (1)
  Anthony Poulin
      
 le 21 Mai 2015
        Hello,
I think that I have encountered a similar problem and it comes from "mex.h" (which is a Matlab API and if you simulate in external mode it can occur troubleshot).
Can you try to suppress the inclusion of mex.h (and relevant functions) on your code?
3 commentaires
  Anthony Poulin
      
 le 22 Mai 2015
				Can you tell me when did you get this error?
When trying to compile your s-function in a mex file? Or you succeed to do it but it happens when you launch your simulation?
Voir également
Catégories
				En savoir plus sur Simulink Coder dans Help Center et File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!





