В этом примере показано, как проследить между исходным кодом MATLAB® и сгенерированным кодом C/C++. Трассировка между исходным кодом и сгенерированным кодом помогает вам к:
Изучите, как генератор кода реализовал ваш алгоритм.
Отладьте проблемы в сгенерированном коде.
Оцените качество сгенерированного кода.
Если вы имеете Embedded Coder® и включаете производство отчета генерации кода с трассируемостью, вы можете просмотреть исходный код MATLAB и сгенерировали код C/C++ друг рядом с другом. Когда вы перемещаете указатель через код, можно следовать за подсвеченными трассировками к соответствующему сгенерированному коду или источнику код MATLAB.
Чтобы проиллюстрировать интерактивную трассируемость, этот пример представляет отчет для генерации статической библиотеки C для функции MATLAB lpsolve
это решает линейную программу:
максимизируйте y = c*x
подвергните A*x <= b
где x> = 0 и b> = 0
Пример также использует тестовую функцию lpsolve_test
это вызывает lpsolve
с представительными входными значениями.
Скопируйте lpsolve.m
и lpsolve_test.m
к перезаписываемой папке.
copyfile(fullfile(docroot, 'toolbox', 'ecoder', 'examples', 'lpsolve.m')) copyfile(fullfile(docroot, 'toolbox', 'ecoder', 'examples', 'lpsolve_test.m'))
Прежде чем вы сгенерируете код C/C++, это - лучшая практика экранировать ваш код MATLAB на готовность генерации кода.
coder.screener('lpsolve')
Отчет готовности генерации кода указывает на тот lpsolve
подходит для генерации кода.
Это - также лучшая практика проверять на проблемы во время выполнения путем генерации и тестирования MEX-функции.
Чтобы задать типы входных аргументов, передайте представительные входные значения codegen
-args
опция. В качестве альтернативы, потому что у вас есть тестовая функция, можно использовать coder.getArgTypes
определить типы.
Чтобы сгенерировать и протестировать MEX-функцию, используйте -test
опция.
c = [2 3 1 1]; A = [2 3 1 -1;1 0 2 1;0 2 1 1]; b = [27;9;18]; codegen lpsolve -args {c A b} -test lpsolve_test
Running test file: 'lpsolve_test' with MEX function 'lpsolve_mex'. x = 5 7 0 4 y = 35
codegen
успешно генерирует и запускает MEX-функцию.
Чтобы сгенерировать отчет, который имеет интерактивную трассируемость:
Создайте coder.EmbeddedCodeConfig
объект. EnableTraceability
свойство управляет трассируемостью. По умолчанию, EnableTraceability
свойством является true
.
Задайте типы входных параметров передающими представительными входными значениями к -args
опция.
Включите производство отчета генерации кода при помощи -report
опция.
cfg = coder.config('lib', 'ecoder', true); codegen -config cfg lpsolve -args {c A b} -report
Чтобы открыть отчет генерации кода, нажмите View report.
В панели кода вы видите lpsolve.m
.
Чтобы позволить проследить, на вкладке Report, нажимают Trace Code.
Вы видите исходный код MATLAB и сгенерированный код C друг рядом с другом.
Можно проследить от кода MATLAB до кода С или от кода С до кода MATLAB. Прослеживаемый код отмечен синим на стороне, которую вы прослеживаете от и с оранжевым на стороне, до которой вы прослеживаете. Когда вы перемещаете указатель через прослеживаемый код, код подсвечен в фиолетовом, и вы видите трассировки к соответствующему коду с другой стороны. Когда вы выбираете подсвеченный код путем нажатия на него, код становится желтым, и вы видите трассировки, даже когда вы отодвигаете указатель от выбора. Код остается выбранным, пока вы не нажимаете Esc или выбираете различный код. Чтобы изменить сторону, от которой вы прослеживаете, выберите код с другой стороны.
Исследуйте трассировку в отчете в качестве примера.
В коде MATLAB укажите на while
- цикл, который запускается в линии 38 и прокручивает вниз до целого while
- цикл в поле зрения.
Вы видите этот символ, который говорит вам, что подсвеченный код MATLAB имеет одну трассировку, которая не является в поле зрения.
Вы видите соответствующий код С в отдельном окне в панели кода С.
В панели кода С прокрутите вниз, пока вы не видите код С, который соответствует while
цикл.
В коде MATLAB переместите указатель через различные элементы синтаксиса в while
цикл. Подсветите переменные, выражения и блоки кода.
Когда вы перемещаете указатель через выражения, которые являются частью больших выражений, различными оттенками фиолетовой справки вы, чтобы найти соответствующее выражение в соответствующем коде С. Например, в линии 43, сделайте паузу по i
.
В коде MATLAB положите обратно указатель к while
- цикл, который запускается в линии 38. Когда целый цикл будет подсвечен в фиолетовом, выберите его путем нажатия. Когда вы перемещаете указатель за пределами трассировки, желтое выделение идентифицирует выбранную трассировку.
Чтобы очистить выбор, нажмите Esc или выберите различный код.
Когда код прослеживает больше чем до одного места в соответствующем источнике или сгенерированном коде:
Если вы делаете паузу по коду, который вы прослеживаете наверху панели кода, вы видите количество трассировок.
Если некоторые трассировки не в поле зрения, вы видите символ, который говорит вам, сколько трассировок вне поля зрения.
В панели кода, если вы выбираете код, который вы хотите проследить наверху панели кода, можно выбрать трассировку, которую вы хотите видеть.
В отчете для lpsolve
, просмотрите несколько трассировок.
Приостановите по линии 36
.
Наверху панели кода вы видите ту линию 36
имеет две трассировки.
Избранная линия 36
.
Наверху панели кода вы видите местоположение первой трассировки.
Чтобы перечислить все трассировки, кликните по стрелке вправо трассировок.
В генерации кода сообщают для lpsolve
, все трассировки из кода MATLAB переходят к одному файлу C lpsolve.c
. Если код MATLAB прослеживает до нескольких файлов C выше кода С, вы видите, что символ, такой как это обеспечивает количество дополнительных файлов, в которых можно найти трассировку. Если вы кликаете по символу, можно выбрать файл, который вы хотите видеть. Если вы выбираете код MATLAB, то можно выбрать трассировку, которую вы хотите видеть.
Аналогично, выше исходного кода MATLAB, символ тот, который указывает, что подсвеченный код С прослеживает до нескольких файлов MATLAB.
К представлению lpsolve.c
на левой стороне панели кода, в списке сгенерированных файлов, нажимают lpsolve.c
.
Чтобы просмотреть код MATLAB на левой стороне панели кода, кликните по функции MATLAB, например, lpsolve
.
Когда вы не находитесь в режиме трассировки:
В коде MATLAB, если вы указываете на переменную или выражение, подсказка предоставляет информацию, такую как тип.
В коде С ссылки переходят к другим частям кода, таким как тип или функциональные определения.
Когда вы будете в режиме трассировки, чтобы включить подсказки кода MATLAB и ссылки кода С, удерживайте Ctrl. Подсказки кода MATLAB доступны только для выбранной функции MATLAB.
В отчете для lpsolve
, просмотрите информацию о типе для переменной.
В панели MATLAB Source выберите pivot
.
В панели кода удерживайте Ctrl и приостановите по входному параметру i
.
На платформе Macintosh используйте ключ Command вместо Ctrl.
Чтобы представить отчет генерации кода, который не включает трассируемость:
В coder.EmbeddedCodeConfig
объект, набор EnableTraceability
свойство к false
.
В приложении MATLAB Coder™, набор Enable code traceability к No
.