exponenta event banner

Создание основного кода строки для S-функций

Для моделей, содержащих S-функции, можно создать основной код строки. По умолчанию генератор кода генерирует основной код столбца. Дополнительные сведения о генерации кода основной строки см. в разделе Генерация кода матриц и массивов.

Для существующей модели, содержащей S-функции, при установке параметра конфигурации Array layout как Row-major, параметр конфигурации Совместимость внешних функций для генерации кода основной строки включен и установлен в error по умолчанию. При попытке создать существующую модель возникает ошибка, поскольку S-функции по умолчанию не включены для генерации кода основной строки. Совместимость S-функции для генерации кода большой строки можно проверить с помощью параметра конфигурации Совместимость внешних функций для генерации кода большой строки.

Этот рабочий процесс также применим к блокам вызывающего абонента C в модели.

Пример

1. Открыть пример модели ex_sfcn_rowmajor_unset. Модель нуждается в следующих дополнительных файлах:

Сохраните эти файлы в локальной папке.

open_system('ex_sfcn_rowmajor_unset');

2. Модель конфигурируется с макетом массива, равным Column-major. Чтобы включить генерацию основного кода строки, установите для формата Array значение Row-major.

3. При построении модели генератор кода завершает построение и появляется следующее сообщение об ошибке:

4. Для продолжения выполните одно из следующих действий:

  • Если необходимо протестировать существующие S-функции с основным кодом строки для модели, измените настройку параметра конфигурации Совместимость внешних функций для генерации основного кода строки на warning или none. Генератор кода завершает построение без генерации основного кода строки для S-функций.

  • Если требуется обновить S-функции таким образом, чтобы они были совместимы с компоновкой массива основной строки, используйте API S-функции, чтобы включить S-функцию для генерации кода основной строки.

Чтобы проверить модель для S-функций с неопределенной компоновкой массива, можно также выполнить проверки модели с помощью Model Advisor. Выберите функцию Identify TLC S-functions with unset array layout check и нажмите кнопку Run This Check. Если модель включает S-функции с неопределенной компоновкой массива, отображается предупреждение, например:

Чтобы указать макет массива определяемой пользователем S-функции, используйте функцию ssSetArrayLayoutForCodeGen API SimStruct. Можно задать перечисляемый тип SSArrayLayout кому:

  • SS_UNSET - Этот параметр является параметром по умолчанию, который отключает блок для генерации основного кода строки.

  • SS_COLUMN_MAJOR - Укажите блок только для генерации основного кода столбца.

  • SS_ROW_MAJOR - Укажите блок только для генерации основного кода строки.

  • SS_ALL - Укажите блок, разрешенный для создания кода, независимо от компоновки массива.

5. Обновить ex_sfcn_rowmajor.c путем добавления ssSetArrayLayoutForCodeGen в mdlInitializeSizes способ:

static void mdlInitializeSizes(SimStruct *S)
{    
    /* Specify array layout of the S-function */
    ssSetArrayLayoutForCodeGen(S, SS_ROW_MAJOR);
    .
    .
    .
}

Если на S-функцию не влияет компоновка массива, установите SSArrayLayout кому SS_ALL.

6. Скомпилировать S-функцию с помощью этой команды в окне команд MATLAB:

mex ex_sfcn_rowmajor.c
Building with 'gcc'.
MEX completed successfully.

7. Чтобы построить модель и создать код, нажмите клавиши Ctrl + B.

При создании S-функций с помощью S-Function Builder используйте параметр Array layout для указания большинства S-функций. Дополнительные сведения см. в разделе Автоматическое построение S-функций с помощью построителя S-функций. Если для интеграции функций C используется устаревший инструмент кода, используйте convertNDArrayToRowMajor опция в legacy_code. S-Function Builder и Legacy Code Tool применяют предшествующие транспозиты, если для S-функции во время моделирования в обычном режиме установлен макет массива с основными строками.

Связанные темы