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

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

Комментарий к 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® функции тулбокса

    • P-код

  • Внешний вид или расположение комментариев могут варьироваться:

    • Даже если код реализации исключен, например, из-за постоянного складывания, комментарии все равно могут появиться в сгенерированном коде.

    • Если полная функция или блок кода устранены, комментарии могут быть удалены из сгенерированного кода.

    • Для определенных оптимизаций комментарии могут быть отделены от сгенерированного кода.

    • Даже если вы не принимаете решение включать комментарии исходного кода в сгенерированный код, сгенерированный код включает юридически необходимые комментарии из исходного кода MATLAB.

Похожие темы