Проверьте замены кода

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

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

  • Используйте Заменяющее Средство просмотра Кода, чтобы исследовать библиотеки, таблицы и записи.

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

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

Заменяющие удачи и неудачи кода

Генератор кода регистрирует заменяющие записи таблицы кода, для которых он находит и не находит соответствия в кэше хита и пропускает кэш, соответственно. Когда заменяющее соответствие записи кода перестало работать, и код не заменяется, генератор кода регистрирует объект сайта вызова (CSO) для мисс в кэше мисс. Когда соответствие записи успешно выполняется, генератор кода регистрирует совпадающую запись в кэше хита.

Генератор кода перезаписывает данные кэша удачи и неудачи каждый раз, когда это производит код. Данные кэша отражают удачи и неудачи только для последнего компонента приложения (код MATLAB® или модель Simulink®), для которого вы генерируете код.

Можно использовать Заменяющее Средство просмотра Кода, чтобы рассмотреть трассировочную информацию на основе регистрируемых данных о трассировке удачи и неудачи. Кэш хита обеспечивает трассировочную информацию, которая помогает проверить замены кода.

Кэш мисс и связанные данные мисс, собранные и хранимые в заменяющих таблицах кода, предоставляют трассировочную информацию промахам. Используйте эту информацию для промахов, чтобы диагностировать ожидаемые замены кода, которые не происходят. Трассировочная информация для мисс:

  • Идентифицирует объект сайта вызова.

  • Обеспечивает ссылку на соответствующее исходное местоположение для мисс.

  • Включает информацию о причине для мисс.

Подтвердите табличный файл определения

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

isvalid(crl_table_sinfcn)
ans =

      1

MATLAB отображает ошибки, которые происходят. В следующем примере MATLAB обнаруживает опечатку в имени типа данных.

isvalid(crl_table_sinfcn)
??? RTW_CORE:tfl:TflTable: Unsupported data type, 'dooble'.

Error in ==> crl_table_sinfcn at 7
hTable.registerCFunctionEntry(100, 1, 'sin', 'dooble', 'sin_dbl', ...

Рассмотрите содержимое библиотеки

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

  1. Откройте средство просмотра, чтобы отобразить содержимое вашей библиотеки. В командной строке введите следующую команду:

    crviewer('library')

    Например:

    crviewer('Addition & Subtraction Examples')

  2. Рассмотрите список таблиц на левой панели. Таблицы отсутствуют? Таблицы перечислены в правильном относительном порядке? По умолчанию средство просмотра отображает таблицы в поисковом порядке.

  3. На левой панели кликните по каждой таблице и рассмотрите список записей в центральной панели. Записи отсутствуют? Список включает посторонние или неожиданные записи?

Рассмотрите табличное содержимое

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

  1. Откройте средство просмотра, чтобы отобразить содержимое вашей таблицы. В командной строке введите следующую команду. table является файл MATLAB, который задает заменяющие таблицы кода. Файл должен быть в текущей папке или на пути MATLAB.

    crviewer(table)

    Например:

    crviewer(crl_table_addsub)

  2. Рассмотрите список записей в центральной панели. Записи отсутствуют? Список включает посторонние или неожиданные записи? По умолчанию средство просмотра отображает записи в поисковом порядке.

  3. В центральной панели кликните по каждой записи и проверьте информацию о записи на правой панели.

    • Порядок аргументов правилен.

    • Концептуальные имена аргумента совпадают с соглашениями о присвоении имен генератора кода.

    • Имена аргумента реализации правильны.

    • Свойства алгоритма (например, насыщение и округление режима) установлены правильно.

    • Спецификация заголовка или исходного файла не отсутствует.

    • Типы ввода-вывода правильны.

    • Относительный приоритет записей правилен.

Рассмотрите замены кода

После того, как вы рассматриваете содержимое своей заменяющей библиотеки кода и таблиц, генерируете код и отчет генерации кода. Проверьте, что генератор кода заменяет код, как вы ожидаете.

Заменяющий Отчет Кода детализирует заменяющие библиотечные функции кода, которые генератор кода использует для замен кода. Отчет обеспечивает отображение между каждым заменяющим экземпляром и строкой кода MATLAB, который инициировал замену. Заменяющий отчет Кода не доступен для сгенерированных MEX-функций.

Следующий пример иллюстрирует два дополнительных подхода для рассмотрения замен кода:

  • Проверяйте раздел Code Replacements Report отчета генерации кода для ожидаемых замен.

  • Проследите замены кода.

  1. Идентифицируйте функцию MATLAB, где вы ожидаете, что замена функции или оператора происходит. Этот пример использует функциональный matlabroot/toolbox/rtw/rtwdemos/crl_demo/addsub_two_int16.m.

    function [y1, y2] = addsub_two_int16(u1, u2)
    
    y1 = int16(u1 + u2);
    y2 = int16(u1 - u2);
  2. Идентифицируйте или создайте код или скрипт, чтобы осуществить функцию. Например, считайте тестовый файл addsub_to_int16_test.m, который включает следующий код:

    disp('Input')
    u1 = int16(10)
    u2 = int16(10)
    
    [y1, y2] = addsub_two_int16(u1, u2);
    
    disp('Output')
    disp('y1 =')
    disp(y1);
    disp('y2 =')
    disp(y2);
  3. Откройте приложение MATLAB Coder™.

  4. На странице Select Source Files добавьте свою функцию в проект. В данном примере добавьте функциональный addsub_two_int16. Нажмите Next.

  5. На странице Define Input Types используйте тестовый файл addsub_to_int16_test, чтобы автоматически задать входные типы. Нажмите Next.

  6. На странице Check for Run-Time Issues задайте тестовый файл addsub_to_int16_test. Выполнение приложения тестовый файл, заменяя вызовы addsub_to_int16_test с вызовами версии MEX addsub_to_int16_test. Нажмите Next.

  7. Чтобы открыть диалоговое окно Generate, на странице Generate Code, кликают по стрелке Generate.

  8. Установите Build type генерировать исходный код. Прежде чем вы создадите исполняемый файл, вы хотите рассмотреть свои замены кода в сгенерированном коде.

  9. В диалоговом окне Generate нажмите More Settings.

  10. Сконфигурируйте генератор кода, чтобы пользоваться вашей заменяющей библиотекой кода. На вкладке Custom Code, установленной параметр Code replacement library на имя вашей библиотеки. В данном примере установите библиотеку на Addition & Subtraction Examples.

  11. Сконфигурируйте отчет генерации кода включать Заменяющий Отчет Кода. На вкладке Debugging выберите:

    • Always create a code generation report

    • Code replacements

    • Automatically launch a report if one is generated

  12. Чтобы сгенерировать код и отчет, установите Build type на Source Code. Затем нажмите Generate.

  13. Откройте раздел Code Replacements Report отчета генерации кода.

    Тот отчет перечисляет заменяющие функции, которые использовал генератор кода. Отчет обеспечивает отображение между каждым заменяющим экземпляром и кодом MATLAB, который инициировал замену.

    Рассмотрите отчет:

    • Проверяйте, произошли ли ожидаемая функция и замены оператора кода.

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

Если функция или оператор не заменяются как ожидалось, генератор кода использовал более высокий приоритет (значение более низкого приоритета) совпадают или не нашел соответствие.

Чтобы анализировать и диагностировать замену кода промахи, используйте трассировочную информацию, которую обеспечивает Code Replacement Viewer. Смотрите, что Замена Поиска и устранения неисправностей Кода отсутствует.

Похожие темы