tlcdebug
Обзор выполнения учебного пособияObjective: Научитесь использовать статистику покрытия TLC, чтобы помочь идентифицировать ошибки в коде TLC.
<reservedrangesplaceholder1> <reservedrangesplaceholder0>
(открыто)/ toolbox/rtw/rtwdemos/tlctutorial/tlcdebug
Это руководство учит вас, как определить, выполняется ли ваш код TLC должным образом. Здесь она использует ту же модель, что и для предыдущего руководства. Когда вы фокусируетесь на понимании потока управления при обработке файлов TLC, вам не нужно компилироваться и выполнять автономную модель, только чтобы посмотреть на код. Руководство выполняется следующим образом:
Getting Started - Зачем и как анализировать покрытие TLC
Open the Model and Generate Code - Чтение файла журнала покрытия
Панель Code Generation > Debug содержит Start TLC coverage when generating code опций. Его выбор приводит к появлению списка, в котором указывается, сколько раз каждая линия в исходном файле TLC выполнялась во время генерации кода. Объявление,
(где name
.log
- имя файла анализируемого TLC-файла), помещается в папку сборки.name
Примечание
Файл журнала для каждого .tlc
файл, активированный или включенный, генерируется в папке сборки. Особое внимание на timesN.log
.
Скопируйте папку tlctutorial/tlcdebug/
в рабочую папку и cd
к нему. Сделайте это, даже если вы уже скопировали его, чтобы убедиться, что у вас есть версия timesN.tlc
У этого есть баг.
В MATLAB® Командное окно, создайте файл MEX для S-функции.
mex timesN.c
Это позволяет избежать выбора версии, поставляемой с помощью Simulink® программное обеспечение.
Откройте модель simple_log
.
На панели Code Generation диалогового окна Параметры конфигурации (Configuration Parameters) установите флажок Generate code only.
На панели Code Generation > Debug диалогового окна Параметры конфигурации выберите Start TLC coverage when generating code. (Не выбирайте Start TLC debugger when generating code. Вызов отладчика не нужен.) Нажмите Apply.
Нажмите Ctrl+B. Обычные сообщения появляются в Командном Окне MATLAB, и папке сборки (simple_log_grt_rtw
) создается в рабочей папке.
Введите папку сборки. Найдите файл timesN.log
, и скопировать его в рабочую папку, переименовав в timesN_ilp.log
чтобы предотвратить перезапись.
Откройте файл журнала timesN_ilp.log
в вашем редакторе. Выглядит почти как timesN.tlc
, за исключением числа, за которым следует двоеточие в начале каждой линии. Это число представляет количество раз, когда TLC выполнял линию при генерации кода. Код для Outputs()
должен выглядеть следующим образом:
0: %% Function: Outputs ======================================================== 0: %% 1: %function Outputs(block, system) Output 1: %assign gain =SFcnParamSettings.myGain 1: /* %<Type> Block: %<Name> */ 0: %% 1: /* Multiply input by %<gain> */ 1: %assign rollVars = ["U", "Y"] 1: %roll idx = RollRegions, lcv = RollThreshold, block, "Roller", rollVars 1: %<LibBlockOutputSignal(0, "", lcv, idx)> = \ 1: %<LibBlockInputSignal(0, "", lcv, idx)> * 1; 0: %endroll 1: 0: %endfunction
Заметьте, что комментарии не были выполнены. Были достигнуты операторы TLC, что означает, что они выводят сгенерированный код C столько же раз, сколько число, префиксированное к этим линиям.
Изменение опций генерации кода может вызвать скрытую проблему в сгенерированном исходном коде. Систематическое изменение опций и наблюдение полученных различий в покрытии TLC может облегчить процесс обнаружения дефектного кода.