Обработка данных с TLC

Параметры матрицы

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 и для блоков Мультиплексора и других "виртуальных" блоков манипуляции сигнала (то есть, они активно не копируют свои входные параметры, просто ссылки на них).

Скомпилированный образцовый файл, model.rtw, представляет матрицы как строки в синтаксисе MATLAB без подразумеваемого формата устройства хранения данных. Это так, можно скопировать строку из файла .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) возвращает "&model_P.s1_Look_Up_Table_2_D_Table[nRows]" и для встроенного и для невстроенного кода блока TLC.

Параметры матрицы похожи на другие параметры TLC. Только те параметры, к которым явным образом получает доступ библиотечная функция TLC во время генерации кода, помещаются в структуру параметров. Так, следуя примеру, s1_Look_Up_Table_2_D_Table не объявляется, если LibBlockParameter или LibBlockParameterAddr явным образом не получают доступ к нему.

Похожие темы