Сгенерируйте общий код утилиты для пользовательских типов данных

По умолчанию, если в модели используется пользовательский тип данных (такой как Simulink.AliasType объект или класс перечисления), генератор кода помещает соответствующее определение типа (typedef) в model_types.h файл. Когда вы генерируете код из нескольких моделей, каждая модель дублирует определение типа. Эти повторяющиеся определения могут помешать вам компилировать тела сгенерированного кода вместе.

Однако можно сконфигурировать генератор кода, чтобы поместить одно определение типа в заголовочный файл в _sharedutils папка. Затем, когда вы генерируете код из модели, если определение типа уже существует в _sharedutils папка, генератор кода не дублирует определение, а вместо этого повторно использует его посредством включения (#include).

Через этот механизм можно поделиться:

Чтобы совместно использовать пользовательский тип данных для нескольких моделей:

  1. Определите тип данных. Для примера создайте Simulink.AliasType объект.

  2. Установите свойства возможностей данных и файла заголовка на определенные значения, которые позволяют совместное использование.

    Для объекта типа данных установите DataScope свойство к 'Exported' и, опционально, укажите имя файла заголовка через HeaderFile свойство.

    Для перечисления, которое вы задаете как enum класс в файле скрипта, реализуйте getDataScope метод (с возвращаемым значением 'Exported') и, опционально, реализуйте getHeaderFile способ.

    Для перечисления, которое вы задаете при помощи Simulink.defineIntEnumType function, установите 'DataScope' аргумент в виде пары 'Exported' и, опционально, задайте 'HeaderFile' аргумент в виде пары

  3. Используйте тип данных в моделях.

  4. Перед генерацией кода из каждой модели установите параметр конфигурации модели Shared code placement равным Shared location.

  5. Сгенерируйте код из моделей.

    Примечание

    Вы можете сконфигурировать определение пользовательского типа данных, чтобы оно появилось в заголовочном файле в _sharedutils папка. Общие служебные функции, который сборка модели генерирует в _sharedutils папка не использует пользовательское имя типа данных. Только код модели, расположенный в папках кода для каждой модели, использует пользовательское имя типа данных.

Похожие темы