first commit
This commit is contained in:
471
libraries/zf_common/zf_common_debug.c
Normal file
471
libraries/zf_common/zf_common_debug.c
Normal file
@@ -0,0 +1,471 @@
|
||||
/*********************************************************************************************************************
|
||||
* CH32V307VCT6 Opensourec Library <20><><EFBFBD><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>CH32V307VCT6 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* CH32V307VCT6 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_common_debug
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-15 <20><>W first version
|
||||
********************************************************************************************************************/
|
||||
|
||||
|
||||
#include "zf_driver_uart.h"
|
||||
#include "zf_common_interrupt.h"
|
||||
#include "zf_common_fifo.h"
|
||||
|
||||
#include "zf_common_debug.h"
|
||||
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug uart <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint8 debug_uart_data;
|
||||
#endif
|
||||
|
||||
fifo_struct debug_uart_fifo;
|
||||
|
||||
static debug_output_struct debug_output_info;
|
||||
static volatile uint8 zf_debug_init_flag = 0;
|
||||
static volatile uint8 zf_debug_assert_enable = 1;
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> <20><> 120MHz <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> pass <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_delay (void)
|
||||
{
|
||||
vuint32 loop_1 = 0, loop_2 = 0;
|
||||
for(loop_1 = 0; loop_1 <= 0xFF; loop_1 ++)
|
||||
for(loop_2 = 0; loop_2 <= 0xFFFF; loop_2 ++)
|
||||
__NOP();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ҫ<EFBFBD>Ƿ<EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>ά<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ʧ<EFBFBD><CAA7>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_protective_handler();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_protective_handler (void)
|
||||
{
|
||||
// <20><>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_uart_str_output("Log message");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_uart_str_output (const char *str)
|
||||
{
|
||||
uart_write_string(DEBUG_UART_INDEX, str);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *type log <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><>Ϣ
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_output("Log message", file, line, str);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD> <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ù<EFBFBD>ע Ҳ<><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void debug_output (char *type, char *file, int line, char *str)
|
||||
{
|
||||
char *file_str;
|
||||
vuint16 i = 0, j = 0;
|
||||
vint16 len_origin = 0;
|
||||
vint16 show_len = 0;
|
||||
vint16 show_line_index = 0;
|
||||
len_origin = strlen(file);
|
||||
|
||||
char output_buffer[256];
|
||||
char file_path_buffer[64];
|
||||
|
||||
if(debug_output_info.type_index)
|
||||
{
|
||||
debug_output_info.output_screen_clear();
|
||||
}
|
||||
|
||||
if(zf_debug_init_flag)
|
||||
{
|
||||
if(debug_output_info.type_index)
|
||||
{
|
||||
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD>н<EFBFBD><D0BD>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ŀ¼ <20><><EFBFBD><EFBFBD> src/main.c>
|
||||
// <20><><EFBFBD><EFBFBD> line : xxxx
|
||||
debug_output_info.output_screen(0, show_line_index ++, type);
|
||||
|
||||
file_str = file;
|
||||
len_origin = strlen(file);
|
||||
show_len = (debug_output_info.display_x_max / debug_output_info.font_x_size);
|
||||
|
||||
while(*file_str++ != '\0');
|
||||
|
||||
// ֻȡһ<C8A1><D2BB>Ŀ¼ <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD><CCB7><EFBFBD>Ŀ¼ <20><><EFBFBD><EFBFBD> MDK <20>Ĺ<EFBFBD><C4B9≯<EFBFBD>Ŀ¼ <20>ͻ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰĿ¼
|
||||
for(j = 0; (j < 2) && (len_origin >= 0); len_origin --) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '/'
|
||||
{
|
||||
file_str --;
|
||||
if((*file_str == '/') || (*file_str == 0x5C))
|
||||
{
|
||||
j ++;
|
||||
}
|
||||
}
|
||||
|
||||
// <20>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>浽<EFBFBD><E6B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(len_origin >= 0)
|
||||
{
|
||||
file_str ++;
|
||||
sprintf(output_buffer, "file: %s", file_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(0 == j)
|
||||
{
|
||||
sprintf(output_buffer, "file: mdk/%s", file_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(output_buffer, "file: %s", file_str);
|
||||
}
|
||||
}
|
||||
|
||||
// <20><>Ļ<EFBFBD><C4BB>ʾ·<CABE><C2B7>
|
||||
for(i = 0; i < ((strlen(output_buffer) / show_len) + 1); i ++)
|
||||
{
|
||||
for(j = 0; j < show_len; j ++)
|
||||
{
|
||||
if(strlen(output_buffer) < (j + i * show_len))
|
||||
{
|
||||
break;
|
||||
}
|
||||
file_path_buffer[j] = output_buffer[j + i * show_len];
|
||||
}
|
||||
|
||||
file_path_buffer[j] = '\0'; // ĩβ<C4A9><CEB2><EFBFBD><EFBFBD>\0
|
||||
|
||||
debug_output_info.output_screen(0, debug_output_info.font_y_size * show_line_index ++, file_path_buffer);
|
||||
}
|
||||
|
||||
// <20><>Ļ<EFBFBD><C4BB>ʾ<EFBFBD>к<EFBFBD>
|
||||
sprintf(output_buffer, "line: %d", line);
|
||||
debug_output_info.output_screen(0, debug_output_info.font_y_size * show_line_index ++, output_buffer);
|
||||
|
||||
// <20><>Ļ<EFBFBD><C4BB>ʾ Log <20><><EFBFBD><EFBFBD><EFBFBD>еĻ<D0B5>
|
||||
if(NULL != str)
|
||||
{
|
||||
for(i = 0; i < ((strlen(str) / show_len) + 1); i ++)
|
||||
{
|
||||
for(j = 0; j < show_len; j ++)
|
||||
{
|
||||
if(strlen(str) < (j + i * show_len))
|
||||
{
|
||||
break;
|
||||
}
|
||||
file_path_buffer[j] = str[j + i * show_len];
|
||||
}
|
||||
|
||||
file_path_buffer[j] = '\0'; // ĩβ<C4A9><CEB2><EFBFBD><EFBFBD>\0
|
||||
|
||||
debug_output_info.output_screen(0, debug_output_info.font_y_size * show_line_index ++, file_path_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char output_buffer[256];
|
||||
memset(output_buffer, 0, 256);
|
||||
debug_output_info.output_uart(type);
|
||||
if(NULL != str)
|
||||
{
|
||||
sprintf(output_buffer, "\r\nfile %s line %d: %s.\r\n", file, line, str);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(output_buffer, "\r\nfile %s line %d.\r\n", file, line);
|
||||
}
|
||||
debug_output_info.output_uart(output_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Դ<EFBFBD><D4B4>ڷ<EFBFBD><DAB7>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> DEBUG_UART_USE_INTERRUPT <20>궨<EFBFBD><EAB6A8><EFBFBD>ſ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 debug_send_buffer(const uint8 *buff, uint32 len)
|
||||
{
|
||||
uart_write_buffer(DEBUG_UART_INDEX, buff, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȡ debug <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ʵ<EFBFBD>ʳ<EFBFBD><CAB3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> DEBUG_UART_USE_INTERRUPT <20>궨<EFBFBD><EAB6A8><EFBFBD>ſ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 debug_read_ring_buffer (uint8 *buff, uint32 len)
|
||||
{
|
||||
fifo_read_buffer(&debug_uart_fifo, buff, &len, FIFO_READ_AND_CLEAN);
|
||||
return len;
|
||||
}
|
||||
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>жϲű<CFB2><C5B1><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> isr.c <20>ж<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_interrupr_handler();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD> DEBUG_UART_USE_INTERRUPT <20>궨<EFBFBD><EAB6A8><EFBFBD>ſ<EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
// <20><><EFBFBD>ұ<EFBFBD><D2B1><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD> UART1 <20>Ĵ<EFBFBD><C4B4>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_interrupr_handler (void)
|
||||
{
|
||||
if(zf_debug_init_flag)
|
||||
{
|
||||
uart_query_byte(DEBUG_UART_INDEX, &debug_uart_data); // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fifo_write_buffer(&debug_uart_fifo, &debug_uart_data, 1); // <20><><EFBFBD><EFBFBD> FIFO
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------- // printf <20>ض<EFBFBD><D8B6><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> printf<74>ض<EFBFBD><D8B6><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// @since v1.0
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ض<EFBFBD><D8B6><EFBFBD>printf<74><66>DEBUG<55><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
#if (1 == PRINTF_ENABLE)
|
||||
int _write(int fd, char *buf, int size)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<size; i++)
|
||||
{
|
||||
while (USART_GetFlagStatus((USART_TypeDef*)uart_index[DEBUG_UART_INDEX], USART_FLAG_TC) == RESET);
|
||||
USART_SendData((USART_TypeDef*)uart_index[DEBUG_UART_INDEX], *buf++);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
#endif
|
||||
//------------------------------------------------------------------------- // printf <20>ض<EFBFBD><D8B6><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_assert_enable();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD>鿪<EFBFBD><E9BFAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_assert_enable (void)
|
||||
{
|
||||
zf_debug_assert_enable = 1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_assert_disable();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD>Ĭ<EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><C3B6><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_assert_disable (void)
|
||||
{
|
||||
zf_debug_assert_enable = 0;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> pass <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_assert(0);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5>õ<EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9> zf_commmon_debug.h <20>е<EFBFBD> zf_assert(x) <20>ӿ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_assert_handler (uint8 pass, char *file, int line)
|
||||
{
|
||||
do
|
||||
{
|
||||
if(pass || !zf_debug_assert_enable)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
static uint8 assert_nest_index = 0;
|
||||
|
||||
if(0 != assert_nest_index)
|
||||
{
|
||||
while(1);
|
||||
}
|
||||
assert_nest_index ++;
|
||||
|
||||
interrupt_global_disable();
|
||||
debug_protective_handler();
|
||||
|
||||
while(1)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣס<CDA3><D7A1>
|
||||
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>õ<EFBFBD> zf_assert(x) <20>ӿڴ<D3BF><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug_init <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD> log <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ڶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD>鿴<EFBFBD><E9BFB4><EFBFBD>ĸ<EFBFBD><C4B8>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>б<EFBFBD><D0B1><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>û<EFBFBD>г<EFBFBD>ʼ<EFBFBD><CABC> debug
|
||||
// <20>ǾͿ<C7BE><CDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> file <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ֵ<EFBFBD><D6B5> line <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>ƺͶ<C6BA>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><>ȥ<EFBFBD><C8A5><EFBFBD>Կ<EFBFBD><D4BF><EFBFBD><EFBFBD><EFBFBD>Ϊʲô<CAB2><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
debug_output("Assert error", file, line, NULL);
|
||||
debug_delay();
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> bool <20>ж<EFBFBD><D0B6>Ƿ<C7B7><F1B4A5B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *file <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> line Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> zf_log(0, "Log Message");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӵ<EFBFBD><D3B5>õ<EFBFBD> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9> zf_commmon_debug.h <20>е<EFBFBD> zf_log(x, str) <20>ӿ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_log_handler (uint8 pass, char *str, char *file, int line)
|
||||
{
|
||||
do
|
||||
{
|
||||
if(pass)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(zf_debug_init_flag)
|
||||
{
|
||||
debug_output("Log message", file, line, str);
|
||||
// printf("Log message from %s line %d :\"%s\".\r\n", file, line, str);
|
||||
}
|
||||
}while(0);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʼ<EFBFBD><CABC> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *info debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// Sample usage: debug_output_struct_init(info);
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_output_struct_init (debug_output_struct *info)
|
||||
{
|
||||
info->type_index = 0;
|
||||
|
||||
info->display_x_max = 0xFFFF;
|
||||
info->display_y_max = 0xFFFF;
|
||||
|
||||
info->font_x_size = 0xFF;
|
||||
info->font_y_size = 0xFF;
|
||||
|
||||
info->output_uart = NULL;
|
||||
info->output_screen = NULL;
|
||||
info->output_screen_clear = NULL;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *info debug <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_output_init(info);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>㲻<EFBFBD><E3B2BB><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_output_init (debug_output_struct *info)
|
||||
{
|
||||
debug_output_info.type_index = info->type_index;
|
||||
|
||||
debug_output_info.display_x_max = info->display_x_max;
|
||||
debug_output_info.display_y_max = info->display_y_max;
|
||||
|
||||
debug_output_info.font_x_size = info->font_x_size;
|
||||
debug_output_info.font_y_size = info->font_y_size;
|
||||
|
||||
debug_output_info.output_uart = info->output_uart;
|
||||
debug_output_info.output_screen = info->output_screen;
|
||||
debug_output_info.output_screen_clear = info->output_screen_clear;
|
||||
|
||||
zf_debug_init_flag = 1;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> debug <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC> <20>˲<EFBFBD><CBB2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> debug_init();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>Դ<EFBFBD><D4B4>ʾ<EFBFBD><CABE>Ĭ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>жϽ<D0B6><CFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
void debug_init (void)
|
||||
{
|
||||
debug_output_struct info;
|
||||
debug_output_struct_init(&info);
|
||||
info.output_uart = debug_uart_str_output;
|
||||
debug_output_init(&info);
|
||||
|
||||
uart_init(
|
||||
DEBUG_UART_INDEX, // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
DEBUG_UART_BAUDRATE, // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
DEBUG_UART_TX_PIN, // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
DEBUG_UART_RX_PIN); // <20><> zf_common_debug.h <20>в鿴<D0B2><E9BFB4>Ӧֵ
|
||||
|
||||
#if DEBUG_UART_USE_INTERRUPT // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>жϲű<CFB2><C5B1><EFBFBD>
|
||||
fifo_init(&debug_uart_fifo, FIFO_DATA_8BIT, debug_uart_buffer, DEBUG_RING_BUFFER_LEN);
|
||||
uart_rx_interrupt(DEBUG_UART_INDEX, 1); // ʹ<>ܶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user