Получите адрес непрерывного сигнала, вводящего входной порт
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
, потому что он пытается получить доступ к входной памяти, которая недоступна.
Макрос 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);