Диагностируйте ошибки при замене кода

Используйте сообщения причины пропуска, которые появляются в 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® код.

  1. Проверьте код, сгенерированный для определенного элемента кода, ища ожидаемую замену кода. Перегенерируйте или снова откройте отчет генерации кода для вашего кода MATLAB. Если отчет генерации кода, включающий отчет о замене кода для matlabroot/ toolbox/rtw/rtwdemos/crl_demo/addsub_two_int16.m, откройте файл codegen/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-битных операций сложения и вычитания. Вы ожидали замены кода для операций с неподписанными данными.

  2. Откройте Отчет о замене кода для кода MATLAB.

  3. Щелкните ссылку, чтобы открыть средство просмотра замещения кода.

  4. На левой панели средства просмотра выберите таблицу замещения кода. В данном примере выберите таблицу замещения кода crl_table_addsub.

  5. На средней панели выберите запись таблицы RTW_OP_ADD с функцией реализации u16_add_u16_u16.

  6. На правой панели выберите вкладку Trace Information.

    Эта Trace Information является таблицей, в которой перечислены следующие сведения для каждого промаха:

    • Вызовите предварительный просмотр объекта сайта. Объект сайта вызова является концептуальным представлением оператора сложения. Генератор кода использует этот объект, чтобы запросить библиотеку замены кода для соответствия.

    • Ссылка на исходное местоположение в функции MATLAB, где генератор кода рассматривал замену кода.

    • Причины, по которым произошел промах. Смотрите Сообщения о Мисс Причине.

    В данном примере в отчете показаны промахи для функции addsub_two_int16.m.

  7. Найдите источник в информации трассировки. В зависимости от вашей ситуации и сообщенной причины промаха, рассмотрите поиск условия, такого как опечатка в определении записи таблицы замещения кода или настройка исходного параметра. Список условий, которые необходимо учесть, см. в разделе Сообщения о причине мисс.

    В данном примере определите, почему код для функции addsub_two_int16 не заменяется кодом для беззнаковой 16-битной операции сложения. Причины промаха функции указывают на тип данных и несоответствия алгоритма:

    • Тип данных в объекте сайта вызова является 16-битным целым числом со знаком. Запись замены кода задает беззнаковое 16-битное целое число.

    • Свойство алгоритма в объекте сайта вызова RTW_CAST_AFTER_OP в то время как запись замены кода задает RTW_CAST_BEFORE_OP.

  8. Исправьте указанный код 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).

    • Перегенерируйте код и отчет.

  9. В окне «Отчет о замене кода» откройте Средство просмотра замещения кода. Используйте информацию трассировки Code Replacement Viewer, чтобы убедиться, что ваш код MATLAB или запись таблицы замены кода устраняет проблему замены кода. Информация о трассировке показывает хит для функции addsub_two_int16.

Похожие темы