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

📄 printf.lst

📁 此程序为twell8806驱动程序
💻 LST
字号:
C51 COMPILER V7.50   PRINTF                                                                08/20/2007 10:23:35 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE PRINTF
OBJECT MODULE PLACED IN Printf.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Printf.c COMPACT OPTIMIZE(9,SIZE)

line level    source

   1          #include "Config.h"
   2          
   3          #ifdef SERIAL
   4          
   5          #include "reg.h"
   6          #include "Typedefs.h"
   7          #include "debug.h"
   8          #include "main.h"
   9          #include "printf.h"
  10          #include <stdarg.h>
  11          
  12          CODE BYTE Hex[] = "0123456789ABCDEF";
  13          extern  bit             RS_Xbusy;                       // bit RS_Xbusy=0;
  14          extern  PDATA BYTE      DebugLevel;
  15          
  16          
  17          void DoPrint( const char CODE_P *fmt, va_list ap )
  18          {
  19   1              char  ch;
  20   1              char  i;
  21   1              long  value;
  22   1              bit   fl_zero;
  23   1              bit   fl_num;
  24   1              BYTE  fl_len;
  25   1              BYTE  cnt;
  26   1              DWORD mask=1;
  27   1      
  28   1              #ifdef KEILC
  29   1              char *ptr;
  30   1              #endif
  31   1      
  32   1              while(1) {
  33   2                      
  34   2                      //----- Find Formatter % -----
  35   2      
  36   2                      switch( ch = *fmt++ ) {
  37   3                              case 0:         return;
  38   3                              case '%':       if( *fmt != '%' ) break;
  39   3                                                      fmt++;
  40   3                              default:        _outchar( ch );
  41   3                                                      continue;
  42   3                      }
  43   2      
  44   2                      //----- Get Count -------------
  45   2                      
  46   2                      fl_zero = 0;
  47   2                      fl_num = 0;
  48   2                      cnt = 0;
  49   2      
  50   2                      ch = *fmt++;
  51   2      
  52   2                      if( ch=='0' ) {
  53   3                              fl_zero = 1;
  54   3                              ch = *fmt++;
  55   3                              cnt = ch - '0';
C51 COMPILER V7.50   PRINTF                                                                08/20/2007 10:23:35 PAGE 2   

  56   3                              ch = *fmt++;
  57   3                      }
  58   2                      else if( ch>='0' && ch<='9' ) {
  59   3                              cnt = ch - '0';
  60   3                              ch = *fmt++;
  61   3                      }
  62   2      
  63   2                      //----- Get char(B) / int / long(L) ----------------
  64   2      
  65   2                      fl_len = 2;
  66   2      
  67   2                      switch(ch) {
  68   3                      case 'l':
  69   3                      case 'L':       ch = *fmt++;    fl_len = 4;             break;
  70   3                      case 'b':
  71   3                      case 'B':       ch = *fmt++;    fl_len = 1;             break;
  72   3                      }               
  73   2      
  74   2                      //----- Get Type Discriptor -----
  75   2                      
  76   2                      switch( ch ) {
  77   3      
  78   3                              case 'd':
  79   3                              case 'u':
  80   3      
  81   3                                      switch (fl_len) {
  82   4                                      case 1:
  83   4                                              if( ch=='d' ) value = (char)va_arg( ap, char );
  84   4                                              else          value = (BYTE)va_arg( ap, BYTE );
  85   4                                              break;
  86   4      
  87   4                                      case 2:
  88   4                                              if( ch=='d' ) value = (int)va_arg( ap,  int );
  89   4                                              else          value = (WORD)va_arg( ap, WORD );
  90   4                                              break;
  91   4      
  92   4                                      case 4:
  93   4                                              if( ch=='d' ) value = (long)va_arg( ap, long );
  94   4                                              else          value = (DWORD)va_arg( ap, DWORD );
  95   4                                              break;
  96   4                                      }
  97   3      
  98   3                                      if( value<0 ) {
  99   4                                              _outchar('-');
 100   4                                              value = value*(-1);
 101   4                                      }
 102   3      
 103   3                                      if(cnt==0) {
 104   4                                              if( value==0 ) { _outchar('0'); continue; }
 105   4      
 106   4                                              for(cnt=0, mask=1; cnt<10; cnt++) {
 107   5                                                      if( (value/mask)==0 ) break;
 108   5                                                      mask = mask*10;
 109   5                                              }
 110   4                                      }
 111   3      
 112   3                                      for(i=0, mask=1; i<cnt-1; i++) mask = mask*10;
 113   3      
 114   3                                      while(1) {
 115   4                                              ch = (value / mask) + '0';
 116   4                                              if( ch=='0' && fl_zero==0 && mask!=1 ) ch=' ';
 117   4                                              else fl_zero = 1;
C51 COMPILER V7.50   PRINTF                                                                08/20/2007 10:23:35 PAGE 3   

 118   4                                              _outchar(ch);
 119   4      
 120   4                                              value = value % (mask);
 121   4                                              mask = mask / 10;
 122   4                                              
 123   4                                              if( mask==0 )
 124   4                                                      break;
 125   4                                      }
 126   3                                      continue;
 127   3      
 128   3                              case 'x':
 129   3                              case 'X':
 130   3      
 131   3                                      switch (fl_len) {
 132   4                                      case 1: value = (BYTE)va_arg( ap, BYTE );               break;
 133   4                                      case 2: value = (WORD)va_arg( ap, WORD );               break;
 134   4                                      case 4: value = (DWORD)va_arg( ap, DWORD );             break;
 135   4                                      }
 136   3      
 137   3                                      if(cnt==0) cnt = fl_len*2;
 138   3      
 139   3                                      for(i=0; i<cnt; i++) {
 140   4                                              _outchar( Hex[(value >> (cnt-i-1)*4) & 0x000f] );
 141   4                                      }
 142   3                                      continue;
 143   3      
 144   3                              case 's':
 145   3      
 146   3                                      #ifdef TASKINGC
                                              
                                              value = (WORD)va_arg( ap, WORD );
                                              while(*(char CODE_P *)value!='\0')
                                                      _outchar(*(char CODE_P *)value++);
                                              continue;
              
                                              #elif defined KEILC
 154   3                                      
 155   3                                      ptr = (char *)va_arg( ap, char* );
 156   3                                      while(*ptr!='\0')
 157   3                                              _outchar(*ptr++);
 158   3                                      continue;
 159   3      
 160   3                                      #endif
 161   3      
 162   3      
 163   3                              case 'c':
 164   3                                      value = va_arg( ap, int );
 165   3                                              _outchar((BYTE)value);
 166   3                                      continue;
 167   3      
 168   3                              default:
 169   3                                      value = (WORD)va_arg( ap, int );
 170   3                                      continue;
 171   3                      }
 172   2              }
 173   1      }
 174          
 175          //===========================================================================//
 176          //                                                                           //
 177          //===========================================================================//
 178          //va_list ap;
 179          
C51 COMPILER V7.50   PRINTF                                                                08/20/2007 10:23:35 PAGE 4   

 180          void Printf( const char CODE_P *fmt, ... )
 181          {
 182   1              va_list ap;
 183   1      
 184   1              va_start(ap, fmt);
 185   1              DoPrint( fmt, ap );
 186   1              va_end( ap );
 187   1      }
 188          
 189          void Puts( CODE_P char *ptr )
 190          {
 191   1              while(*ptr!='\0')
 192   1                      RS_tx(*ptr++);
 193   1      }
 194          
 195          //===========================================================================//
 196          //                                                                           //
 197          //===========================================================================//
 198          #ifdef DEBUG
 199          
 200          void dPrintf( const char CODE_P *fmt, ... )
 201          {
 202   1              va_list ap;
 203   1      
 204   1              if( DebugLevel >= DEBUG_INFO ) {
 205   2                      va_start(ap, fmt);
 206   2                      DoPrint( fmt, ap );
 207   2                      va_end( ap );
 208   2              }
 209   1      }
 210          /*
 211          void wPrintf( const char rom *fmt, ... )
 212          {
 213                  va_list ap;
 214          
 215                  if( DebugLevel >= DEBUG_WARN ) {
 216                          va_start(ap, fmt);
 217                          DoPrint( fmt, ap );
 218                          va_end( ap );
 219                  }
 220          }
 221          */
 222          
 223          void ePrintf( const char CODE_P *fmt, ... )
 224          {
 225   1              va_list ap;
 226   1      
 227   1              if( DebugLevel >= DEBUG_ERR ) {
 228   2                      va_start(ap, fmt);
 229   2                      DoPrint( fmt, ap );
 230   2                      va_end( ap );
 231   2              }
 232   1      }
 233          
 234          //===========================================================================//
 235          //                                                                           //
 236          //===========================================================================//
 237          void dPuts( CODE_P char *ptr )
 238          {
 239   1              if( DebugLevel >= DEBUG_INFO ) {
 240   2                      while(*ptr!='\0')
 241   2                              RS_tx(*ptr++);
C51 COMPILER V7.50   PRINTF                                                                08/20/2007 10:23:35 PAGE 5   

 242   2              }
 243   1      }
 244          
 245          void wPuts( CODE_P char *ptr )
 246          {
 247   1              if( DebugLevel >= DEBUG_WARN ) {
 248   2                      while(*ptr!='\0')
 249   2                              RS_tx(*ptr++);
 250   2              }
 251   1      }
 252          
 253          void ePuts( CODE_P char *ptr )
 254          {
 255   1              if( DebugLevel >= DEBUG_ERR ) {
 256   2                      while(*ptr!='\0')
 257   2                              RS_tx(*ptr++);
 258   2              }
 259   1      }
 260          
 261          #endif // DEBUG
 262          
 263          //===========================================================================//
 264          //                                                                           //
 265          //===========================================================================//
 266          /*
 267          #ifdef DEBUG
 268          BYTE Getch(void)
 269          {
 270                  while(!RS_ready());
 271                  return RS_rx();
 272          }
 273          #endif
 274          */
 275          BYTE Getche(void)
 276          {
 277   1              BYTE ch;
 278   1      
 279   1              while(!RS_ready());
 280   1              ch = RS_rx();
 281   1              RS_tx(ch);
 282   1      
 283   1              return ch;
 284   1      }
 285          
 286          #endif  // SERIAL


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1083    ----
   CONSTANT SIZE    =     17    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----      97
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -