⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c2_model16to01.c

📁 《MATLAB7.0_Simulink6.0建模仿真开发与高级工程应用》书中程序
💻 C
字号:
/* Include files */
#include "model16to01_sfun.h"
#include "c2_model16to01.h"
#define CHARTINSTANCE_CHARTNUMBER       (chartInstance.chartNumber)
#define CHARTINSTANCE_INSTANCENUMBER    (chartInstance.instanceNumber)
#include "model16to01_sfun_debug_macros.h"

/* Type Definitions */

/* Named Constants */
#define c2_event_event                  (0)
#define c2_IN_NO_ACTIVE_CHILD           (0)
#define c2_IN_off                       (1)
#define c2_IN_on                        (2)

/* Variable Declarations */

/* Variable Definitions */
static SFc2_model16to01InstanceStruct chartInstance;

/* Function Declarations */
static void initialize_c2_model16to01(void);
static void enable_c2_model16to01(void);
static void disable_c2_model16to01(void);
static void finalize_c2_model16to01(void);
static void sf_c2_model16to01(void);
static void init_test_point_addr_map(void);
static void **get_test_point_address_map(void);
static rtwCAPI_ModelMappingInfo *get_test_point_mapping_info(void);

/* Function Definitions */
static void initialize_c2_model16to01(void)
{
  chartInstance.c2_tp_off = 0;
  chartInstance.c2_tp_on = 0;
  chartInstance.c2_is_active_c2_model16to01 = 0;
  chartInstance.c2_is_c2_model16to01 = 0;
}

static void enable_c2_model16to01(void)
{
}

static void disable_c2_model16to01(void)
{
}

static void finalize_c2_model16to01(void)
{
}

static void sf_c2_model16to01(void)
{
  _sfTime_ = (real_T)ssGetT(chartInstance.S);
  {
    uint8_T c2_previousEvent;
    c2_previousEvent = _sfEvent_;
    _sfEvent_ = c2_event_event;
    _SFD_CE_CALL(EVENT_ENTER_BROADCAST_FUNCTION_TAG,c2_event_event);
    _SFD_CC_CALL(CHART_ENTER_DURING_FUNCTION_TAG,0);
    if(chartInstance.c2_is_active_c2_model16to01 == 0) {
      _SFD_CC_CALL(CHART_ENTER_ENTRY_FUNCTION_TAG,0);
      chartInstance.c2_is_active_c2_model16to01 = 1;
      _SFD_CC_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
      _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,1);
      chartInstance.c2_is_c2_model16to01 = (uint8_T)c2_IN_off;
      _SFD_CS_CALL(STATE_ACTIVE_TAG,1);
      chartInstance.c2_tp_off = 1;
    } else {
      switch(chartInstance.c2_is_c2_model16to01) {
       case c2_IN_off:
        CV_CHART_EVAL(0,0,1);
        _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,1);
        _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,0);
        chartInstance.c2_tp_off = 0;
        chartInstance.c2_is_c2_model16to01 = (uint8_T)c2_IN_NO_ACTIVE_CHILD;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,1);
        chartInstance.c2_is_c2_model16to01 = (uint8_T)c2_IN_on;
        _SFD_CS_CALL(STATE_ACTIVE_TAG,0);
        chartInstance.c2_tp_on = 1;
        _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,1);
        break;
       case c2_IN_on:
        CV_CHART_EVAL(0,0,2);
        _SFD_CS_CALL(STATE_ENTER_DURING_FUNCTION_TAG,0);
        _SFD_CT_CALL(TRANSITION_ACTIVE_TAG,2);
        chartInstance.c2_tp_on = 0;
        chartInstance.c2_is_c2_model16to01 = (uint8_T)c2_IN_NO_ACTIVE_CHILD;
        _SFD_CS_CALL(STATE_INACTIVE_TAG,0);
        chartInstance.c2_is_c2_model16to01 = (uint8_T)c2_IN_off;
        _SFD_CS_CALL(STATE_ACTIVE_TAG,1);
        chartInstance.c2_tp_off = 1;
        _SFD_CS_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
        break;
       default:
        CV_CHART_EVAL(0,0,0);
        break;
      }
    }
    _SFD_CC_CALL(EXIT_OUT_OF_FUNCTION_TAG,0);
    _SFD_CE_CALL(EVENT_AFTER_BROADCAST_TAG,c2_event_event);
    _sfEvent_ = c2_previousEvent;
  }
}

static void init_test_point_addr_map(void)
{
  chartInstance.c2_testPointAddrMap[0] = &chartInstance.c2_tp_off;
  chartInstance.c2_testPointAddrMap[1] = &chartInstance.c2_tp_on;
}

static void **get_test_point_address_map(void)
{
  return &chartInstance.c2_testPointAddrMap[0];
}

static rtwCAPI_ModelMappingInfo *get_test_point_mapping_info(void)
{
  return &chartInstance.c2_testPointMappingInfo;
}

/* SFunction Glue Code */
static void init_test_point_mapping_info(SimStruct *S);
void sf_c2_model16to01_get_check_sum(mxArray *plhs[])
{
  ((real_T *)mxGetPr((plhs[0])))[0] = (real_T)(3031030198U);
  ((real_T *)mxGetPr((plhs[0])))[1] = (real_T)(3406101132U);
  ((real_T *)mxGetPr((plhs[0])))[2] = (real_T)(2847941724U);
  ((real_T *)mxGetPr((plhs[0])))[3] = (real_T)(3715882982U);
}

mxArray *sf_c2_model16to01_get_autoinheritance_info(void)
{
  const char *autoinheritanceInfoStructFieldNames[] =
  {"checksum","inputTypes","outputSizes","outputTypes"};
  mxArray *mxAutoinheritanceInfo = NULL;
  mxArray *mxChecksum = NULL;
  mxArray *mxInputTypes = NULL;
  mxArray *mxOutputSizes = NULL;
  mxArray *mxOutputTypes = NULL;

  mxAutoinheritanceInfo = mxCreateStructMatrix(1,1,
   sizeof(autoinheritanceInfoStructFieldNames)/sizeof(char *),
   autoinheritanceInfoStructFieldNames);

  mxChecksum = mxCreateDoubleMatrix(4,1,mxREAL);
  ((real_T *)mxGetPr((mxChecksum)))[0] = (real_T)(0U);
  ((real_T *)mxGetPr((mxChecksum)))[1] = (real_T)(0U);
  ((real_T *)mxGetPr((mxChecksum)))[2] = (real_T)(0U);
  ((real_T *)mxGetPr((mxChecksum)))[3] = (real_T)(0U);

  mxInputTypes = mxCreateDoubleMatrix(1,0,mxREAL);

  mxOutputSizes = mxCreateDoubleMatrix(2,0,mxREAL);
  mxOutputTypes = mxCreateDoubleMatrix(1,0,mxREAL);

  mxSetFieldByNumber(mxAutoinheritanceInfo,0,0,mxChecksum);
  mxSetFieldByNumber(mxAutoinheritanceInfo,0,1,mxInputTypes);
  mxSetFieldByNumber(mxAutoinheritanceInfo,0,2,mxOutputSizes);
  mxSetFieldByNumber(mxAutoinheritanceInfo,0,3,mxOutputTypes);

  return(mxAutoinheritanceInfo);
}

static void chart_debug_initialization(SimStruct *S)
{
  if(ssIsFirstInitCond(S)) {
    /* do this only if simulation is starting */
    if(!sim_mode_is_rtw_gen(S)) {
      {
        unsigned int chartAlreadyPresent;
        chartAlreadyPresent =
          sf_debug_initialize_chart(_model16to01MachineNumber_,
         2,
         2,
         3,
         0,
         1,
         0,
         0,
         0,
         &(chartInstance.chartNumber),
         &(chartInstance.instanceNumber),
         ssGetPath(S),
         (void *)S);
        if(chartAlreadyPresent==0) {
          /* this is the first instance */
          sf_debug_set_chart_disable_implicit_casting(_model16to01MachineNumber_,chartInstance.chartNumber,1);
          sf_debug_set_chart_event_thresholds(_model16to01MachineNumber_,
           chartInstance.chartNumber,
           1,
           1,
           1);

          _SFD_EVENT_SCOPE(0,1);
          _SFD_STATE_INFO(1,0,0);
          _SFD_STATE_INFO(0,0,0);
          _SFD_CH_SUBSTATE_COUNT(2);
          _SFD_CH_SUBSTATE_DECOMP(0);
          _SFD_CH_SUBSTATE_INDEX(0,1);
          _SFD_CH_SUBSTATE_INDEX(1,0);
          _SFD_ST_SUBSTATE_COUNT(1,0);
          _SFD_ST_SUBSTATE_COUNT(0,0);
        }
        _SFD_CV_INIT_CHART(2,1,0,0);
        {
          _SFD_CV_INIT_STATE(1,0,0,0,0,0,NULL,NULL);
        }
        {
          _SFD_CV_INIT_STATE(0,0,0,0,0,0,NULL,NULL);
        }

        _SFD_CV_INIT_TRANS(1,0,NULL,NULL,0,NULL);

        _SFD_CV_INIT_TRANS(2,0,NULL,NULL,0,NULL);

        _SFD_CV_INIT_TRANS(0,0,NULL,NULL,0,NULL);

        _SFD_TRANS_COV_WTS(1,0,0,0,0);
        if(chartAlreadyPresent==0)
        {
          _SFD_TRANS_COV_MAPS(1,
           0,NULL,NULL,
           0,NULL,NULL,
           0,NULL,NULL,
           0,NULL,NULL);
        }
        _SFD_TRANS_COV_WTS(2,0,0,0,0);
        if(chartAlreadyPresent==0)
        {
          _SFD_TRANS_COV_MAPS(2,
           0,NULL,NULL,
           0,NULL,NULL,
           0,NULL,NULL,
           0,NULL,NULL);
        }
        _SFD_TRANS_COV_WTS(0,0,0,0,0);
        if(chartAlreadyPresent==0)
        {
          _SFD_TRANS_COV_MAPS(0,
           0,NULL,NULL,
           0,NULL,NULL,
           0,NULL,NULL,
           0,NULL,NULL);
        }
      }
    }
  } else {
    sf_debug_reset_current_state_configuration(_model16to01MachineNumber_,chartInstance.chartNumber,chartInstance.instanceNumber);
  }
}

static void sf_opaque_initialize_c2_model16to01(void *chartInstanceVar)
{
  chart_debug_initialization(chartInstance.S);
  initialize_c2_model16to01();
}

static void sf_opaque_enable_c2_model16to01(void *chartInstanceVar)
{
  enable_c2_model16to01();
}

static void sf_opaque_disable_c2_model16to01(void *chartInstanceVar)
{
  disable_c2_model16to01();
}

static void sf_opaque_gateway_c2_model16to01(void *chartInstanceVar)
{
  sf_c2_model16to01();
}

static void sf_opaque_terminate_c2_model16to01(void *chartInstanceVar)
{
  finalize_c2_model16to01();
}

static void mdlSetWorkWidths_c2_model16to01(SimStruct *S)
{
  if(sim_mode_is_rtw_gen(S)) {
    int_T chartIsInlinable =
      (int_T)sf_is_chart_inlinable("model16to01",2);
    int_T chartIsMultiInstanced =
      (int_T)sf_is_chart_multi_instanced("model16to01",2);
    ssSetStateflowIsInlinable(S,chartIsInlinable);
    ssSetEnableFcnIsTrivial(S,1);
    ssSetDisableFcnIsTrivial(S,1);
    if(chartIsInlinable) {
    }
    ssSetInputPortOptimOpts(S, 0, SS_REUSABLE_AND_LOCAL);
    if (!sf_is_chart_instance_optimized_out("model16to01",2)) {
      int dtId;
      char *chartInstanceTypedefName =
        sf_chart_instance_typedef_name("model16to01",2);
      dtId = ssRegisterDataType(S, chartInstanceTypedefName);
      if (dtId == INVALID_DTYPE_ID ) return;
      /* Register the size of the udt */
      if (!ssSetDataTypeSize(S, dtId, 8)) return;
      if(!ssSetNumDWork(S,1)) return;
      ssSetDWorkDataType(S, 0, dtId);
      ssSetDWorkWidth(S, 0, 1);
      ssSetDWorkName(S, 0, "ChartInstance"); /*optional name, less than 16 chars*/
      sf_set_rtw_identifier(S);
    }
    ssSetHasSubFunctions(S,!(chartIsInlinable));
    ssSetOptions(S,ssGetOptions(S)|SS_OPTION_WORKS_WITH_CODE_REUSE);
  }

  ssSetChecksum0(S,(3031030198U));
  ssSetChecksum1(S,(3406101132U));
  ssSetChecksum2(S,(2847941724U));
  ssSetChecksum3(S,(3715882982U));

  ssSetExplicitFCSSCtrl(S,1);
}

static void mdlRTW_c2_model16to01(SimStruct *S)
{
  sf_write_symbol_mapping(S, "model16to01", 2);
  ssWriteRTWStrParam(S, "StateflowChartType", "Stateflow");
}

static void mdlStart_c2_model16to01(SimStruct *S)
{
  chartInstance.chartInfo.chartInstance = NULL;
  chartInstance.chartInfo.isEMLChart = 0;
  chartInstance.chartInfo.chartInitialized = 0;
  chartInstance.chartInfo.sFunctionGateway = sf_opaque_gateway_c2_model16to01;
  chartInstance.chartInfo.initializeChart = sf_opaque_initialize_c2_model16to01;
  chartInstance.chartInfo.terminateChart = sf_opaque_terminate_c2_model16to01;
  chartInstance.chartInfo.enableChart = sf_opaque_enable_c2_model16to01;
  chartInstance.chartInfo.disableChart = sf_opaque_disable_c2_model16to01;
  chartInstance.chartInfo.mdlRTW = mdlRTW_c2_model16to01;
  chartInstance.chartInfo.mdlStart = mdlStart_c2_model16to01;
  chartInstance.chartInfo.mdlSetWorkWidths = mdlSetWorkWidths_c2_model16to01;
  chartInstance.chartInfo.restoreLastMajorStepConfiguration = NULL;
  chartInstance.chartInfo.restoreBeforeLastMajorStepConfiguration = NULL;
  chartInstance.chartInfo.storeCurrentConfiguration = NULL;
  chartInstance.S = S;
  ssSetUserData(S,(void *)(&(chartInstance.chartInfo))); /* register the chart instance with simstruct */

  if(!sim_mode_is_rtw_gen(S)) {
    init_test_point_mapping_info(S);
  }
}

void c2_model16to01_method_dispatcher(SimStruct *S, int_T method, void *data)
{
  switch (method) {
   case SS_CALL_MDL_START:
    mdlStart_c2_model16to01(S);
    break;
   case SS_CALL_MDL_SET_WORK_WIDTHS:
    mdlSetWorkWidths_c2_model16to01(S);
    break;
   default:
    /* Unhandled method */
    sf_mex_error_message("Stateflow Internal Error:\n"
     "Error calling c2_model16to01_method_dispatcher.\n"
     "Can't handle method %d.\n", method);
    break;
  }
}

static const rtwCAPI_DataTypeMap dataTypeMap[] = {
  /* cName, mwName, numElements, elemMapIndex, dataSize, slDataId, isComplex, isPointer */
  {"uint8_T", "uint8_T", 0, 0, sizeof(uint8_T), SS_UINT8, 0, 0}
};

static real_T fixPtSlopeBiasVals[2] = {
  0,
  1
};

static const rtwCAPI_FixPtMap fixedPointMap[] = {
  /* *fracSlope, *bias, scaleType, exponent, isSigned */
  {NULL, NULL, rtwCAPI_FIX_RESERVED, 0, 0}
};

static const rtwCAPI_DimensionMap dimensionMap[] = {
  /* dataOrientation, dimArrayIndex, numDims*/
  {rtwCAPI_SCALAR, 0, 2}
};

static const uint_T dimensionArray[] = {
  1, 1
};

static real_T sfCAPIsampleTimeZero = 0.0;
static const rtwCAPI_SampleTimeMap sampleTimeMap[] = {
  /* *period, *offset, taskId, contextTid, mode */
  {&sfCAPIsampleTimeZero, &sfCAPIsampleTimeZero, 0, 0, 0}
};

static const rtwCAPI_Signals testPointSignals[] = {
  /* addrMapIndex, sysNum, SFRelativePath, dataName, portNumber, dataTypeIndex, dimIndex, fixPtIdx, sTimeIndex */
  {0, 0, "StateflowChart/off", "off", 0, 0, 0, 0, 0},
  {1, 0, "StateflowChart/on", "on", 0, 0, 0, 0, 0}
};

static rtwCAPI_ModelMappingStaticInfo testPointMappingStaticInfo = {
  /* block signal monitoring */
  {
    testPointSignals,                   /* Block signals Array  */
    2                                   /* Num Block IO signals */
  },

  /* parameter tuning */
  {
    NULL,                               /* Block parameters Array    */
    0,                                  /* Num block parameters      */
    NULL,                               /* Variable parameters Array */
    0                                   /* Num variable parameters   */
  },

  /* block states */
  {
    NULL,                               /* Block States array        */
    0                                   /* Num Block States          */
  },

  /* Static maps */
  {
    dataTypeMap,                        /* Data Type Map            */
    dimensionMap,                       /* Data Dimension Map       */
    fixedPointMap,                      /* Fixed Point Map          */
    NULL,                               /* Structure Element map    */
    sampleTimeMap,                      /* Sample Times Map         */
    dimensionArray                      /* Dimension Array          */
  },

  /* Target type */
  "float"
};

static void init_test_point_mapping_info(SimStruct *S) {
  rtwCAPI_ModelMappingInfo *testPointMappingInfo;
  void **testPointAddrMap;

  init_test_point_addr_map();
  testPointMappingInfo = get_test_point_mapping_info();
  testPointAddrMap = get_test_point_address_map();

  rtwCAPI_SetStaticMap(*testPointMappingInfo, &testPointMappingStaticInfo);
  rtwCAPI_SetPath(*testPointMappingInfo, "");
  rtwCAPI_SetFullPath(*testPointMappingInfo, NULL);
  rtwCAPI_SetDataAddressMap(*testPointMappingInfo, testPointAddrMap);
  rtwCAPI_SetChildMMIArray(*testPointMappingInfo, NULL);
  rtwCAPI_SetChildMMIArrayLen(*testPointMappingInfo, 0);

  ssSetModelMappingInfoPtr(S, testPointMappingInfo);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -