Библиотеки замены кода могут выравнивать объекты данных, передаваемые в функцию замены, по заданной границе.
При использовании MATLAB ® Coder™ можно воспользоваться преимуществами реализации функций, для которых требуются выровненные данные для оптимизации производительности приложений. Чтобы настроить выравнивание данных для реализации функции:
Укажите требования к выравниванию данных в записи замены кода. Укажите выравнивание отдельно для каждого аргумента функции реализации или совместно для всех аргументов функции. См. раздел Определение требований к выравниванию данных для аргументов функции.
Укажите возможности выравнивания данных и синтаксис для одного или нескольких компиляторов. Включить спецификации трассы в запись регистрации библиотеки в rtwTargetInfo.m файл. См. раздел Предоставление спецификаций выравнивания данных для компиляторов.
Зарегистрируйте библиотеку, содержащую запись таблицы и объект спецификации трассы.
Настройте генератор кода для использования библиотеки замены кода и создания кода. Наблюдайте за результатами.
Примеры см. в разделе Базовый пример выравнивания данных замены кода и раздел «Выравнивание данных для реализаций функций» на странице примера «Оптимизация сгенерированного кода путем разработки и использования библиотек замены кода - Simulink ®».
Примечание
Если для замены, требующей выравнивания, используются импортированные данные (например, ввод-вывод функции точки входа или экспортированной функции), укажите выравнивание данных с помощью coder.dataAlignment операторов в коде MATLAB. Укажите выравнивание отдельно для каждого экземпляра импортированных данных. См. раздел Задание выравнивания данных в коде MATLAB для импортированных данных.
Чтобы указать требование выравнивания данных для аргумента в записи замены кода:
При определении функции замены в файле регистрации таблицы замены кода создайте объект дескриптора аргумента (RTW.ArgumentDescriptor). Использовать его AlignmentBoundary свойство для задания требуемой границы трассы и назначения объекта аргументу Descriptor собственность.
При определении функции замены с помощью инструмента «Замена кода» на вкладке «Информация о сопоставлении» в разделе «Свойства аргумента» для функции замены введите значение параметра «Значение трассы».

AlignmentBoundary свойство (или параметр Alignment value) определяет границу выравнивания для данных, передаваемых аргументу функции, в количестве байт. AlignmentBoundary допустимо только для адресуемых объектов, включая аргументы матрицы и указателя. Он неприменим для аргументов значения. Допустимые значения:
-1 (по умолчанию) - если данные являются Simulink.Bus, Simulink.Signal, или Simulink.Parameter указывает, что генератор кода определяет оптимальное выравнивание на основе использования. В противном случае указывает, что для этого аргумента не требуется выравнивание.
Положительное целое число, являющееся степенью 2, не превышающей 128 - указывает количество байтов в границе. Начальный адрес памяти для данных, выделенных для аргумента функции, кратен указанному значению. Если задать границу выравнивания, которая меньше естественного выравнивания типа данных аргумента, директива выравнивания будет выдана в сгенерированном коде. Однако целевой компилятор игнорирует директиву.
Следующий код определяет AlignmentBoundary для аргумента 16 байт.
hLib = RTW.TflTable; entry = RTW.TflCOperationEntry; arg = getTflArgFromString(hLib, 'u1','single*'); desc = RTW.ArgumentDescriptor; desc.AlignmentBoundary = 16; arg.Descriptor = desc; entry.Implementation.addArgument(arg);
На этом рисунке приведена спецификация эквивалентной границы трассы в диалоговом окне «Инструмент замены кода».

Примечание
Если модель импортируется Simulink.Bus, Simulink.Parameter, или Simulink.Signal задайте границу трассы в свойствах объекта с помощью свойства «Трасса». Дополнительные сведения см. в разделе Simulink.Bus, Simulink.Parameter, и Simulink.Signal.
Для поддержки выравнивания данных в сгенерированном коде опишите возможности выравнивания данных и синтаксис компиляторов в регистрации библиотеки замены кода. Укажите одну или несколько спецификаций выравнивания для каждого компилятора в записи реестра библиотеки.
Описание возможностей выравнивания данных и синтаксиса компилятора:
При определении записи регистрации библиотеки замены кода в rtwTargetInfo.m файл адаптации, добавить один или несколько AlignmentSpecification объекты в RTW.DataAlignment объект. Присоедините RTW.DataAlignment объект для TargetCharacteristics объект записи реестра.
RTW.DataAlignment объект также имеет свойство DefaultMallocAlignment, которая определяет границу выравнивания по умолчанию (в байтах), используемую компилятором для динамически выделяемой памяти. Если генератор кода использует динамическое выделение памяти для объекта данных, участвующего в замене кода, это значение определяет, удовлетворяет ли память требованию выравнивания замены. В противном случае генератор кода не использует замену. Значение по умолчанию для DefaultMallocAlignment является -1, указывая, что граница выравнивания по умолчанию, используемая для динамически выделяемой памяти, неизвестна. В этом случае генератор кода использует естественное выравнивание типа данных, чтобы определить, разрешить ли замену.
Кроме того, можно задать границу трассы для сложных типов с помощью addComplexTypeAlignment функция.
При создании функции файла настройки с помощью средства замены кода заполните следующие поля для каждого компилятора.

Щелкните символ «плюс» (+), чтобы добавить дополнительные спецификации компилятора.
Для каждой спецификации выравнивания данных введите следующую информацию.
AlignmentSpecification Собственность | Параметр диалогового окна | Описание |
|---|---|---|
AlignmentType | Тип трассы | Массив ячеек предопределенных перечисляемых строк, указывающий, какие типы выравнивания поддерживает данная спецификация.
В каждой спецификации трассы должно быть указано не менее |
AlignmentPosition | Положение выравнивания | Предопределенная перечисляемая строка, указывающая позицию, в которую необходимо поместить директиву выравнивания компилятора для типа выравнивания
Для типов трасс, отличных от |
AlignmentSyntaxTemplate | Синтаксис выравнивания | Указывает строку директивы выравнивания, поддерживаемую компилятором. Строка регистрируется в качестве синтаксического шаблона, содержащего местозаполнители. Поддерживаются следующие местозаполнители:
Например, для компилятора gcc можно указать |
SupportedLanguages | Поддерживаемые языки | Массив ячеек, указывающий языки, к которым применяется данная спецификация выравнивания, среди |
Вот спецификация выравнивания данных для компилятора GCC:
da = RTW.DataAlignment;
as = RTW.AlignmentSpecification;
as.AlignmentType = {'DATA_ALIGNMENT_LOCAL_VAR', ...
'DATA_ALIGNMENT_STRUCT_FIELD', ...
'DATA_ALIGNMENT_GLOBAL_VAR'};
as.AlignmentSyntaxTemplate = '__attribute__((aligned(%n)))';
as.AlignmentPosition = 'DATA_ALIGNMENT_PREDIRECTIVE';
as.SupportedLanguages = {'c', 'c++'};
da.addAlignmentSpecification(as);
tc = RTW.TargetCharacteristics;
tc.DataAlignment = da;Вот соответствующая спецификация в диалоговом окне Создать настройку (Generate customization) инструмента замены кода.

Если для замены кода кодера MATLAB, требующего выравнивания данных, используются импортированные данные, такие как входная точка или экспортированная функция ввода-вывода, укажите выравнивание данных по внешнему коду с помощью coder.dataAlignment операторов в коде MATLAB.
Если происходит замена кода кодера MATLAB, требующая выравнивания данных (использует импортированные данные), например, функция точки входа или экспортированная функция с вводом-выводом, укажите выравнивание данных замены кода с помощью coder.DataAlignment операторов в коде MATLAB.
Для определения требований к выравниванию данных для импортированных данных в коде MATLAB:
Для каждого экземпляра импортированных данных, для которого требуется выравнивание данных, укажите выравнивание в функции с помощью coder.dataAlignment ведомость формы:
coder.dataAlignment(' varName', align_value)
varName - символьный массив имени переменной, для которого требуется спецификация информации выравнивания. align_value - целое число, которое должно быть степенью 2, от 2 до 128. Это число определяет границу выравнивания мощности 2 байта.
Пример функции, определяющей выравнивание данных:
function y = testFunction(x1,x2) coder.dataAlignment('x1',16); % Specifies information coder.dataAlignment('x2',16); % Specifies information coder.dataAlignment('y',16); % Specifies information y = x1 + x2; end
Если testFunction является функцией точки входа или экспортируемой, импортированные данные x1, x2, и y не выравниваются автоматически генератором кода. coder.DataAlignment операторы для этих переменных предназначены только в качестве информации для генератора кода. Узлы вызовов, выделяющие память для данных, должны гарантировать, что данные выровнены, как указано.
Можно также задать выравнивание данных замены кода для экспортируемых данных, например, global переменная или ExportedGlobal класс хранения. Дополнительные сведения см. в разделе Выбор класса хранения для представления управляющих данных в сгенерированном коде.