ERRORS9.C

[目次 | 関数]

目次

関数一覧


   1|/***************************************************************************
   2|  1. <<< [Errors9] デバッグツール・軽量版 >>> 
   3|****************************************************************************/
   4|
   5|#include  "errors.ah"
   6|
   7|#include  <stdarg.h>
   8|#include  <stdio.h>
   9|#include  <string.h>
  10|
  11|void  Errors_printfToBinMem( const char* fmt, va_list va );
  12|void  Errors_printToSDV( const char* msg );
  13| 
  14|/*-------------------------------------------------------------------------*/
  15|/* 2. <<< ◆(Errors_Log) 記録領域 >>>  */ 
  16|/*-------------------------------------------------------------------------*/
  17|
  18|Errors_Log   Errors_log[Errors_log_m];
  19|Errors_Log*  Errors_log_p = Errors_log;
  20|int  Errors_log_n = 1;
  21| 
  22|/***************************************************************************
  23|  3. <<< [Errors_Log_add] 記録領域に記録する >>> 
  24|【補足】
  25|・内部用です。
  26|****************************************************************************/
  27|void  Errors_Log_add( const char* file, int line, int type, int data )
  28|{
  29|  Errors_log_p->file = (char*)file;
  30|  Errors_log_p->line = line;
  31|  Errors_log_p->type = type;
  32|  Errors_log_p->data = data;
  33|  Errors_log_p ++;
  34|
  35|  if ( Errors_log_p >= Errors_log + Errors_log_m ) {
  36|    Errors_log_p = Errors_log + Errors_log_m / 2;
  37|    Errors_log_p->file = (char*)Errors_log_n;
  38|    Errors_log_p->line = 0;
  39|    Errors_log_p->type = 0;
  40|    Errors_log_p->data = 0;
  41|    Errors_log_p ++;
  42|    Errors_log_n++;
  43|  }
  44|}
  45|
  46| 
  47|/*-------------------------------------------------------------------------*/
  48|/* 4. <<< ◆ デバッグツール >>> */ 
  49|/*-------------------------------------------------------------------------*/
  50|
  51|int  Errors_count = 0;
  52| 
  53|/***********************************************************************
  54|  5. <<< [bp] ブレークポイント >>> 
  55|【補足】
  56|・本関数または bf にブレークポイントを張ると、エラーが発生したときに止まります。
  57|・引数は、Errors_Log 構造体に対応しています。
  58|************************************************************************/
  59|void  bp( const char* file, int line, int type, int data )
  60|{
  61|  char  msg[512];
  62|
  63|  #if defined(ERRORS_PRINTF_TO_BINMEM)
  64|  Errors_Log_add( file, line, type, data );
  65|  #endif
  66|
  67|  sprintf( msg, "Break 0x%X at %s(%d)\n", data, file, line );
  68|
  69|  #if defined(ERRORS_PRINTF_TO_SDV)
  70|    Errors_printToSDV( msg );
  71|  #endif
  72|
  73|  bf( data );
  74|}
  75|
  76| 
  77|/***************************************************************************
  78|  6. <<< [Errors_Mark_imp] Mark の関数部分 >>> 
  79|****************************************************************************/
  80|#ifndef  ERRORS_CUT_DEBUG_TOOL
  81|void  Errors_Mark_imp( char* file, int line )
  82|{
  83|  char  msg[256];
  84|
  85|  #if defined(ERRORS_PRINTF_TO_BINMEM)
  86|    Errors_Log_add( __FILE__, __LINE__, 0, 0 );
  87|  #endif
  88|
  89|  sprintf( msg, "MARK: %s (%d)\n", file, line );
  90|
  91|  #if defined(ERRORS_PRINTF_TO_SDV)
  92|    Errors_printToSDV( msg );
  93|  #endif
  94|}
  95|#endif
  96| 
  97|/***************************************************************************
  98|  7. <<< [Errors_Count_imp] COUNT の関数部分 >>> 
  99|【補足】
 100|・内部用です。
 101|【内部補足】
 102|・返り値は bool 値で、指定のカウントになったら true を返します。
 103|****************************************************************************/
 104|#ifndef  ERRORS_CUT_DEBUG_TOOL
 105|int  Errors_Count_imp( int n )
 106|{
 107|  Errors_count++;
 108|  Errors_printf( "COUNT = %d", Errors_count );
 109|  return  Errors_count == n;
 110|}
 111|#endif
 112|
 113| 
 114|/***************************************************************************
 115|  8. <<< [Errors_WD_imp] WD の関数部分 >>> 
 116|****************************************************************************/
 117|#ifndef  ERRORS_CUT_DEBUG_TOOL
 118|void  Errors_WD_imp( char* file, int line, int ver, char* name, void* p )
 119|{
 120|  char  msg[256];
 121|
 122|  #if defined(ERRORS_PRINTF_TO_BINMEM)
 123|    Errors_Log_add( __FILE__, __LINE__, 1, ver );
 124|  #endif
 125|
 126|  sprintf( msg, "%s (%p) = %d(0x%X) \'%c\' : %s(%d)\n",
 127|    name, p, ver, ver, Errors_getDispCh( ver ), file, line );
 128|
 129|  #if defined(ERRORS_PRINTF_TO_SDV)
 130|    Errors_printToSDV( msg );
 131|  #endif
 132|}
 133|#endif
 134|
 135| 
 136|/***************************************************************************
 137|  9. <<< [Errors_WS_imp] WS の関数部分 >>> 
 138|****************************************************************************/
 139|#ifndef  ERRORS_CUT_DEBUG_TOOL
 140|void  Errors_WS_imp( char* file, int line, const char* ver, char* name, void* p )
 141|{
 142|  char  msg[256];
 143|
 144|  #if defined(ERRORS_PRINTF_TO_BINMEM)
 145|    Errors_Log_add( __FILE__, __LINE__, 2, (int)ver );
 146|  #endif
 147|
 148|  sprintf( msg, "%s (%p) = %p \"%s\" : %s(%d)\n",
 149|    name, p, ver, ver, file, line );
 150|
 151|  #if defined(ERRORS_PRINTF_TO_SDV)
 152|    Errors_printToSDV( msg );
 153|  #endif
 154|}
 155|#endif
 156| 
 157|/***************************************************************************
 158|  10. <<< [Errors_WP_imp] WP の関数部分 >>> 
 159|****************************************************************************/
 160|#ifndef  ERRORS_CUT_DEBUG_TOOL
 161|void  Errors_WP_imp( char* file, int line, void* ver, char* name, void* p )
 162|{
 163|  char  msg[256];
 164|
 165|  #if defined(ERRORS_PRINTF_TO_BINMEM)
 166|    Errors_Log_add( __FILE__, __LINE__, 1, (int)ver );
 167|  #endif
 168|
 169|  sprintf( msg, "%s (%p) = %d(0x%X) : %s(%d)\n",
 170|    name, p, ver, ver, file, line );
 171|
 172|  #if defined(ERRORS_PRINTF_TO_SDV)
 173|    Errors_printToSDV( msg );
 174|  #endif
 175|}
 176|#endif
 177|
 178| 
 179|/***************************************************************************
 180|  11. <<< [Errors_printf_release] デバッグ表示(リリース版) >>> 
 181|****************************************************************************/
 182|void  Errors_printf_release( const char* fmt, ... )
 183|{
 184|  va_list  va;
 185|  char  msg[256];
 186|
 187|  #if defined(ERRORS_PRINTF_TO_BINMEM)
 188|    va_start( va, fmt );
 189|    Errors_printfToBinMem( fmt, va );
 190|    va_end( va );
 191|  #endif
 192|
 193|  va_start( va, fmt );
 194|  vsprintf( msg, fmt, va );
 195|  va_end( va );
 196|
 197|  #if defined(ERRORS_PRINTF_TO_SDV)
 198|    Errors_printToSDV( msg );
 199|    Errors_printToSDV( "\n" );
 200|  #endif
 201|}
 202|
 203|
 204|
 205| 
 206|/***************************************************************************
 207|  12. <<< [Errors_printfToBinMem] 32bit ダンプ用デバッグ出力 >>> 
 208|****************************************************************************/
 209|void  Errors_printfToBinMem( const char* fmt, va_list va )
 210|{
 211|  char*  p = (char*)fmt;
 212|  int  n = 0;
 213|  int  v[3];
 214|
 215|  Errors_Log_add( __FILE__, __LINE__, 0x10, (int)fmt );
 216|
 217|  while ( *p != '\0' ) {
 218|    if ( *p == '%' ) {
 219|      if ( *(p+1) == '%' )  p++;
 220|      else {
 221|        v[n] = va_arg( va, int );
 222|        n++;
 223|        if ( n == 3 ) {
 224|          Errors_Log_add( (char*)v[0], v[1], v[2], 0x10 );
 225|          n = 0;
 226|        }
 227|      }
 228|    }
 229|    p++;
 230|  }
 231|
 232|  if ( n > 0 ) {
 233|    if ( n == 1 )  {v[1] = 0, v[2] = 0;}
 234|    else if ( n == 2 )  v[2] = 0;
 235|    Errors_Log_add( (char*)v[0], v[1], v[2], 0x10 );
 236|  }
 237|}
 238| 
 239|/***************************************************************************
 240|  13. <<< [Errors_printToSDV] SDV 用デバッグ出力 >>> 
 241|****************************************************************************/
 242|void  Errors_printToSDV( const char* msg )
 243|{
 244|  DSerial_writeChar( 0x86 );
 245|  DSerial_writeChar( strlen(msg) );
 246|  DSerial_writeStr( msg );
 247|  DSerial_readChar();
 248|  DSerial_readChar();
 249|}
 250| 
 251|/**************************************************************************
 252|  14. <<< [Errors_getDispCh] 表示可能な文字を返す >>> 
 253|***************************************************************************/
 254|int  Errors_getDispCh( int c )
 255|{
 256|  if ( c == '\0' )  return  '0';
 257|  else if ( c == '\r' )  return ' ';
 258|  else if ( c == '\n' )  return ' ';
 259|  else if ( c > 0x100 || c < 0x20 )  return '.';
 260|  else  return  c;
 261|}
 262| 
 263|