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