Трассировка сгенерированного кода C/C + + к исходному коду MATLAB ® позволяет:
Узнайте, как созданный код реализует ваш алгоритм.
Оцените качество созданного кода.
Трассировку можно выполнить одним из следующих способов:
Настройте Coder™ MATLAB для создания кода, включающего исходный код MATLAB в качестве комментариев. В комментариях тег отслеживания непосредственно предшествует каждой строке исходного кода. Тег отслеживания содержит сведения о расположении исходного кода. При использовании Embedded Coder ® в отчете о создании кода теги отслеживания связываются с соответствующим исходным кодом MATLAB.
С помощью Embedded Coder создайте отчет о создании кода, включающий интерактивное отслеживание. Интерактивная трассировка в отчете позволяет визуализировать сопоставление между исходным кодом MATLAB и сгенерированным кодом C/C + +. См. раздел Интерактивная трассировка между кодом MATLAB и сгенерированным кодом C/C + + (встроенный кодер).
Чтобы создать теги отслеживания в созданном коде, включите создание исходного кода MATLAB в виде комментариев.
В приложении MATLAB Coder установите исходный код MATLAB в качестве комментариев Yes.
В объекте конфигурации генерации кода установите MATLABSourceComments кому true.
В созданном коде теги отслеживания появляются непосредственно перед исходным кодом MATLAB в комментарии. Формат тега:
<filename>:<line number>.
Например, этот комментарий указывает, что код x = r * cos(theta); появляется в строке 4 в исходном файле straightline.m.
/* 'straightline:4' x = r * cos(theta); */
Сгенерированные комментарии, содержащие исходный код и тег отслеживания, отображаются в сгенерированном коде следующим образом.
В прямом исходном коде без if, while, for или switch , комментарий, содержащий исходный код, предшествует сгенерированному коду, реализующему инструкцию исходного кода. Этот комментарий появляется после комментариев пользователя, которые предшествуют сгенерированному коду.
Например, в следующем коде комментарий пользователя: /* Convert polar to Cartesian */, появляется перед созданным комментарием, содержащим первую строку исходного кода вместе с тегом прослеживаемости,
/* 'straightline:4' x = r * cos(theta); */.
Код MATLAB
function [x, y] = straightline(r,theta) %#codegen % Convert polar to Cartesian x = r * cos(theta); y = r * sin(theta);
Код комментария C
void straightline(double r, double theta, double *x, double *y)
{
/* Convert polar to Cartesian */
/* 'straightline:4' x = r * cos(theta); */
*x = r * cos(theta);
/* 'straightline:5' y = r * sin(theta); */
*y = r * sin(theta);
}Комментарий для if оператор непосредственно предшествует коду, реализующему оператор. Этот комментарий появляется после комментариев пользователя, которые предшествуют сгенерированному коду. Комментарии для elseif и else предложения появляются сразу после кода, реализующего предложение, и перед кодом, сгенерированным для операторов в предложении.
Код MATLAB
function y = ifstmt(u,v) %#codegen if u > v y = v + 10; elseif u == v y = u * 2; else y = v - 10; end
Код комментария C
double ifstmt(double u, double v)
{
double y;
/* 'ifstmt:3' if u > v */
if (u > v) {
/* 'ifstmt:4' y = v + 10; */
y = v + 10.0;
} else if (u == v) {
/* 'ifstmt:5' elseif u == v */
/* 'ifstmt:6' y = u * 2; */
y = u * 2.0;
} else {
/* 'ifstmt:7' else */
/* 'ifstmt:8' y = v - 10; */
y = v - 10.0;
}
return y;
}Комментарий для for заголовок инструкции непосредственно предшествует сгенерированному коду, реализующему заголовок. Этот комментарий появляется после комментариев пользователя, которые предшествуют сгенерированному коду.
Код MATLAB
function y = forstmt(u) %#codegen y = 0; for i = 1:u y = y + 1; end
Код комментария C
double forstmt(double u)
{
double y;
int i;
/* 'forstmt:3' y = 0; */
y = 0.0;
/* 'forstmt:4' for i = 1:u */
for (i = 0; i < (int)u; i++) {
/* 'forstmt:5' y = y + 1; */
y++;
}
return y;
}Комментарий для while заголовок инструкции непосредственно предшествует сгенерированному коду, реализующему заголовок инструкции. Этот комментарий появляется после комментариев пользователя, которые предшествуют сгенерированному коду.
Код MATLAB
function y = subfcn(y) coder.inline('never'); while y < 100 y = y + 1; end
Код комментария C
void subfcn(double *y)
{
/* 'subfcn:2' coder.inline('never'); */
/* 'subfcn:3' while y < 100 */
while (*y < 100.0) {
/* 'subfcn:4' y = y + 1; */
(*y)++;
}
}
Комментарий для switch заголовок инструкции непосредственно предшествует сгенерированному коду, реализующему заголовок инструкции. Этот комментарий появляется после комментариев пользователя, которые предшествуют сгенерированному коду. Комментарии для case и otherwise предложения появляются сразу после сгенерированного кода, реализующего предложение, и перед кодом, сгенерированным для операторов в предложении.
Код MATLAB
function y = switchstmt(u) %#codegen y = 0; switch u case 1 y = y + 1; case 3 y = y + 2; otherwise y = y - 1; end
Код комментария C
double switchstmt(double u)
{
double y;
/* 'switchstmt:3' y = 0; */
/* 'switchstmt:4' switch u */
switch ((int)u) {
case 1:
/* 'switchstmt:5' case 1 */
/* 'switchstmt:6' y = y + 1; */
y = 1.0;
break;
case 3:
/* 'switchstmt:7' case 3 */
/* 'switchstmt:8' y = y + 2; */
y = 2.0;
break;
default:
/* 'switchstmt:9' otherwise */
/* 'switchstmt:10' y = y - 1; */
y = -1.0;
break;
}
return y;
}Нельзя включать исходный код MATLAB в качестве комментариев для:
Функции панели инструментов MathWorks ®
P-код
Внешний вид или расположение комментариев может варьироваться:
Даже если код реализации исключается, например, из-за постоянного сворачивания, комментарии все равно могут появляться в сгенерированном коде.
Если полная функция или блок кода устранены, комментарии могут быть исключены из сгенерированного кода.
Для некоторых оптимизаций комментарии можно отделить от созданного кода.
Даже если вы не решили включить комментарии к исходному коду в созданный код, созданный код включает юридически обязательные комментарии из исходного кода MATLAB.