IAR EWB ARM: отладочная трассировка в проектах (trace_LOG, trace_LEVEL, trace.h) |
![]() |
Добавил(а) microsin | ||||||||||||||||||
В проектах примеров IAR для вывода отладочных сообщений используется подпрограмма trace_LOG. Например, для ARM7 Atmel по умолчанию для вывода используется порт DBGU (физически это TTL-аналог RS232), который позволяет отображать выводимые данные в консоли отладки (см. [1]). Для целей отладки удобно применять макрос trace_LOG, и во всех примерах IAR/Atmel он активно используется. [Как использовать trace_LOG] Макрос trace_LOG для вывода используют стандартную подсистему вывода printf (который по умолчанию и выводит данные в DBGU). Для того, чтобы вывести какое-либо отладочное текстовое сообщение, нужно просто вызвать подпрограмму trace_LOG, где в качестве параметра будет указано выводимое сообщение:
Можно использовать форматированный вывод для printf, с любым количеством параметров, например:
Как Вы возможно заметили, функция trace_LOG имеет также первый параметр, в качестве которого в наших примерах задано значение trace_INFO. О назначении этого параметра подробнее будет рассказано далее. [Как настроить вывод через trace_LOG] Чтобы начать использовать trace_LOG, нужно: 1. Подключить в модуль, где будет использоваться trace_LOG, файл заголовка trace.h (обычно он находится в папке at91lib\utility\). 2. Настроить нужный уровень обработки форматированного вывода printf библиотеки DLib. От этого зависит скорость обработки вызовов trace_LOG и объем подключаемого кода библиотек printf. Уровень обработки printf настраивается в свойствах проекта General Options -> Library Configuration -> выпадающий список Library: и General Options -> Library Options -> выпадающий список Printf formatter. Обычно я использую Library Full и Printf formatter Small. 3. Перед первым вызовом trace_LOG нужно настроить порт DBGU. Обычно это делается в секции настройки аппаратуры, до входа в бесконечный цикл main (второй параметр задает стандартную скорость в бодах):
Теперь в теле программы можно использовать вывод отладочных сообщений, вставляя где надо trace_LOG. Следует отметить, что вывод trace_LOG очень быстрый, и поэтому его можно использовать почти в любом месте (даже в обработчиках прерывания) - но без фанатизма, конечно. [Управление трассировкой - trace_LEVEL, уровни вывода отладки trace_LOG, макроопределение NOTRACE] Макрос trace_LOG написан таким образом, что можно управлять отладочным выводом на этапе компиляции. Для этого служит первый параметр макроса, и макроопределение trace_LEVEL. Первый параметр может принимать значения, перечисленные в таблице (все эти значения определены в trace.h).
Макроопределение trace_LEVEL может быть назначено (через свойства проекта C/C++ Compiler -> Preprocessor -> Defined symbols или через оператор #define) в любое значение от 0 до 4, либо не назначено вовсе. Если trace_LEVEL не назначено, то автоматически устанавливается trace_LEVEL 0. Логика управления отладочным выводом следующая. Если текущий установленный уровень trace_LEVEL меньше или равен уровню, указанному в первом параметре trace_LOG (в нашем примере используется trace_INFO), то сообщение trace_LOG выведется. Например, если trace_LEVEL не задан (т. е. он равен 0), то будут выводиться сообщения любых вызовов trace_LOG, какой бы первый его параметр мы не указали. Если же указать trace_LEVEL=1, то будут выводиться trace_LOG со всеми параметрами, кроме trace_DEBUG (т. е. вывод сообщений для отладки будет отключен). Если указать trace_LEVEL=3, то будут выводиться только trace_LOG, запущенные с параметрами trace_ERROR и trace_FATAL, весь остальной отладочный вывод будет подавлен. Таким образом, чем выше указанный уровень trace_LEVEL, тем меньше отладочной информации будет выводиться, а если trace_LEVEL минимальный (равен 0 или не указан), то будет включен весь отладочный вывод от trace_DEBUG до trace_FATAL. Полностью отключить трассировку (для отдельного модуля или для всего проекта целиком) можно, если задать макроопределение NOTRACE (стандартным образом - либо директивой define, либо в свойствах проекта). [Ссылки] 1. Преобразователь JTAG 20 pin -> (JTAG 10 pin + DBGU + SAM-BA). Консоль отладки DBGU, подключаемая по USB. |