Трассировка сгенерированного кода 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
в то время как
для
или 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®
Псевдокод
Внешний вид или местоположение комментариев могут варьироваться:
Даже если код реализации устраняется, например, из-за сворачивания констант, комментарии могут все еще появиться в сгенерированном коде.
Если полный блок функции или кода устраняется, комментарии могут быть устранены из сгенерированного кода.
Для определенной оптимизации комментарии могут быть разделены от сгенерированного кода.
Даже если вы не принимаете решение включать комментарии исходного кода в сгенерированный код, сгенерированный код включает по закону требуемые комментарии из исходного кода MATLAB.