#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);
}