exponenta event banner

Устранение ошибок при замене кода

Используйте сообщения о несоответствии, появляющиеся в средстве просмотра замены кода, для анализа и исправления промахов замены кода.

Сообщения о промахах

Средство просмотра замены кода отображает сообщения о несоответствии в информации трассировки для ошибок замены кода. Легенда со списком каждого сообщения, которое появляется в отчете о промахах, предшествует подробным данным отчета. Сообщение состоит из:

  • Числовой идентификатор, определяющий сообщение в подробных данных отчета.

  • Текст сообщения, который в некоторых случаях включает местозаполнители для имен аргументов, значений объектов сайта вызова, значений записей таблицы и имен свойств.

Например:

1. Mismatched data types (argument name, CSO value, table entry value)

Данные в скобках представляют собой местозаполнители фактических значений, отображаемых в подробных данных отчета.

В таблице Местоположения источников ошибок (Miss Source Locations) в столбце Причина (Reason) содержатся следующие сведения.

  • Идентификатор сообщения, указанный в условных обозначениях.

  • Значения местозаполнителя для этого экземпляра сообщения о несоответствии.

Следующие сведения о причине указывают на несоответствие типов данных, поскольку объект сайта вызова указывает тип данных int8 для аргументов y1, u1, и u2, в то время как запись таблицы замены кода указывает uint32.

1. y1, int8, uint32
   u1, int8, uint32
   u2, int8, uint32

В зависимости от ситуации и сообщенной причины промаха устраните выявленные промахи путем поиска следующих примеров:

  • Опечатка в определении записи таблицы замены кода или в параметре источника.

  • Отсутствует информация в записи таблицы замены кода или в параметре источника.

  • Недопустимые или неправильные сведения в определении записи таблицы замены кода или параметре источника.

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

  • Сбой классификации алгоритма для операции сложения или вычитания из-за:

    • Идеальный аккумулятор не вычисляется, поскольку тип входного аргумента не является фиксированной точкой или коэффициенты регулировки наклона входных аргументов не равны.

    • Входные или выходные слепки с отливкой с плавающей запятой.

    • Входные или выходные отливки с литыми типами, имеющими различные коэффициенты регулировки наклона или смещения.

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

    • Входные слепки, приводящие к потере битов.

Анализ и исправление ошибок при замене кода

В следующем примере показано, как использовать данные трассировки средства просмотра замены кода для устранения ошибок замены кода. Необходимо просмотреть и протестировать замены кода для кода 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. В окне Отчет о замене кода откройте средство просмотра замены кода. Используйте данные трассировки средства просмотра замены кода для проверки того, что запись в таблице замены кода или кода MATLAB исправляет проблему замены кода. Информация трассировки показывает попадание для функции addsub_two_int16.

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