exponenta event banner

Трассировка сгенерированного кода C/C + + в исходный код MATLAB

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

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

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

Связанные темы