servo_demo_sfun_registry.c
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:4k
源码类别:

matlab例程

开发平台:

Matlab

  1. #include "servo_demo_sfun.h"
  2. #include "sfcdebug.h"
  3. #define PROCESS_MEX_SFUNCTION_CMD_LINE_CALL
  4. unsigned int sf_process_check_sum_call( int nlhs, mxArray * plhs[], int nrhs,
  5.  const mxArray * prhs[] )
  6. {
  7.   extern unsigned int sf_servo_demo_process_check_sum_call( int nlhs, mxArray *
  8.    plhs[], int nrhs, const mxArray * prhs[] );
  9.   if(sf_servo_demo_process_check_sum_call(nlhs,plhs,nrhs,prhs)) return 1;
  10.   return 0;
  11. }
  12. unsigned int sf_process_autoinheritence_call( int nlhs, mxArray * plhs[], int
  13.  nrhs, const mxArray * prhs[] )
  14. {
  15.   extern unsigned int sf_servo_demo_autoinheritance_info( int nlhs, mxArray *
  16.    plhs[], int nrhs, const mxArray * prhs[] );
  17.   if(sf_servo_demo_autoinheritance_info(nlhs,plhs,nrhs,prhs)) return 1;
  18.   return 0;
  19. }
  20. unsigned int sf_mex_unlock_call( int nlhs, mxArray * plhs[], int nrhs, const
  21.  mxArray * prhs[] )
  22. {
  23.   char commandName[20];
  24.   if (nrhs<1 || !mxIsChar(prhs[0]) ) return 0;
  25.   /* Possible call to get the checksum */
  26.   mxGetString(prhs[0], commandName,sizeof(commandName)/sizeof(char));
  27.   commandName[(sizeof(commandName)/sizeof(char)-1)] = '';
  28.   if(strcmp(commandName,"sf_mex_unlock")) return 0;
  29.   while(mexIsLocked()) {
  30.     mexUnlock();
  31.   }
  32.   return(1);
  33. }
  34. extern unsigned int sf_debug_api( int nlhs, mxArray * plhs[], int nrhs, const
  35.  mxArray * prhs[] );
  36. static unsigned int ProcessMexSfunctionCmdLineCall(int nlhs, mxArray * plhs[],
  37.  int nrhs, const mxArray * prhs[])
  38. {
  39.   if(sf_debug_api(nlhs,plhs,nrhs,prhs)) return 1;
  40.   if(sf_process_check_sum_call(nlhs,plhs,nrhs,prhs)) return 1;
  41.   if(sf_mex_unlock_call(nlhs,plhs,nrhs,prhs)) return 1;
  42.   if(sf_process_autoinheritence_call(nlhs,plhs,nrhs,prhs)) return 1;
  43.   return 0;
  44. }
  45. static unsigned int sfMachineGlobalTerminatorCallable = 0;
  46. static unsigned int sfMachineGlobalInitializerCallable = 1;
  47. extern unsigned int sf_servo_demo_method_dispatcher(SimStruct *S, const char
  48.  *chartName, int_T method, void *data);
  49. unsigned int sf_machine_global_method_dispatcher(SimStruct *simstructPtr, const
  50.  char *chartName, int_T method, void *data)
  51. {
  52.   if(sf_servo_demo_method_dispatcher(simstructPtr,chartName,method,data)) return
  53.   1;
  54.   return 0;
  55. }
  56. extern void servo_demo_terminator(void);
  57. void sf_machine_global_terminator(void)
  58. {
  59.   if(sfMachineGlobalTerminatorCallable) {
  60.     sfMachineGlobalTerminatorCallable = 0;
  61.     sfMachineGlobalInitializerCallable = 1;
  62.     servo_demo_terminator();
  63.     sf_debug_terminate();
  64.   }
  65.   return;
  66. }
  67. extern void servo_demo_initializer(void);
  68. extern void servo_demo_debug_initialize(void);
  69. void sf_machine_global_initializer(void)
  70. {
  71.   if(sfMachineGlobalInitializerCallable) {
  72.     sfMachineGlobalInitializerCallable = 0;
  73.     sfMachineGlobalTerminatorCallable =1;
  74.     servo_demo_debug_initialize();
  75.     servo_demo_initializer();
  76.   }
  77.   return;
  78. }
  79. #define PROCESS_MEX_SFUNCTION_EVERY_CALL
  80. unsigned int ProcessMexSfunctionEveryCall(int_T nlhs, mxArray *plhs[], int_T
  81.  nrhs, const mxArray *prhs[]);
  82. #include "simulink.c"                   /* MEX-file interface mechanism */
  83. static void sf_machine_load_sfunction_ptrs(SimStruct *S)
  84. {
  85.   ssSetmdlInitializeSampleTimes(S,__mdlInitializeSampleTimes);
  86.   ssSetmdlInitializeConditions(S,__mdlInitializeConditions);
  87.   ssSetmdlOutputs(S,__mdlOutputs);
  88.   ssSetmdlTerminate(S,__mdlTerminate);
  89.   ssSetmdlRTW(S,__mdlRTW);
  90.   ssSetmdlSetWorkWidths(S,__mdlSetWorkWidths);
  91. #if defined(MDL_HASSIMULATIONCONTEXTIO)
  92.   ssSetmdlSimulationContextIO(S,__mdlSimulationContextIO);
  93. #endif
  94. #if defined(MDL_START)
  95.   ssSetmdlStart(S,__mdlStart);
  96. #endif
  97. #if defined(RTW_GENERATED_ENABLE)
  98.   ssSetRTWGeneratedEnable(S,__mdlEnable);
  99. #endif
  100. #if defined(RTW_GENERATED_DISABLE)
  101.   ssSetRTWGeneratedDisable(S,__mdlDisable);
  102. #endif
  103. #if defined(MDL_ENABLE)
  104.   ssSetmdlEnable(S,__mdlEnable);
  105. #endif
  106. #if defined(MDL_DISABLE)
  107.   ssSetmdlDisable(S,__mdlDisable);
  108. #endif
  109. #if defined(MDL_SIM_STATUS_CHANGE)
  110.   ssSetmdlSimStatusChange(S,__mdlSimStatusChange);
  111. #endif
  112. #if defined(MDL_EXT_MODE_EXEC)
  113.   ssSetmdlExtModeExec(S,__mdlExtModeExec);
  114. #endif
  115. #if defined(MDL_UPDATE)
  116.   ssSetmdlUpdate(S,__mdlUpdate);
  117. #endif
  118. }
  119. unsigned int ProcessMexSfunctionEveryCall(int_T nlhs, mxArray *plhs[], int_T
  120.  nrhs, const mxArray *prhs[])
  121. {
  122.   if (nlhs < 0) {
  123.     SimStruct *S = (SimStruct *)plhs[_LHS_SS];
  124.     int_T flag = (int_T)(*(real_T*)mxGetPr(prhs[_RHS_FLAG]));
  125.     if (flag == SS_CALL_MDL_SET_WORK_WIDTHS) {
  126.       sf_machine_load_sfunction_ptrs(S);
  127.     }
  128.   }
  129.   return 0;
  130. }