Получите адрес смежного сигнала, входящего во входной порт
const void *ssGetInputPortSignal(SimStruct *S, int_T inputPortIdx)
S
SimStruct, представляющий блок S-Function.
inputPortIdx
Индекс порта, адрес которого необходим.
Указатель (void *
) к входному порту, заданному индексом inputPortIdx
.
Используйте, чтобы получить адрес смежного сигнала, входящего в входной порт. Ваша S-функция должна использовать этот макрос только в том случае, если mdlInitializeSizes
определил, что элементы входного сигнала являются смежными, используя ssSetInputPortRequiredContiguous
. Для несмежного входа используйте ssGetInputPortSignalPtrs
функция.
Примечание
Если вы указали, что входные порты переиспользуются
, тогда вы не можете использовать ssSetInputPortOptimOpts
ssGetInputPortSignal
где угодно, кроме mdlOutputs
. Для примера, если входы были заданы как переиспользуемые со SS_REUSABLE_AND_LOCAL
флаг, mdlUpdate
обычные ошибки, поскольку он пытается получить доступ к недоступной входной памяти.
Примечание
The ssGetInputPortSignal
макрос становится функцией, когда вы компилируете свою S-функцию в режиме отладки (mex -g
).
C, C++
Следующий код демонстрирует использование ssGetInputPortSignal
.
nInputPorts = ssGetNumInputPorts(S); for (i = 0; i < nInputPorts; i++) { int_T nu = ssGetInputPortWidth(S,i); if ( ssGetInputPortRequiredContiguous(S,i) ) { const void *u = ssGetInputPortSignal(S,i); UseInputVectorInSomeFunction(u, nu); } else { InputPtrsType u = ssGetInputPortSignalPtrs(S,i); for (j = 0; j < nu; j++) { UseInputInSomeFunction(*u[j]); } } }
Если вы знаете, что входы всегда real_T
сигналы, ssGetInputPortSignal
линия в указанном выше фрагменте кода будет
const real_T *u = ssGetInputPortRealSignal(S,i);