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