Трассировка сгенерированного кода C/C + + к исходному MATLAB® исходный код помогает вам:
Поймите, как сгенерированный код реализует ваш алгоритм.
Оцените качество сгенерированного кода.
Проследить можно с помощью одного из следующих методов:
Сконфигурируйте MATLAB Coder™, чтобы сгенерировать код, который включает исходный код MATLAB в качестве комментариев. В комментариях тег трассируемости непосредственно предшествует каждой строке исходного кода. Тег трассируемости содержит подробную информацию о местоположении исходного кода. Если у вас есть Embedded Coder®В отчете о генерации кода теги трассируемости ссылаются на соответствующий исходный код MATLAB.
С помощью Embedded Coder создайте отчет генерации кода, который включает интерактивную трассируемость. Интерактивная трассировка в отчете помогает вам визуализировать сопоставление между исходным кодом MATLAB и сгенерированным кодом C/C + +. Смотрите Интерактивное Отслеживание между Кодом MATLAB и Сгенерированным Кодом C/C + + (Embedded Coder).
Чтобы создать теги трассируемости в сгенерированном коде, включите генерацию исходного кода MATLAB в качестве комментариев.
В приложении MATLAB Coder установите MATLAB source code as comments равным 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);
Комментарий кода С
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
Комментарий кода С
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
Комментарий кода С
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
Комментарий кода С
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
Код с комментариями
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.