Используйте сообщения причины пропуска, которые появляются в Code Replacement Viewer, чтобы анализировать и исправлять ошибки при замене кода.
Средство просмотра замещения кода отображает сообщения причины пропуска в информации трассировки для пропусков замены кода. Легенда, в которой перечислены все сообщения, отображаемые в отчете о промахе, предшествует подробным данным отчета. Сообщение состоит из:
Числовой идентификатор, который идентифицирует сообщение в деталях отчета.
Текст сообщения, который в некоторых случаях включает заполнители для имен аргументов, вызовов значений объектов сайта, значений записи таблицы и имен свойства.
Для примера:
1. Mismatched data types (argument name, CSO value, table entry value)
Круглые скобки представляют заполнители фактических значений, отображаемых в подробных данных отчета.
В Miss Source Locations таблице, в которой перечислены детали промаха, столбец Reason включает:
Идентификатор сообщения, как указано в легенде.
Значения заполнителя для этого образца сообщения причины промаха.
Следующие детали Reason указывают на несоответствие типа данных, поскольку объект сайта вызова задает тип данных int8
для аргументов y1
, u1
, и u2
, в то время как запись таблицы замещения кода задает uint32
.
1. y1, int8, uint32 u1, int8, uint32 u2, int8, uint32
В зависимости от вашей ситуации и сообщенной причины промаха, диагностируйте сообщения о промахах, ища образцы следующего:
Опечатка в определении записи таблицы замещения кода или настройка исходного параметра.
Информация, отсутствующая в записи таблицы замещения кода или в настройке исходного параметра.
Недопустимая или неправильная информация в определении записи таблицы замещения кода или в параметре source.
Аргументы, неправильно упорядоченные в определении записи таблицы замещения кода или в исходном коде замены.
Неудачная классификация алгоритма для операции сложения или вычитания из-за:
Идеальный аккумулятор не вычисляется, потому что тип входного параметра не является фиксированной точкой или коэффициенты корректировки наклона входных параметров не равны.
Входной или выходной приводы с типом приведения с плавающей точкой.
Входные или выходные построения с типами приведения, которые имеют различные коэффициенты регулировки наклона или смещения.
Выходные приведения не преобразуются в одно выходное приведение.
Входные смещения, приводящие к потере бит.
В следующем примере показано, как использовать информацию трассировки Code Replacement Viewer для устранения ошибок замены кода. Вы, должно быть, уже рассмотрели и протестировали замену кода для своего MATLAB® код.
Проверьте код, сгенерированный для определенного элемента кода, ища ожидаемую замену кода. Перегенерируйте или снова откройте отчет генерации кода для вашего кода MATLAB. Если отчет генерации кода, включающий отчет о замене кода для
, откройте файл matlabroot
/ toolbox/rtw/rtwdemos/crl_demo/addsub_two_int16.mcodegen/lib/addsub_two_int16/html/mldatx.html
. Дополнительные сведения о том, как выполнить регенерацию отчета, см. в разделе Проверка библиотеки замещения кода.
Чтобы изучить код, сгенерированный для функции, из отчета о генерации кода, откройте сгенерированный файл addsub_two_int16.h
.
extern void addsub_two_int16(double u1, double u2, short *b_y1, short *y2);
Генератор кода заменил код, но замена выполняется для подписанной версии 16-битных операций сложения и вычитания. Вы ожидали замены кода для операций с неподписанными данными.
Откройте Отчет о замене кода для кода MATLAB.
Щелкните ссылку, чтобы открыть средство просмотра замещения кода.
На левой панели средства просмотра выберите таблицу замещения кода. В данном примере выберите таблицу замещения кода crl_table_addsub
.
На средней панели выберите запись таблицы RTW_OP_ADD
с функцией реализации u16_add_u16_u16
.
На правой панели выберите вкладку Trace Information.
Эта Trace Information является таблицей, в которой перечислены следующие сведения для каждого промаха:
Вызовите предварительный просмотр объекта сайта. Объект сайта вызова является концептуальным представлением оператора сложения. Генератор кода использует этот объект, чтобы запросить библиотеку замены кода для соответствия.
Ссылка на исходное местоположение в функции MATLAB, где генератор кода рассматривал замену кода.
Причины, по которым произошел промах. Смотрите Сообщения о Мисс Причине.
В данном примере в отчете показаны промахи для функции addsub_two_int16.m
.
Найдите источник в информации трассировки. В зависимости от вашей ситуации и сообщенной причины промаха, рассмотрите поиск условия, такого как опечатка в определении записи таблицы замещения кода или настройка исходного параметра. Список условий, которые необходимо учесть, см. в разделе Сообщения о причине мисс.
В данном примере определите, почему код для функции addsub_two_int16
не заменяется кодом для беззнаковой 16-битной операции сложения. Причины промаха функции указывают на тип данных и несоответствия алгоритма:
Тип данных в объекте сайта вызова является 16-битным целым числом со знаком. Запись замены кода задает беззнаковое 16-битное целое число.
Свойство алгоритма в объекте сайта вызова RTW_CAST_AFTER_OP
в то время как запись замены кода задает RTW_CAST_BEFORE_OP
.
Исправьте указанный код MATLAB и соответствующие спецификации или запись таблицы замещения кода. Если проблема связана с кодом MATLAB, используйте исходное расположение в информации трассировки, чтобы найти код для исправления. В данном примере ожидалось, что операция сложения без знака для addsub_two_int16
функция.
Чтобы исправить несоответствия, в тестовом файле addsub_to_int16_test
, измените определения типов данных для u1
и u2
следующим образом:
u1 = uint16(10) u2 = uint16(10)
В приложении MATLAB Coder™:
Откройте проект, который содержит addsub_to_int16
функция.
Используйте обновленный тестовый файл addsub_to_int16_test
для автоматического переопределения типов входа.
Измените настройку алгоритма сложения и вычитания. Откройте библиотеку замещения кода crl_table_addsub
. Измените вход Algorithm настройку параметра из Cast before operation
(RTW_CAST_BEFORE_OP
) к Cast after operation
(RTW_CAST_AFTER_OP
).
Перегенерируйте код и отчет.
В окне «Отчет о замене кода» откройте Средство просмотра замещения кода. Используйте информацию трассировки Code Replacement Viewer, чтобы убедиться, что ваш код MATLAB или запись таблицы замены кода устраняет проблему замены кода. Информация о трассировке показывает хит для функции addsub_two_int16
.