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

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

  1. Проверьте код, сгенерированный для элемента модели, ища ожидаемые замены кода. В данном примере исследуйте код, сгенерированный для Sub32 блоков в модели rtwdemo_crladdsub. Щелкните правой кнопкой мыши блок и выберите C/C++ Code > Navigate to C/C++ Code.

    Откроется отчет генерации кода в местоположении сгенерированного кода для этого блока.

    Генератор кода заменил код, но замена была на подписанную версию 32-битной операции вычитания. Вы ожидали неподписанную операцию.

  2. Перегенерируйте или снова откройте Отчет о замещениях кода для вашей модели. Если вы уже сгенерировали отчет генерации кода, который включает Отчет о замещениях кода для модели rtwdemo_crladdsub, откройте файл rtwdemo_crladdsub_ert_rtw/html/rtwdemo_crladdsub_codegen_rpt.html. Дополнительные сведения о том, как выполнить регенерацию отчета, см. в разделе Проверка библиотеки замещения кода.

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

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

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

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

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

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

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

    • Причины, по которым произошел промах. Список причин пропуска см. в Miss Reason Messages.

    В данном примере в отчете показаны промахи для двух блоков: Sub32 и Sub8.

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

    В данном примере определите, почему код для блока Sub32 не был заменен кодом для операции вычитания 32-битов без знака. Причина пропуска блока Sub32 указывает на несоответствие типа данных. Тип данных в объекте сайта вызова для трех аргументов является 32-разрядным целым числом со знаком. Запись замены кода задает беззнаковое 32-битное целое число.

  8. Исправьте модель или запись таблицы замещения кода. Если проблема находится в модели, используйте ссылку исходного местоположения в информации трассировки, чтобы найти элемент модели для исправления. В данном примере вы ожидали операцию вычитания без знака для блока Sub32. Щелкните ссылку в отчете трассировки для блока Sub32.

    Откроется модель с подсвеченным Sub32 блоком.

    Измените настройку типа данных для двух входных сигналов и выхода сигнала для блока Sub32 на uint32.

  9. Перегенерируйте код. Используйте информацию трассировки Code Replacement Viewer, чтобы убедиться, что запись в таблице замещения модели или кода исправляет проблему замещения кода. На следующем отображении информация трассировки показывает попадание для Sub32 блоков.

Похожие темы