Можно сгенерировать упорядоченный по строкам код для моделей, которые содержат S-функции. По умолчанию генератор кода генерирует упорядоченный по столбцам код. Чтобы узнать больше об упорядоченной по строкам генерации кода, смотрите Генерацию кода Матриц и Массивов.
Для существующей модели, которая содержит S-функции, когда вы устанавливаете размещение параметра конфигурации Массивов как Row-major
, параметр конфигурации Внешняя совместимость функций для упорядоченной по строкам генерации кода включен и установлен в error
по умолчанию. Когда вы пытаетесь создать существующую модель, вы получаете ошибку, потому что S-функции не включены для упорядоченной по строкам генерации кода по умолчанию. Можно протестировать совместимость S-функции для упорядоченной по строкам генерации кода при помощи Внешней совместимости функций для упорядоченного по строкам параметра конфигурации генерации кода.
Этот рабочий процесс также применим к блокам Вызывающей стороны C в модели.
1. Открытая модель ex_sfcn_rowmajor_unset
в качестве примера. Для модели нужны эти дополнительные файлы:
S-функция: ex_sfcn_rowmajor.c
TLC: ex_sfcn_rowmajor.tlc
.
Сохраните эти файлы к своей локальной папке.
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.