⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 debug.c

📁 用AT89C5131A开发USB的框架很好用
💻 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 + -