Этот конфигурационный файл задает основное поведение библиотеки вывода. Поменяйте в нем установки __DEBUG_UART__, __DEBUG_UART_DMA__, __DEBUG_FILE__, __DEBUG_VDSP__, __VERBOSITY__, чтобы они соответствовали Вашим потребностям.
/*****************************************************************************
** **
** BfDebugger **
** **
******************************************************************************
(C) Copyright 2009-2012 - Analog Devices, Inc. All rights reserved.
Файл: BfDebugger.h
Дата модификации: 03/29/2012
Процессор: Blackfin
Среда разработки: VisualDSP++ 5.0
Этот заголовочный файл подключает необходимые специфичные для цели файлы *UART.h
(например файл ADSP-BF538-UART.h), в зависимости от предварительно заданных целевых
макросов препроцессора (т. е. настроек типа процессора, заданных в проекте). Эти
файлы *UART.h содержат индивидуальные настройки для компилируемой цели (под целью
подразумевается тип процессора Blackfin).
Этот файл заголовка предоставляет некоторые удобные для использования макросы
препроцессора для управления подробностями вывода (__VERBOSITY__) и цветом
печатаемого текста в консоли (DEBUG=по умолчанию серый, INFO=зеленый, WARNING=желтый,
ERROR=красный, MSG=белый) в том случае, если используется вывод в консоль терминала
через UART.
Макрос CONTROL не вставляет никакие дополнительные управляющие последовательности
наподобие новой строки (LF) или возврата каретки (CR). Пример синтаксиса: DEBUG(LoV, arg...);
Когда используются макросы, приложение может переключаться между выводом текста
на основе printf, fprintf, uprintf и udprintf.
Управляющие коды ANSI передаются стандартно, с использованием префикса из escape-символа (ESC,
код ASCII 27), за которым следует нужная последовательность управляющего кода:
Код: Значение:
\a Alert (звуковое предупреждение)
\b Backspace (возврат печати на 1 позицию назад)
\f Form Feed (перевод страницы)
\n Newline (новая строка)
\r Carriage Return (возврат каретки)
\t Horizontal Tab (горизонтальная табуляция)
\v Vertical Tab (вертикальная табуляция)
[0m сброс; очищает все цвета и стили (белый текст на черном фоне)
[1m bold on (включение жирного шрифта, см. ниже)
[3m italics on (включение наклонного шрифта)
[4m underline on (включение подчеркивания)
[7m inverse on (включение инверсии); меняет местами цвета текста и фона
(foreground & background colors)
[9m strikethrough on (включение зачеркивания)
[22m bold off (выключение жирного шрифта, см. ниже)
[23m italics off (выключение наклонного шрифта)
[24m underline off (выключение подчеркивания)
[27m inverse off (выключение инверсии)
[29m strikethrough off (выключение зачеркивания)
[30m set foreground color to black (установка текста в черный цвет)
[31m set foreground color to red (установка текста в красный цвет)
[32m set foreground color to green (установка текста в зеленый цвет)
[33m set foreground color to yellow (установка текста в желтый цвет)
[34m set foreground color to blue (установка текста в синий цвет)
[35m set foreground color to magenta (purple, установка текста в пурпурный цвет)
[36m set foreground color to cyan (установка текста в голубой цвет)
[37m set foreground color to white (установка текста в белый цвет)
[39m set foreground color to default (установка текста в цвет по умолчанию, белый)
[40m set background color to black (установка фона в черный цвет)
[41m set background color to red (установка фона в красный цвет)
[42m set background color to green (установка фона в зеленый цвет)
[43m set background color to yellow (установка фона в желтый цвет)
[44m set background color to blue (установка фона в синий цвет)
[45m set background color to magenta (purple, установка фона в пурпурный цвет)
[46m set background color to cyan (установка фона в голубой цвет)
[47m set background color to white (установка фона в белый цвет)
[49m set background color to default (установка фона в цвет по умолчанию, черный)
******************************************************************************/
#ifndef __DEBUG_H__
#define __DEBUG_H__
/*******************************************************************************
*
* Экспортируемые константы/определения: их может менять пользователь
*
*******************************************************************************/
//#define __UART_IO_DEVICE__ 1 // Расширение поддержки I/O для нового устройства: Uart
//#define __PRE_REGISTERING_DEVICE__ 1 // Предрегистрация устройства: это заменяет устройство PrimIO
// для stdin, stdout и stderr
//Если задано несколько определений сразу, то в результате получится, что активно только
// определение __DEBUG_UART__, при этом не будет выдано предупреждений.
//#define __DEBUG_UART__ 1 // печать направляется в UART (режим ядра, без DMA)
#define __DEBUG_UART_DMA__ 1 // печать направляется в UART (режим DMA)
//#define __DEBUG_FILE__ 1 // печать направляется в файл DEBUG_FILE_NAME
//#define __DEBUG_VDSP__ 1 // печать направляется в окно консоли среды разработки VisualDSP
// (этот вариант вывода самый медленный!!!)
// Уровень подробностей вывода
#define __VERBOSITY__ 2
/*******************************************************************************
*
* Экспортируемые константы/определения: их менять не следует
*
*******************************************************************************/
// некая предварительная проверка синтаксиса
#if ( (__DEBUG_UART_DMA__ == 0) && (__DEBUG_UART__ == 0) && (__DEBUG_FILE__ == 0) && (__DEBUG_VDSP__ == 0) )
#warning "__DEBUG_UART_DMA__" is enabled automatically
#define __DEBUG_UART_DMA__ 1
#endif
#if ( (__PRE_REGISTERING_DEVICE__ == 1) && (__UART_IO_DEVICE__ == 0) )
#warning "__UART_IO_DEVICE__" is enabled automatically
#undef __UART_IO_DEVICE__
#define __UART_IO_DEVICE__ 1
#endif
#if ( (__UART_IO_DEVICE__ == 1) && (__DEBUG_UART_DMA__ == 0) && (__DEBUG_UART__ == 0) )
#warning "__DEBUG_UART_DMA__" is enabled automatically "__DEBUG_VDSP__" and/or "__DEBUG_FILE__" have been removed
#undef __DEBUG_FILE__
#undef __DEBUG_VDSP__
#undef __DEBUG_UART__
#define __DEBUG_UART_DMA__ 1
#endif
#define STRINGSIZE 512
#if ( (__DEBUG_UART_DMA__ == 1) || (__DEBUG_UART__ == 1) )
#define _PROMPT_ "bf\\>"
#define _RESETSCREEN_ "\f\e[0m"
#define _CLEARSCREEN_ "\e[2J"
#define _ERASELINE_ "\e[K"
// #define _NEWLINE_ "\n\r" // возврат каретки вставляется автоматически
#define _NEWLINE_ "\n"
#define _CARRIAGE_ "\r"
#define _VTAB_ "\v"
#define _HTAB_ "\t"
#define _CURSORUP_ "\e[A"
#define _CURSORDN_ "\e[B"
#define _CURSORFW_ "\e[C"
#define _CURSORBW_ "\e[D"
#define _CURSORUPX_ "\e[%dA" // требует количество строк в первом параметре
#define _CURSORDNX_ "\e[%dB" // требует количество строк в первом параметре
#define _CURSORFWX_ "\e[%dC" // требует количество строк в первом параметре
#define _CURSORBWX_ "\e[%dD" // требует количество строк в первом параметре
#define _CURSORPOSXY_ "\e[%d;%dH"
#define _CURSORPOSSAVE_ "\e[s"
#define _CURSORPOSREST_ "\e[u"
#define _INVERSEON_ "\e[7m"
#define _INVERSEOFF_ "\e[27m"
#define _NORMALTEXT_ "\e[0m"
#define _BOLDTEXT_ "\e[1m"
#define _ITALICTEXT_ "\e[3m"
#define _BLINKTEXT_ "\e[5m"
#define _REDTEXT_ "\e[31m"
#define _GREENTEXT_ "\e[32m"
#define _YELLOWTEXT_ "\e[33m"
#define _BLUETEXT_ "\e[34m"
#define _MAGENTATEXT_ "\e[35m"
#define _CYANTEXT_ "\e[36m"
#define _WHITETEXT_ "\e[37m"
#define _BLACKTEXT_ "\e[30m"
#define _TEST_ "\e[=3h"
#else
#define _PROMPT_ ""
#define _RESETSCREEN_ "\n"
#define _CLEARSCREEN_ "\n"
#define _ERASELINE_ ""
#define _NEWLINE_ "\n"
#define _CARRIAGE_ "\r"
#define _VTAB_ "\n"
#define _HTAB_ "\h"
#define _CURSORUP_ ""
#define _CURSORDN_ ""
#define _CURSORFW_ ""
#define _CURSORBW_ ""
#define _CURSORUPX_ ""
#define _CURSORDNX_ ""
#define _CURSORFWX_ ""
#define _CURSORBWX_ ""
#define _CURSORPOSXY_ ""
#define _CURSORPOSSAVE_ ""
#define _CURSORPOSREST_ ""
#define _INVERSEON_ ""
#define _INVERSEOFF_ ""
#define _NORMALTEXT_ ""
#define _BOLDTEXT_ ""
#define _ITALICTEXT_ ""
#define _BLINKTEXT_ ""
#define _REDTEXT_ ""
#define _GREENTEXT_ ""
#define _YELLOWTEXT_ ""
#define _BLUETEXT_ ""
#define _MAGENTATEXT_ ""
#define _CYANTEXT_ ""
#define _WHITETEXT_ ""
#define _BLACKTEXT_ ""
#define _TEST_ ""
#endif
#define _NL_ _NEWLINE_
#define _CR_ _CARRIAGE_
#define _EL_ _ERASELINE_
#define _CS_ _CLEARSCREEN_
static char crsuw[] = { '\e', '[', 'A' }; // Курсор вверх
static char crsdw[] = { '\e', '[', 'B' }; // Курсор вниз
static char crsfw[] = { '\e', '[', 'C' }; // Курсор вперед
static char crsbw[] = { '\e', '[', 'D' }; // Курсор назад
static char crstb[] = { '\e', '[', '4', 'C' }; // Tab: курсор вперед на 4 позиции
/*******************************************************************************
*
* Область подключения заголовочных файлов
*
*******************************************************************************/
#if ( (__DEBUG_UART_DMA__ == 1) || (__DEBUG_UART__ == 1) )
#if (__ADSPBF50x__ == 1)
#include "ADSP-BF50x-UART.h"
#elif (__ADSPBF51x__ == 1)
#include "ADSP-BF51x-UART.h"
#elif (__ADSPBF52x__ == 1)
#include "ADSP-BF52x-UART.h"
#elif (__ADSPBF533_FAMILY__ == 1)
#include "ADSP-BF532-UART.h"
#elif (__ADSPBF537_FAMILY__ == 1)
#include "ADSP-BF534-UART.h"
#elif (__ADSPBF538_FAMILY__ == 1)
#include "ADSP-BF538-UART.h"
#elif (__ADSPBF54x__ == 1)
#include "ADSP-BF54x-UART.h"
#elif (__ADSPBF561__ == 1)
#include "ADSP-BF561-UART.h"
#elif (__ADSPBF59x__ == 1)
#include "ADSP-BF59x-UART.h"
#else
#error target not supported
#endif
#endif // (__DEBUG_UART_DMA__ == 1) || (__DEBUG_DMA__ == 1)
/*******************************************************************************
*
* Область экспортируемых типов
*
*******************************************************************************/
/*******************************************************************************
*
* Область экспортируемых макросов
*
*******************************************************************************/
/* Доступные макросы:
DEBUG_OPEN()
DEBUG_CLOSE()
CONTROL(< level of verbosity >, args...)
DEBUG(< level of verbosity >, args...)
MSG(< level of verbosity >, args...)
INFO(< level of verbosity >, args...)
WARNING(< level of verbosity >, args...)
ERROR(< level of verbosity >, args...)*/
#if (__DEBUG_UART__ == 1)
#undef __DEBUG_FILE__
#undef __DEBUG_VDSP__
#undef __DEBUG_UART_DMA__
#if (AUTOBAUD == 0)
#define DEBUG_OPEN() UartInitTerminal(USE_UART_NR,USE_UART_BITRATE)
#else
#define DEBUG_OPEN() UartInitAutobaud(USE_UART_NR)
#endif
#define DEBUG_CLOSE() UartClockDisable(USE_UART_NR)
#if (__VERBOSITY__ > 0)
#define CONTROL(n, args...)\
do {\
if (__VERBOSITY__ >= n) { uprintf(USE_UART_NR, args); }\
} while (0)
#else
#define CONTROL(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define DEBUG(n, args...)\
do {\
if (__VERBOSITY__ >= n) { uprintf(USE_UART_NR,_NORMALTEXT_ _CR_ args); }\
} while (0)
#else
#define DEBUG(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define INFO(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
uprintf(USE_UART_NR,_BOLDTEXT_ _GREENTEXT_ _CR_ args);\
}\
} while (0)
#else
#define INFO(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define WARNING(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
uprintf(USE_UART_NR,_BOLDTEXT_ _YELLOWTEXT_ _CR_ args);\
}\
} while (0)
#else
#define WARNING(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define ERROR(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
uprintf(USE_UART_NR,_BOLDTEXT_ _REDTEXT_ _CR_ args);\
}\
} while (0)
#else
#define ERROR(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define MSG(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
uprintf(USE_UART_NR,_BOLDTEXT_ _WHITETEXT_ _CR_ args);\
}\
} while (0)
#else
#define MSG(n, args...) do { } while(0)
#endif
#endif // (__DEBUG_UART__ == 1)
#if (__DEBUG_UART_DMA__ == 1)
#undef __DEBUG_FILE__
#undef __DEBUG_VDSP__
#undef __DEBUG_UART__
#if (AUTOBAUD == 0)
#define DEBUG_OPEN() UartInitTerminal(USE_UART_NR,USE_UART_BITRATE);\
UartDmaInitTx(USE_UART_NR,USE_UART_DMA_NR)
#else
#define DEBUG_OPEN() UartInitAutobaud(USE_UART_NR);\
UartDmaInitTx(USE_UART_NR,USE_UART_DMA_NR)
#endif
#define DEBUG_CLOSE() UartDmaDisable(USE_UART_NR,USE_UART_DMA_NR);\
UartClockDisable(USE_UART_NR)
#if (__VERBOSITY__ > 0)
#define CONTROL(n, args...)\
do {\
if (__VERBOSITY__ >= n) { udprintf(USE_UART_NR,USE_UART_DMA_NR, args); }\
} while (0)
#else
#define CONTROL(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define DEBUG(n, args...)\
do {\
if (__VERBOSITY__ >= n) { udprintf(USE_UART_NR,USE_UART_DMA_NR,_NORMALTEXT_ _CR_ args); }\
} while (0)
#else
#define DEBUG(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define INFO(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
udprintf(USE_UART_NR,USE_UART_DMA_NR,_BOLDTEXT_ _GREENTEXT_ _CR_ args);\
}\
} while (0)
#else
#define INFO(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define WARNING(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
udprintf(USE_UART_NR,USE_UART_DMA_NR,_BOLDTEXT_ _YELLOWTEXT_ _CR_ args);\
}\
} while (0)#else#define WARNING(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define ERROR(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
udprintf(USE_UART_NR,USE_UART_DMA_NR,_BOLDTEXT_ _REDTEXT_ _CR_ args);\
}\
} while (0)
#else
#define ERROR(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define MSG(n, args...)\
do {\
if (__VERBOSITY__ >= n) {\
udprintf(USE_UART_NR,USE_UART_DMA_NR,_BOLDTEXT_ _WHITETEXT_ _CR_ args);\
}\
} while (0)
#else
#define MSG(n, args...) do { } while(0)
#endif
#endif /* (__DEBUG_UART_DMA__ == 1) */
#if ( (__DEBUG_VDSP__ == 1) || (__DEBUG_FILE__ == 1) )
#if (__DEBUG_FILE__ == 1)
#undef __DEBUG_VDSP__
#undef __DEBUG_UART_DMA__
#undef __DEBUG_UART__
#define DEBUG_FILE_NAME "debug.txt"
#define DEBUG_STREAM pDebugFile
// либо напрямую используйте fprintf,
#define DEBUG_PRINT fprintf
#define DEBUG_PRINT_OUTPUT DEBUG_STREAM
// либо используйте функцию fileprintf, что медленнее
//#define DEBUG_PRINT fileprintf
//#define DEBUG_PRINT_OUTPUT DEBUG_FILE_NAME
#define DEBUG_OPEN() DEBUG_STREAM = fopen(DEBUG_FILE_NAME,"w");\
if (DEBUG_STREAM == NULL)\
{\
fclose(DEBUG_STREAM);\
return -1;\
}#define DEBUG_CLOSE() fclose(DEBUG_STREAM)
#endif // (__DEBUG_FILE__)
#if (__DEBUG_VDSP__ == 1)
#undef __DEBUG_FILE__
#undef __DEBUG_UART_DMA__
#undef __DEBUG_UART__
#define DEBUG_STREAM stdout
#define DEBUG_PRINT fprintf
#define DEBUG_PRINT_OUTPUT DEBUG_STREAM
#define DEBUG_OPEN()
#define DEBUG_CLOSE()
#endif // (__DEBUG_VDSP__ == 1)
#if (__VERBOSITY__ > 0)
#define CONTROL(n, args...)\
do {\
if (__VERBOSITY__ >= n) { DEBUG_PRINT(DEBUG_PRINT_OUTPUT, args); }\
} while (0)
#else
#define CONTROL(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define DEBUG(n, args...)\
do {\ if (__VERBOSITY__ >= n) { DEBUG_PRINT(DEBUG_PRINT_OUTPUT, args); }\
} while (0)
#else
#define DEBUG(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define INFO(n, args...)\
do {\
if (__VERBOSITY__ >= n) { DEBUG_PRINT(DEBUG_PRINT_OUTPUT," [INFO]"args); }\
} while (0)
#else
#define INFO(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define WARNING(n, args...)\
do {\
if (__VERBOSITY__ >= n) { DEBUG_PRINT(DEBUG_PRINT_OUTPUT,"[WARNING]"args); }\
} while (0)
#else
#define WARNING(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define ERROR(n, args...)\
do {\
if (__VERBOSITY__ >= n) { DEBUG_PRINT(DEBUG_PRINT_OUTPUT,"[ERROR]"args); }\
} while (0)
#else
#define ERROR(n, args...) do { } while(0)
#endif
#if (__VERBOSITY__ > 0)
#define MSG(n, args...)\
do {\
if (__VERBOSITY__ >= n) { DEBUG_PRINT(DEBUG_PRINT_OUTPUT," [MSG]"args); }\
} while (0)
#else
#define MSG(n, args...) do { } while(0)
#endif
#endif /* (__DEBUG_VDSP__ == 1) || (__DEBUG_FILE__ == 1) */
/*******************************************************************************
*
* Область экспортируемых данных
*
*******************************************************************************/
extern char strbuf[STRINGSIZE];
#include < stdio.h >
#if (__DEBUG_FILE__ == 1)
extern FILE *DEBUG_STREAM; // эта переменная должна быть определена глобально,
// и открыта в модуле main.c
#endif
#include < device.h >
#include < device_int.h >
#if (__UART_IO_DEVICE__ == 1)
extern DevEntry UartIODevice; // определено в модуле BfDebugger.c
extern FILE *pUartIOFile; // должна быть определена глобально и открыта в main.c
#endif
#define UartIOFileId 3
/*******************************************************************************
*
* Область экспортируемых прототипов функций
*
*******************************************************************************/
short uprintf(unsigned char UartNum, const char *fmt, ...);
short udprintf(unsigned char UartNum, unsigned char DmaChan, const char *fmt, ...);
short fileprintf(const char *file, const char *fmt, ...);
void WelcomeMessage(void);
void WelcomeMessage2(FILE* fp);
#endif // __DEBUG_H__
/******************************** End of File *********************************/