Укажите, что имя типа данных работает вектор
const char_T *ssSetDWorkName(SimStruct *S, int_T vector, char_T *name)
S
SimStruct, представляющий Блок s-function.
vector
Индекс вектора работы, где индекс является одним из 0
, 1
, 2
, ...
ssGetNumDWork(S)-1
.
name
Имя вектора работы.
Имя вектора DWork вводится в name
.
Используйте в mdlInitializeSizes
или в mdlSetWorkWidths
, чтобы указать, что имя для заданного типа данных работает вектор. Продукт Simulink® Coder™ использует это имя, чтобы маркировать вектор работы в сгенерированном коде. Если вы не задаете имя, продукт Simulink Coder генерирует имя для вектора DWork в коде. Для получения дополнительной информации об использовании векторов DWork смотрите, Как Использовать Векторы DWork.
ssSetDWorkName
хранит только указатель на вектор символов имени. Поэтому вектор символов имени должен быть в постоянной памяти; это не может быть локальная переменная.
C, C++
Следующий пример динамически генерирует и определяет имена нескольких векторов DWork.
#define MDL_SET_WORK_WIDTHS #if defined(MDL_SET_WORK_WIDTHS) static void mdlSetWorkWidths(SimStruct *S) { int_T i; /* Number of DWork vectors based on input width */ ssSetNumDWork(S, ssGetInputPortWidth(S,0)); /* Malloc space to store the names of the DWork vectors */ name=(char_T *)malloc(sizeof(char_T)*ssGetNumDWork(S)*16); for (i = 0; i < ssGetNumDWork(S); i++) { sprintf(&name[i*16], "DWork%d", i+1); ssSetDWorkName(S, i, &name[i*16]); } } #endif /* MDL_SET_WORK_WIDTHS */
Смотрите S-функции в sfcndemo_sfun_rtwdwork
для полного примера с помощью векторов DWork.