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

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

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

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

Пример

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

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

open_system('ex_sfcn_rowmajor_unset');

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

3. Когда вы создаете модель, генератор кода отключает сборку, и вы видите это сообщение об ошибке:

4. Чтобы продолжить, выполнить одно из следующих действий:

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

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

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

Чтобы задать размещение массивов пользовательской S-функции, используйте функцию ssSetArrayLayoutForCodeGen SimStruct API. Можно установить перечислимый тип 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-функции, используйте размещение массива параметров, чтобы задать большинство S-функции. Для получения дополнительной информации смотрите Разработчика S-функции Диалоговое окно (Simulink). Если вы используете Legacy Code Tool, чтобы интегрировать функции C, используйте опцию convertNDArrayToRowMajor в legacy_code. Разработчик S-функции и Legacy Code Tool применяются предыдущий, транспонирует, когда S-функция установлена в размещение главного массива строки во время симуляции в режиме normal mode.

Похожие темы