MATLAB®, Simulink® и генератор кода используют упорядоченное по столбцам упорядоченное расположение для устройства хранения данных массивов (1D, 2D...). К следующему элементу массива в памяти получают доступ путем постепенного увеличения первого индекса массива. Например, эти пары элемента хранятся последовательно в памяти: A(i)
и A(i+1)
, B(i,j)
и B(i+1,j)
, C(i,j,k)
и C(i+1,j,k)
. Для получения дополнительной информации о внутреннем представлении данных MATLAB смотрите Данные MATLAB.
Simulink и генератор кода внутреннее форматирование хранения данных отличаются от MATLAB внутреннее хранение данных, форматирующее только в устройстве хранения данных массивов комплексного числа. В MATLAB действительные и мнимые части хранятся в отдельных массивах. В Simulink и продуктах генератора кода они хранятся в "чередованном" формате, где числа в альтернативе памяти, действительной, мнимой, действительной, мнимой, и т.д. Это соглашение позволяет эффективные внедрения маленьких сигналов на линиях Simulink и для блоков Mux и других "виртуальных" блоков манипуляции сигнала (то есть, они активно не копируют свои входные параметры, просто ссылки на них).
Скомпилированный файл модели,
, представляет матрицы как строки в синтаксисе MATLAB, без подразумеваемого формата устройства хранения данных. Это так, можно скопировать строку из model
.rtw.rtw
файл и вставка это в код MATLAB и имеют распознанный MATLAB.
TLC объявляет параметры матрицы блока Simulink как скалярные или 1D переменные типа массив
real_T scalar; real_T mat[ nRows * nCols ];
где real_T
может быть произвольный тип данных, поддержанный Simulink, и совпадать с типом переменной, данным в файле модели.
Например, 3х3 матрица в блоке Look-Up Table (2D)
1 2 3 4 5 6 7 8 9
хранится в
какmodel
.rtw
Parameter { Name "OutputValues" Value Matrix(3,3) [[1.0, 2.0, 3.0]; [4.0, 5.0, 6.0]; [7.0, 8.0, 9.0];] String "t" StringType "Variable" ASTNode { IsNonTerminal 0 Op SL_NOT_INLINED ModelParameterIdx 3 } }
и результаты в этом определении в model
H
typedef struct Parameters_tag { real_T s1_Look_Up_Table_2_D_Table[9]; /* Variable:s1_Look_Up_Table_2_D_Table * External Mode Tunable:yes * Referenced by block: * <S1>/Look-Up Table (2-D */ [ ... other parameter definitions ... ] } Parameters;
файл объявляет настоящее хранение для параметра матрицы, и вы видите, что формат упорядочен по столбцам. Таким образом, считайте вниз столбцы, затем через строки.model
H
Parameters model_P = { /* 3 x 3 matrix s1_Look_Up_Table_2_D_Table */ { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 }, [ ... other parameter declarations ...] };
Параметры матрицы доступов TLC через LibBlockMatrixParameter
и LibBlockMatrixParameterAddr
, где
LibBlockMatrixParameter(OutputValues, "", "", 0, "",
"", 1)
возвращает "
(автоматически оптимизированный отmodel
_P.s1_Look_Up_Table_2_D_Table [nRows
]"" [0+
) иnRows
*1]"
LibBlockMatrixParameterAddr(OutputValues, "", "",
0, "", "", 1)
возвращается "&
и для встроенного и для невстроенного кода блока TLC.model
_P.s1_Look_Up_Table_2_D_Table [nRows
]"
Параметры матрицы похожи на другие параметры TLC. Только те параметры, к которым явным образом получает доступ библиотечная функция TLC во время генерации кода, помещаются в структуру параметров. Так, следуя примеру, s1_Look_Up_Table_2_D_Table
не объявляется если LibBlockParameter
или LibBlockParameterAddr
явным образом получите доступ к нему.