В среде разработки IAR Embedded Workbench существует функция, очень удобная для отладки - окно терминала (Terminal I/O window). Это окно можно открыть из меню View -> Terminal I/O.
[printf]
В окно терминала с помощью printf можно выводить сообщения в реальном времени, когда программа работает под отладчиком. Также можно передавать в программу ввод пользователя.
Чтобы можно было использовать терминал, необходимо слинковать приложение с опцией семихостинга (Semihosted) или контрольных точек IAR. После этого отладчик C-SPY будет перенаправлять stdin, stdout и stderr в окно терминала. Если окно терминала Terminal I/O закрыто, то C-SPY откроет его автоматически, когда требуется ввод, но не для вывода.
Применимы следующие возможности при использовании Terminal I/O в реальном времени:
Устройство |
Описание |
Cortex-M |
Данные stdout приложения перенаправляются через SWO. См. диалог настройки SWO Configuration, особенно опцию ITM(1) Stimulus Port. |
Arm7/Arm9, включая Armxxx-S, и когда используется драйвер C-SPY J-Link/J-Trace |
DCC(2) может использоваться для вывода в окно Terminal I/O путем добавления в проект файла arm\src\debugger\dcc\DCC_Write.c. Модуль DCC_write.c переопределяет библиотечную функцию write. После этого такие функции, как printf, могут выводить текст в окно Terminal I/O. В этом случае можно запретить семихостинг, это будет означать, что используемые для семихостинга точки останова освободятся для других целей. Чтобы запретить семихостинг, выберите General Options -> Library Configuration -> Library low-level interface implementation -> None. |
Примечания:
(1) ITM расшифровывается как Instrumentation Trace Macrocell [1]. Это специальные аппаратные буферы, предназначенные для обмена данными трассировки. (2) DCC расшифровывается как Debug Communication Channel [2], специальный механизм обмена отладочными данными в реальном времени, когда программа работает на процессоре (CPU) под управлением отладчика (обычно через JTAG, Scan chain 2). В отличие от семихостинга, который приостанавливает CPU, DCC позволяет обмениваться данными с процессором без остановки программы. Обмен данными двунаправленный.
[Вывод в файл лога]
Можно настроить вывод сообщений printf в файл лога, для этого есть диалог выбора файла Terminal I/O Log File, доступный во время отладки через меню Debug -> Logging -> Set Terminal I/O Log File.
Файл лога в реальном времени можно просматривать командой powershell Get-Content, она работает аналогично утилите tail.
powershell Get-Content bin\Debug\TermIO.log -encoding UTF8 -Wait
Важное замечание: если проект скомпилирован с поддержкой семихостинга, и в программе есть вызовы printf, которые это используют, то он будет работать только под управлением отладчика! Т. е. если выйдите из отладчика и передерните питание (или сбросите микроконтроллер), то программа зависнет не первом же вызове функции семихостинга (printf).
[Ссылки]
1. Instrumentation Trace Macrocell site:developer.arm.com. 2. Debug Communication Channel site:wiki.segger.com. |