Библиотека LUFA (раннее название MyUSB) версия 101122
|
Defines | |
#define | JTAG_DEBUG_POINT() __asm__ volatile ("NOP" ::) |
#define | JTAG_DEBUG_BREAK() __asm__ volatile ("BREAK" ::) |
#define | JTAG_DEBUG_ASSERT(x) MACROS{ if (!(x)) { JTAG_DEBUG_BREAK(); } }MACROE |
#define | STDOUT_ASSERT(x) |
Макросы для использования при отладке.
#define JTAG_DEBUG_ASSERT | ( | x | ) | MACROS{ if (!(x)) { JTAG_DEBUG_BREAK(); } }MACROE |
Макрос для тестирования условия "x" и останова через JTAG_DEBUG_BREAK(), если условие будет false.
#define JTAG_DEBUG_BREAK | ( | ) | __asm__ volatile ("BREAK" ::) |
Задает прямую точку останова JTAG в результирующем двоичном коде через оператор ASM BREAK. Когда используется JTAG, это приводит к остановке выполнения программы, пока она не будет продолжена вручную.
#define JTAG_DEBUG_POINT | ( | ) | __asm__ volatile ("NOP" ::) |
Задает volatile оператор NOP, который не может быть оптимизирован компилятором, и поэтому всегда может быть установлен как точка останова в результирующем коде. Очень удобно для целей отладки, где оптимизатор удаляет/переорганизовывает код так, что точка останова не может быть корректно установлена в нужное место.
#define STDOUT_ASSERT | ( | x | ) |
MACROS{ if (!(x)) { printf_P(PSTR("%s: Function \"%s\", Line %d: " \ "Assertion \"%s\" failed.\r\n"), \ __FILE__, __func__, __LINE__, #x); } }MACROE
Макрос для тестирования условия "x" и записи данных отладки в поток stdout, если условие будет false. Поток stdout должен быть предварительно инициалирован перед запуском этого макроса и прилинкован к выходному устройству, как периферия AVR USART.
Вывод происходит в форме "{FILENAME}: Function {FUNCTION NAME}, Line {LINE NUMBER}: Assertion {x} failed."