Трассировка Сгенерированного Кода C/C++ к Исходному коду MATLAB

Трассировка сгенерированного кода 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

Комментарий для 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

Комментарий для 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.

Похожие темы