MATLAB ® хранит матричные данные и массивы (1-D, 2-D,...) в формате «основной столбец» в качестве вектора. Simulink ® и генератор кода могут хранить данные массива в формате «основной столбец» или «основная строка». Для массива, хранящегося в макете «основной столбец», элементы столбцов являются смежными в памяти. В макете основной строки элементы строк являются смежными. Макет массива также называется порядком, форматом и представлением. Порядок хранения элементов может иметь важное значение для интеграции, удобства использования и производительности. Определенные алгоритмы лучше работают с данными, хранящимися в определенном порядке.
Языки программирования и среды предполагают единую структуру массива для всех данных. MATLAB и Fortran по умолчанию используют компоновку «основной столбец», в то время как C и C++ используют компоновку «основная строка». С помощью Simulink Coder™ можно создать код C/C + +, использующий макет основной строки или макет основной строки.
Компьютерная память хранит данные в виде одномерных массивов. Например, при объявлении матрицы 3 на 3 программа сохраняет эту матрицу как одномерный массив с девятью элементами. По умолчанию MATLAB сохраняет эти элементы с макетом основного массива столбца. Элементы каждого столбца являются смежными в памяти.
Рассмотрим матрицу A:
A =
1 2 3
4 5 6
7 8 9A переводится в массив длиной 9 в следующем порядке: A(1) = A(1,1) = 1; A(2) = A(2,1) = 4; A(3) = A(3,1) = 7; A(4) = A(1,2) = 2; A(5) = A(2,2) = 5;
В формате «основной столбец» доступ к следующему элементу массива в памяти осуществляется путем приращения первого индекса массива. Например, эти пары элементов последовательно сохраняются в памяти:
A(i) и A(i+1)
B(i,j) и B(i+1,j)
C(i,j,k) и C(i+1,j,k)
Матрица A представлен в памяти по умолчанию с такой компоновкой:
1 4 7 2 5 8 3 6 9
В макете основного массива строк язык программирования хранит элементы строк непрерывно в памяти. В макете основной строки элементы массива хранятся как:
1 2 3 4 5 6 7 8 9
N-мерные массивы можно хранить в формате «основной столбец» или «основная строка». В макете «основной столбец» элементы из первого (крайнего слева) измерения или индекса являются смежными в памяти. В макете основной строки элементы из последнего (крайнего правого) измерения или индекса являются смежными.
Дополнительные сведения о внутреннем представлении данных MATLAB см. в разделе Данные MATLAB.
Программное обеспечение для генерации кода по умолчанию использует основной формат столбца по нескольким причинам:
Мир обработки сигналов и массивов в основном состоит из основных столбцов: MATLAB, LAPack, Fortran90 и DSP библиотек.
Столбец эквивалентен каналу в обработке на основе кадра. В этом случае хранение данных по основным столбцам является более эффективным.
Массив «столбец-основной» самосогласован с подматрицами компонентов:
Массив 2-D с большим столбцом - это простая конкатенация 1-D массивов.
Массив 3-D с большим столбцом - это простая конкатенация 2-D массивов.
Шаг - это количество ячеек памяти для индексирования на следующий элемент в том же измерении. Шаг первого измерения - это один элемент. Шаг n-го размерного элемента является произведением размеров нижних размерностей.
Основные n-D массивы имеют шаг 1 для наивысшего измерения. Манипуляции с субматрицами обычно осуществляют доступ к разбросанному набору данных в памяти, что не позволяет эффективно индексировать.
C использует основной формат строки. MATLAB и Simulink по умолчанию используют основной формат столбца. Можно настроить программное обеспечение для создания кода с компоновкой основного массива строк. При интеграции внешнего кода C с сгенерированным кодом см. рекомендации, приведенные в этой таблице.
| Действие | Рассмотреть |
|---|---|
| Настройте макет массива модели для создания кода. | В диалоговом окне Параметры конфигурации (Configuration Parameters) задайте для параметра конфигурации модели Компоновка массива (Array layout) значение Column-major или Row-major. |
| Обеспечение эффективных основных алгоритмов строк для моделирования и генерации кода. | Выберите параметр конфигурации модели Используйте алгоритмы, оптимизированные для компоновки основного массива строк. |
| Интегрируйте внешние функции кода C в макет основного массива строк с сгенерированным кодом. | Создайте S-функции, интегрирующие функции внешнего кода с сгенерированным кодом с помощью:
Блок C Caller используется для вызова внешних функций C в Simulink. Укажите макет массива пользовательских функций C с помощью параметра конфигурации модели Default function array layout. Также можно использовать |
Скомпилированный файл модели, , представляет матрицы как векторы символов в синтаксисе MATLAB без подразумеваемого формата хранения. Этот формат позволяет копировать вектор символа из model.rtw.rtw вставьте его в файл MATLAB и попросите MATLAB распознать его.
Например, матрица 3 на 3 в блоке константы
1 2 3
4 5 6
7 8 9model.rtw какParameter {
Identifier "Constant_Value"
LogicalSrc P0
Protected no
Value [1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0]
CGTypeIdx 18
ContainerCGTypeIdx 19
ReferencedBy Matrix(1,4)
[[0, -1, 0, 0];]
GraphicalRef Matrix(1,2)
[[0, 1];]
BHMPrmIdx 0
GraphicalSource [0, 1]
OwnerSysIdx [0, -1]
VarGroupIdx [1, 0]
WasAccessedAsVariable 1
} объявляет фактическое хранилище для параметра матрицы. Можно видеть, что формат находится в основном формате столбца.model_data.c

Parameters model_P = {
/* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]]
* Referenced by: '<Root>/Constant '
*/
{ 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 }
};Например, матрица 3 на 3 в блоке константы
1 2 3
4 5 6
7 8 9model.rtw какParameter {
Identifier "Constant_Value"
LogicalSrc P0
Protected no
Value [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
CGTypeIdx 18
ContainerCGTypeIdx 19
ReferencedBy Matrix(1,4)
[[0, -1, 0, 0];]
GraphicalRef Matrix(1,2)
[[0, 1];]
BHMPrmIdx 0
GraphicalSource [0, 1]
OwnerSysIdx [0, -1]
VarGroupIdx [1, 0]
WasAccessedAsVariable 1
} объявляет фактическое хранилище для параметра матрицы. Можно видеть, что формат находится в основном формате строки.model_data.h

Parameters model_P = {
/* Expression: [ [1,2,3] ; [4,5,6] ;[7,8,9]]
* Referenced by: '<Root>/Constant '
*/
{ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 }
};Форматирование внутреннего хранилища данных Simulink и генератора кода отличается от форматирования внутреннего хранилища данных MATLAB только хранением массивов сложных чисел. В MATLAB реальная и мнимая части хранятся в отдельных массивах. В Simulink и генераторе кода детали хранятся в перемежающемся формате. Числа в памяти чередуются вещественные, мнимые, вещественные, мнимые и так далее. Это соглашение позволяет эффективно реализовывать небольшие сигналы на линиях Simulink, для блоков Mux и других виртуальных блоков манипулирования сигналами. Например, сигналы активно не копируют свои входы, только ссылки.
Генератор кода не поддерживает эти блоки для генерации кода в макете основного массива строк.
Производная
Интегратор
Интегратор Лимитед
Интегратор второго порядка
Интегратор, с ограниченной ответственностью второго порядка
PID-контроллер
PID-контроллер (2DOF)
Состояние - пространство
Перенос Fcn
Задержка транспортировки
Переменная задержка по времени
Переменная задержка транспортировки
Нулевой полюс
Интерпретированная функция MATLAB
Level-2 S-функция MATLAB
Система MATLAB
Из электронной таблицы
IC
Сигналы переменного размера не поддерживаются для генерации кода основной строки.