simde2bi.c
上传用户:loeagle
上传日期:2013-03-02
资源大小:1236k
文件大小:4k
源码类别:

通讯编程文档

开发平台:

Matlab

  1. /* $Revision: 1.16 $ */
  2. /*
  3.  * Wes Wang 6/14/94
  4.  * Copyright 1996-2001 The MathWorks, Inc.
  5.  */
  6. /* specify the name of this S-Function. */
  7. #define S_FUNCTION_NAME simde2bi
  8. #include "simstruc.h"
  9. #include "tmwtypes.h"
  10. /* For RTW */
  11. #if defined(RT) || defined(NRT)  
  12. #undef  mexPrintf
  13. #define mexPrintf printf
  14. #endif
  15. /* Defines for easy access  the matrices which are passed in */
  16. #define NUM_ARGS    2 
  17. #define BUFF_LEN    ssGetArg(S, 0)
  18. #define CAL_BASE    ssGetArg(S, 1)
  19. /*
  20.  * mdlInitializeSizes - initialize the sizes array
  21.  */
  22. static void mdlInitializeSizes(SimStruct *S)
  23. {
  24.         int_T outSize;
  25.         outSize = (int_T)mxGetPr(BUFF_LEN)[0];    
  26.         ssSetNumContStates(    S, 0); /* number of continuous states */
  27.         ssSetNumDiscStates(    S, 0);       /* number of discrete states */
  28.         ssSetNumInputs    (    S, 1);   /* number of inputs */
  29.         ssSetNumOutputs   (    S, outSize);   /* number of outputs */
  30.         ssSetDirectFeedThrough(S, 1);       /* direct feedthrough flag */
  31.         ssSetNumSampleTimes(   S, 1);       /* number of sample times */
  32.         ssSetNumInputArgs(     S, NUM_ARGS);/* number of input arguments */
  33.         ssSetNumRWork(         S, 0);       /* number of real work vector elements */
  34.         ssSetNumIWork(         S, 0);      /* number of integer work vector elements */
  35.         ssSetNumPWork(         S, 0);      /* number of pointer work vector elements */
  36. }
  37. /*
  38.  * mdlInitializeSampleTimes - initialize the sample times array
  39.  *
  40.  * This function is used to specify the sample time(s) for your S-function.
  41.  * If your S-function is continuous, you must specify a sample time of 0.0.
  42.  * Sample times must be registered in ascending order.
  43.  */
  44. static void mdlInitializeSampleTimes(SimStruct *S)
  45. {
  46.     ssSetSampleTimeEvent(S, 0, INHERITED_SAMPLE_TIME);
  47.     ssSetOffsetTimeEvent(S, 0, FIXED_IN_MINOR_STEP_OFFSET);
  48. }
  49. /*
  50.  * mdlInitializeConditions - initialize the states
  51.  * Initialize the states, Integers and real-numbers
  52.  */
  53. static void mdlInitializeConditions(real_T *x0, SimStruct *S)
  54. {
  55. }
  56. /*
  57.  * mdlOutputs - compute the outputs
  58.  *
  59.  * In this function, you compute the outputs of your S-function
  60.  * block.  The outputs are placed in the y variable.
  61.  */
  62. static void mdlOutputs(real_T *y, const real_T *x, const real_T *u, SimStruct *S, int_T tid)
  63. {
  64.     long outSize, i, p;
  65.     long inNum;
  66.     inNum = (int_T)u[0];
  67.     outSize = (int_T)mxGetPr(BUFF_LEN)[0];
  68.     p = (int_T)mxGetPr(CAL_BASE)[0];
  69.     if (p < 2)
  70.         p = 2;       
  71.     if (inNum > 0) {
  72.         for (i=0; i < outSize; i++) {
  73.             y[i] = inNum % p;
  74.             inNum /= p;
  75.          }
  76.     } else {
  77.         for (i=0; i < outSize; i++)
  78.                 y[i] = 0;
  79.     }
  80. }
  81. /*
  82.  * mdlUpdate - perform action at major integration time step
  83.  *
  84.  * This function is called once for every major integration time step.
  85.  * Discrete states are typically updated here, but this function is useful
  86.  * for performing any tasks that should only take place once per integration
  87.  * step.
  88.  */
  89. static void mdlUpdate(real_T *x, const real_T *u, SimStruct *S, int_T tid)
  90. {
  91. }
  92. /*
  93.  * mdlDerivatives - compute the derivatives
  94.  *
  95.  * In this function, you compute the S-function block's derivatives.
  96.  * The derivatives are placed in the dx variable.
  97.  */
  98. static void mdlDerivatives(real_T *dx, const real_T *x, const real_T *u, SimStruct *S, int_T tid)
  99. {
  100. }
  101. /*
  102.  * mdlTerminate - called when the simulation is terminated.
  103.  *
  104.  * In this function, you should perform any actions that are necessary
  105.  * at the termination of a simulation.  For example, if memory was allocated
  106.  * in mdlInitializeConditions, this is the place to free it.
  107.  */
  108. static void mdlTerminate(SimStruct *S)
  109. {
  110. }
  111. #ifdef      MATLAB_MEX_FILE    /* Is this file being compiled as a MEX-file? */
  112. #include "simulink.c"      /* MEX-file interface mechanism */
  113. #else
  114. #include "cg_sfun.h"       /* Code generation registration function */
  115. #endif