?? printf.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 + -