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

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

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

Этот рабочий процесс применим к блокам C Caller в модели.

Пример

1. Откройте пример модели ex_sfcn_rowmajor_unset. Модели нужны эти дополнительные файлы:

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

open_system('ex_sfcn_rowmajor_unset');

2. Модель сконфигурирована с набором размещения Array на 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-Function Builder. Если вы используете Legacy Code Tool для интеграции функций C, используйте convertNDArrayToRowMajor опция в legacy_code. S-Function Builder и Legacy Code Tool применяют предшествующие транспонирования, когда S-функция установлена на размещение массива основной строки во время симуляции в режиме normal mode.

Похожие темы