0
我可以通过将它定义为int32(参见下面的代码)将布尔数据输入到C s函数中。如何用SS_BOOLEAN或SS_UINT8类型输入布尔数据?我明确指定的信号数据类型在我的Simulink模型和S-功能,但是当我定义的数据作为布尔或UINT8,我得到了陌生号码,而不是1或0如何输入布尔值到Simulink C s函数
static void mdlInitializeSizes(SimStruct *S)
{
...
ssSetInputPortRequiredContiguous(S, 0, true);
ssSetInputPortDataType(S, 0, SS_INT32);
...
}
static void mdlOutputs(SimStruct *S, int_T tid)
{
const int *myBoolean = (const int*) ssGetInputPortSignal(S, 0);
...
}
更新(2011年5月20日) :我试过solution proposed by MikeT无济于事。作为输出,我期待[10 20 30],但得到[1 2 3]。下面是Simulink模型,在命令窗口和S-功能代码的输出中:
static void mdlOutputs(SimStruct *S, int_T tid)
{
InputBooleanPtrsType useData1 = (InputBooleanPtrsType) ssGetInputPortSignalPtrs(S, 0);
InputBooleanPtrsType useData2 = (InputBooleanPtrsType) ssGetInputPortSignalPtrs(S, 1);
const double *data1 = (const double*) ssGetInputPortSignal(S, 2);
const double *data2 = (const double*) ssGetInputPortSignal(S, 3);
double *outputs = (double *) ssGetOutputPortRealSignal(S, 0);
double *data;
int i;
if (*useData1){data = data1;}
else if (*useData2){data = data2;}
//assign outputs:
for (i=0; i<3; i++){outputs[i] = data[i];}
printf("useData1 = %d\n", *useData1);
printf("useData2 = %d\n", *useData2);
}
static void mdlInitializeSizes(SimStruct *S)
{
int iPort;
if (!ssSetNumInputPorts(S, 4))
{
return;
}
ssSetInputPortDataType(S, 0, SS_BOOLEAN);
ssSetInputPortDataType(S, 1, SS_BOOLEAN);
ssSetInputPortDataType(S, 2, SS_DOUBLE);
ssSetInputPortDataType(S, 3, SS_DOUBLE);
ssSetInputPortWidth(S, 0, 1);
ssSetInputPortWidth(S, 1, 1);
ssSetInputPortWidth(S, 2, 3);
ssSetInputPortWidth(S, 3, 3);
for (iPort = 0; iPort < 4 ; iPort++)
{
ssSetInputPortRequiredContiguous(S, iPort, true); /*direct input signal access*/
ssSetInputPortDirectFeedThrough(S, iPort, 1);
}
if (!ssSetNumOutputPorts(S, 1))
{
return;
}
ssSetOutputPortDataType(S, 0, SS_DOUBLE);
ssSetOutputPortWidth(S, 0, 3);
ssSetNumSampleTimes(S, 1);
ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);
}