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 (MATLAB).
Simulink и генератор кода внутреннее форматирование хранения данных отличаются от MATLAB внутреннее хранение данных, форматирующее только в устройстве хранения данных массивов комплексного числа. В MATLAB действительные и мнимые части хранятся в отдельных массивах. В Simulink и продуктах генератора кода они хранятся в "чередованном" формате, где числа в альтернативе памяти, действительной, мнимой, действительной, мнимой, и т.д. Это соглашение позволяет эффективные внедрения маленьких сигналов на строках Simulink и для блоков Мультиплексора и других "виртуальных" блоков манипуляции сигнала (то есть, они активно не копируют свои входные параметры, просто ссылки на них).
Скомпилированный образцовый файл,
, представляет матрицы как строки в синтаксисе 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
явным образом не получают доступ к нему.