📄 debug.c
字号:
//! @file debug.c
//!
//! Copyright (c) 2004
//!
//! Please read file license.txt for copyright notice.
//!
//! @brief This file contains the routines of debug trace and assert
//!
//! @version 1.1 (c5131-usb-generic-1_2_0)
//!
//! @todo
//! @bug
//#define _TRACE_ (ENABLE)
//_____ I N C L U D E S ___________________________________________________
#include "config.h"
#include "debug.h"
//_____ M A C R O S ________________________________________________________
//_____ D E F I N I T I O N S ______________________________________________
// Board Config
//_____ D E C L A R A T I O N S ____________________________________________
//! Fonction used to enable OCD
//! perform an OCD software entry,
//! set Baudrate to valueperform an OCD software entry
//!
#if 0
//This does not compile
void ocd_enable(Bool ocd_activ)
{
Byte tmp;
//Save PPCON configuration
tmp=PPCON;
Mcu_set_sfr_page_ocd();
// OCD software entry sequence
Ocd_soft_entry();
//Set Baudrate to appropriate value
OBRL=OCD_BRL_VALUE; //OBRL=0x26; //for 19200 at 12Mhz
//exit software monitor mode
if(ocd_activ)
MJB=0;
//Restore initial SFR page
Set_sfr_page( tmp );
}
#endif
#if (_TRACE_==ENABLE)
U8 _MEM_TYPE_SLOW_ g_trace_en=TRUE;
//! This macro is used to output a character on OCD/Serial Debug Interface
//! when SOFT_OCD switch enabled, character is output as is
//! => VT100 or Hyperterminal usage
//! when switch disabled, character are ORed with 0x80 to distinguish from
//! debug status byte output from OCD hardware
//! => OCD dongle usage
//!
//! @param val character to output on SDI
static void put_OCD( U8 val )
{
while( OSCON & MSK_OCDTBSY );
# ifdef SOFT_OCD
OSBUF = val;
# else
OSBUF = (val|0x80);
# endif
}
//! Fonction used to display a byte value in the decimal form (16 bits) on OCD/Serial Debug Interface
//!
//! @param val: value of byte
//!
void trace_u32( U32 val )
{
_MEM_TYPE_SLOW_ U32 div;
_MEM_TYPE_SLOW_ U32 tmp;
Bool filter=TRUE;
if( FALSE==g_trace_en ) return;
put_OCD( TRACE_START_CHAR );
for( div=1000000000 ; div!=1 ; val%=div, div/=10 )
{
tmp = val/div;
if ( ( filter==TRUE ) && !tmp ) { continue; }
filter=FALSE;
put_OCD('0' + tmp );
}
put_OCD('0' + val );
put_OCD( TRACE_STOP_CHAR );
}
//! Fonction used to display a byte value in the decimal form (16 bits) on OCD/Serial Debug Interface
//!
//! @param val: value of byte
//!
void trace_u16( U16 val )
{
_MEM_TYPE_SLOW_ U16 div;
_MEM_TYPE_SLOW_ U16 tmp;
Bool filter=TRUE;
if( FALSE==g_trace_en ) return;
put_OCD( TRACE_START_CHAR );
for( div=10000 ; div!=1 ; val%=div, div/=10 )
{
tmp = val/div;
if ( ( filter==TRUE ) && !tmp ) { continue; }
filter=FALSE;
put_OCD('0' + tmp );
}
put_OCD('0' + val );
put_OCD( TRACE_STOP_CHAR );
}
//! Fonction used to display a byte value in the decimal form (16 bits) on OCD/Serial Debug Interface
//!
//! @param val: value of byte
//!
void trace_u8( U16 val )
{
_MEM_TYPE_SLOW_ U8 div;
_MEM_TYPE_SLOW_ U8 tmp;
Bool filter=TRUE;
if( FALSE==g_trace_en ) return;
put_OCD( TRACE_START_CHAR );
for( div=100 ; div!=1 ; val%=div, div/=10 )
{
tmp = val/div;
if ( ( filter==TRUE ) && !tmp ) { continue; }
filter=FALSE;
put_OCD('0' + tmp );
}
put_OCD('0' + val );
put_OCD( TRACE_STOP_CHAR );
}
//! Fonction used to display a byte value in the hex form on OCD/Serial Debug Interface
//!
//! @param val: value of byte
//!
void trace_hex( U8 val )
{
if( FALSE==g_trace_en ) return;
put_OCD( TRACE_START_CHAR );
if ((val >> 4) >= 10) { put_OCD('A' + (val >> 4) - 10); }
else { put_OCD('0' + (val >> 4)); }
if ((val & 0x0F) >= 10) { put_OCD('A' + (val & 0x0F) - 10); }
else { put_OCD('0' + (val & 0x0F)); }
put_OCD( TRACE_STOP_CHAR );
}
#endif
#if (_TRACE_==ENABLE)
//! Fonction used for send a texte on OCD/Serial Debug Interface
//!
//! @param str: texte to send (max. size = 256)
//!
void trace( const U8* str )
{
U8 index=0;
if( FALSE==g_trace_en ) return;
put_OCD( TRACE_START_CHAR );
while( 0 != str[index] )
{
put_OCD( str[index++] );
}
put_OCD( TRACE_STOP_CHAR );
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -