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