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

📄 pt_print.c

📁 simulink real-time workshop for dragon12 development board from
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
 * Copyright 1994-2002 The MathWorks, Inc.
 *
 * $RCSfile: pt_print.c,v $
 * $Revision: 1.16 $
 *
 * Abstract:
 *   Parameter tuning example code.
 */

#ifndef __PT_PRINT__
#define __PT_PRINT__

#include <mdl_info.h>
#include <stdio.h>

/* =============================================================================
 * Function: rt_ModifyParameter
 *
 * Abstract:
 *   This function updates all associated parameters for the specified
 *   parameter tuning record. The routine works for all data types.
 */
 
int_T rt_ModifyParameter(void            *mpi,
                         ParameterTuning *ptRec, 
                         void            *_newValue)
{
  uint_T paramIdx;
  uint_T rowIdx;
  uint_T colIdx;

  uint_T nRows     = ptinfoGetNumRows(ptRec);
  uint_T nCols     = ptinfoGetNumCols(ptRec);
  uint_T nParams   = ptinfoGetNumInstances(ptRec);
  uint_T mapOffset = ptinfoGetParametersOffset(ptRec);

  ModelMappingInfo *MMI  = (ModelMappingInfo *) mpi;
  void * const     *pMap = mmiGetParametersMap(MMI);

  switch (ptinfoGetDataTypeEnum(ptRec)) {
    case SS_DOUBLE:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          real_T *param = (real_T *)(pMap[mapOffset + paramIdx]);
          real_T *newValue  = (real_T *) _newValue; /* param's new value */

          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] =
                          newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = 
                          newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_SINGLE:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          real32_T *param = (real32_T *)(pMap[mapOffset + paramIdx]);
          real32_T *newValue  = (real32_T *) _newValue; /* param's new value */
          
          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] =
                          newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = 
                          newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_INT8:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          int8_T *param = (int8_T *)(pMap[mapOffset + paramIdx]);
          int8_T *newValue  = (int8_T *) _newValue; /* param's new value */

          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] = newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_UINT8:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          uint8_T *param = (uint8_T *)(pMap[mapOffset + paramIdx]);
          uint8_T *newValue  = (uint8_T *) _newValue; /* param's new value */
          
          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] = newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_INT16:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          int16_T *param = (int16_T *)(pMap[mapOffset + paramIdx]);
          int16_T *newValue  = (int16_T *) _newValue; /* param's new value */
          
          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] = newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_UINT16:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          uint16_T *param = (uint16_T *)(pMap[mapOffset + paramIdx]);
          uint16_T *newValue  = (uint16_T *) _newValue; /* param's new value */
          
          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] = newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_INT32:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          int32_T *param = (int32_T *)(pMap[mapOffset + paramIdx]);
          int32_T *newValue  = (int32_T *) _newValue; /* param's new value */
          
          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[rowIdx*nCols + colIdx] = newValue[rowIdx*nCols + colIdx];
                  }
              }
              break;
              
            case rt_MATRIX_COL_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {
                      param[colIdx*nRows + rowIdx] = newValue[colIdx*nRows + rowIdx];
                  }
              }
              break;
              
            default:
              return(1);
          }
      }
      break;
    case SS_UINT32:
      for(paramIdx = 0; paramIdx < nParams; paramIdx++) {
          uint32_T *param = (uint32_T *)(pMap[mapOffset + paramIdx]);
          uint32_T *newValue  = (uint32_T *) _newValue; /* param's new value */
          
          switch( ptinfoGetClass(ptRec) ) {
            case rt_SCALAR:
              *param = *newValue;
              break;
              
            case rt_VECTOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  param[rowIdx] = newValue[rowIdx];
              }
              break;
              
            case rt_MATRIX_ROW_MAJOR:
              for(rowIdx = 0; rowIdx < nRows; rowIdx++) {
                  for(colIdx = 0; colIdx < nCols; colIdx++) {

⌨️ 快捷键说明

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