MATLAB__S-FUNCTION-CmexS-mdlInitializeSizes

#define S_FUNCTION_NAME   funcname---------指定函数名称与文件名一致

#define S_FUNCTION_LEVEL  2---------------Cmex等级都为2

#include “simstruc.h”-------------必备头文件

//宏定义

#define TRUE   1

#define FALSE  0

#define NUM_PAR 5

/*************************************

CHANNELARRAY_ARG  ---ADC通道矩阵(0-7间的一个或多个值),同时定义信号宽度

SAMPLETIME(S) --采样时间

ATDBANK(S) ------Bank0或Bank1,每个bank提供8个通道

USE10BITS(S) ----如果use10bits=1,使用10bitsADC否则使用8位adc

LEFTJUSTIFY(S) ---1表示10bit的结果采用左对齐方式,否则使用右对齐

**********************************/

enum{

CHANNELARRAY_ARGC,

  SAMPLETIME_ARGC,

ATDBANK_ARGC,

USE10BITS_ARGC,

LEFTJUSTIFY_ARGC

};

 

//把通过ssGetSFcnParam传递进来的mxArray类型的指针指向的数据(标量)赋给C程序里的变量

#define ATDBANK(S) (mxGetScalar(ssGetSFcnParam(S,ATDBANK_ARGC)))  

#define USE10BITS(S) (mxGetScalar(ssGetSFcnParam(S,USE10BITS_ARGC)))

#define LEFTJUSTIFY(S) (mxGetScalar(ssGetSFcnParam(S,LEFTJUSTIFY_ARGC)))

#define SAMPLETIME(S) (mxGetScalar(ssGetSFcnParam(S,SAMPLETIME_ARGC)))

#define CHANNELARRAY_ARG(S) (ssGetSFcnParam(S,CHANNELARRAY_ARGC))

//模块初始化

static void mdlInitializeSizes(SimStruct *S)

{

//获取矩阵数据,返回索引值

const unsigned int *paramPtr =mxGetData(CHANNELARRAY_ARG(S));

int nChannels

//设定模块参数个数,第二个参数表示参数个数

ssSetNumSFcnParams(S,NUM_PAR);

if(ssGetNumSFcnParams(S)!=ssGetSFcnParamsCount(S)) return;//前者是目标参数值,后者是实际参数值,当两值不同时返回异常

//设定参数index=0....4五个参数在仿真过程中值不能被修改

ssSetSFcnParamNotTunable(S,0);

ssSetSFcnParamNotTunable(S,1);

ssSetSFcnParamNotTunable(S,2);

ssSetSFcnParamNotTunable(S,3);

ssSetSFcnParamNotTunable(S,4);

//函数返回channelsarray中的元素个数

nChannels=mxGetNumberOfElements(CHANNELARRAY_ARG(S));

//信号输入宽度设置为nchannels

if(!ssSetNumInputPorts(S,1)) return;

ssSetInputPortWidth(S,0,nChannels);

//信号输出宽度也设置为nchannels

if(!ssSetNumOutputPorts(S,1)) return;

ssSetOutputPortWidth(S,0,nChannels);

//use10bit设置,使用10bit时输出为uint16否则为unit8

if(USE10BITS(S))

{

    ssSetInputPortDataType(S,0,SS_UNIT16);

    ssSetOutputPortDataType(S,0, SS_UINT16);

}else

{

   ssSetInputPortDataType(S,0,SS_UNIT8);

    ssSetOutputPortDataType(S,0, SS_UINT8);

}

//输入信号在output中调用,需要设置为true

ssSetInputPortDirectFeedThrough(S,0,TRUE);

//设置采样次数

ssSetNumSampleTimes(S,1);

//选择

ssSetOptions(S,SS_OPTION_EXCEPTION_FREE_CODE);

}

你可能感兴趣的:(matlab)