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

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

Для существующей модели, которая содержит S-функции, когда вы устанавливаете размещение параметра конфигурации Массивов (Simulink Coder) как Row-major, параметр конфигурации Внешняя совместимость функций для упорядоченной по строкам генерации кода (Simulink Coder) включен и установлен в 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.

Похожие темы