IAR: использование printf и окна терминала Печать
Добавил(а) microsin   

В среде разработки IAR Embedded Workbench существует функция, очень удобная для отладки - окно терминала (Terminal I/O window). Это окно можно открыть из меню View -> Terminal I/O.

[printf]

В окно терминала с помощью printf можно выводить сообщения в реальном времени, когда программа работает под отладчиком. Также можно передавать в программу ввод пользователя.

IAR Terminal IO

Чтобы можно было использовать терминал, необходимо слинковать приложение с опцией семихостинга (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.

IAR Terminal IO 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.