📄 xmodem.lst
字号:
C51 COMPILER V7.01 XMODEM 08/31/2007 14:11:36 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE XMODEM
OBJECT MODULE PLACED IN .\xmodem.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\source\xmodem.c BROWSE DEBUG OBJECTEXTEND LISTINCLUDE PRINT(.\xmodem.lst
-) OBJECT(.\xmodem.obj)
stmt level source
1 static unsigned char xmodem_buff[128+4];
2 static unsigned char xmodem_block_number;
3 static int xmodem_index = -1;
4
5 static int get_xmodem_frame(void)
6 {
7 1 TIMER timeout;
*** ERROR C202 IN LINE 7 OF ..\SOURCE\XMODEM.C: 'TIMER': undefined identifier
*** ERROR C141 IN LINE 7 OF ..\SOURCE\XMODEM.C: syntax error near 'timeout'
8 1 int index;
*** ERROR C141 IN LINE 8 OF ..\SOURCE\XMODEM.C: syntax error near 'int'
*** ERROR C202 IN LINE 8 OF ..\SOURCE\XMODEM.C: 'index': undefined identifier
9 1 int c;
*** ERROR C141 IN LINE 9 OF ..\SOURCE\XMODEM.C: syntax error near 'int'
*** ERROR C202 IN LINE 9 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
10 1
11 1 xmodem_index = -1;
12 1
13 1 set_timer(&timeout, ONE_SECOND*10 );
*** ERROR C202 IN LINE 13 OF ..\SOURCE\XMODEM.C: 'timeout': undefined identifier
14 1
15 1 do {
16 2 c = getchar();
*** ERROR C202 IN LINE 16 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
17 2 } while(c < 0 && ! timer_expired(&timeout));
*** ERROR C202 IN LINE 17 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
18 1
19 1 if(c < 0) {
20 2 return -1;
21 2 }
22 1
23 1 if(c != XMODEM_SOH && c != XMODEM_EOT && c != XMODEM_CAN) {
*** ERROR C202 IN LINE 23 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
24 2 set_timer(&timeout, ONE_SECOND);
*** ERROR C202 IN LINE 24 OF ..\SOURCE\XMODEM.C: 'timeout': undefined identifier
25 2 do {
26 3 c = getchar();
*** ERROR C202 IN LINE 26 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
27 3 if(c >= 0) {
*** ERROR C202 IN LINE 27 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
28 4 set_timer(&timeout, ONE_SECOND);
*** ERROR C202 IN LINE 28 OF ..\SOURCE\XMODEM.C: 'timeout': undefined identifier
29 4 }
30 3 } while( ! timer_expired(&timeout));
*** ERROR C202 IN LINE 30 OF ..\SOURCE\XMODEM.C: 'timeout': undefined identifier
31 2 return -1;
32 2 }
33 1
34 1 index = 0;
*** ERROR C202 IN LINE 34 OF ..\SOURCE\XMODEM.C: 'index': undefined identifier
35 1 xmodem_buff[index++] = c;
*** ERROR C202 IN LINE 35 OF ..\SOURCE\XMODEM.C: 'index': undefined identifier
36 1
37 1 if(c == XMODEM_EOT || c == XMODEM_CAN)
C51 COMPILER V7.01 XMODEM 08/31/2007 14:11:36 PAGE 2
*** ERROR C202 IN LINE 37 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
38 1 {
39 2 return 0;
40 2 }
41 1
42 1 while(index < sizeof(xmodem_buff)) {
*** ERROR C202 IN LINE 42 OF ..\SOURCE\XMODEM.C: 'index': undefined identifier
43 2
44 2 set_timer(&timeout, ONE_SECOND);
*** ERROR C202 IN LINE 44 OF ..\SOURCE\XMODEM.C: 'timeout': undefined identifier
45 2
46 2 do
47 2 {
48 3 c = getchar();
*** ERROR C202 IN LINE 48 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
49 3 }
50 2 while(c < 0 && ! timer_expired(&timeout));
*** ERROR C202 IN LINE 50 OF ..\SOURCE\XMODEM.C: 'c': undefined identifier
51 2
52 2 if(c < 0) {
53 3 return -1;
54 3 }
55 2
56 2 xmodem_buff[index++] = c;
*** ERROR C202 IN LINE 56 OF ..\SOURCE\XMODEM.C: 'index': undefined identifier
57 2 }
58 1
59 1 xmodem_index = 0;
60 1 return 0;
61 1 }
62
63
64 static int xmodem_verify_frame(void)
65 {
66 1 int i;
67 1 unsigned char checksum;
68 1
69 1 if(xmodem_buff[0] != XMODEM_SOH) {
*** ERROR C202 IN LINE 69 OF ..\SOURCE\XMODEM.C: 'XMODEM_SOH': undefined identifier
70 2 return -1;
71 2 }
72 1 if(xmodem_buff[1] != xmodem_block_number) {
73 2 return -1;
74 2 }
75 1
76 1 if(xmodem_buff[2] != ((~xmodem_block_number) & 0xff)) {
77 2 return -1;
78 2 }
79 1
80 1 checksum = 0;
81 1
82 1 for(i = 3; i < sizeof(xmodem_buff)-1; i++) {
83 2 checksum += xmodem_buff[i];
84 2 }
85 1
86 1 if(checksum != xmodem_buff[sizeof(xmodem_buff)-1]) {
*** ERROR C193 IN LINE 86 OF ..\SOURCE\XMODEM.C: '!=': bad operand type
87 2 return -1;
88 2 }
89 1
90 1 return 0;
91 1 }
C51 COMPILER V7.01 XMODEM 08/31/2007 14:11:36 PAGE 3
92
93 static int xmodem_get_more(void)
94 {
95 1 int err;
96 1 int err_retry_count;
97 1
98 1 xmodem_block_number++;
99 1 err_retry_count = 0;
100 1
101 1 while(err_retry_count < XMODEM_ERR_RETRY_COUNT)
*** ERROR C202 IN LINE 101 OF ..\SOURCE\XMODEM.C: 'XMODEM_ERR_RETRY_COUNT': undefined identifier
102 1 {
103 2 if(xmodem_index < 0) {
104 3 putchar(XMODEM_NAK);
*** ERROR C202 IN LINE 104 OF ..\SOURCE\XMODEM.C: 'XMODEM_NAK': undefined identifier
105 3 }
106 2
107 2 err = get_xmodem_frame();
108 2
109 2 if(err == 0) {
110 3 if(xmodem_buff[0] == XMODEM_SOH) {
*** ERROR C202 IN LINE 110 OF ..\SOURCE\XMODEM.C: 'XMODEM_SOH': undefined identifier
111 4 if( xmodem_verify_frame() == 0) {
112 5 putchar(XMODEM_ACK);//uart_sendchar
*** ERROR C202 IN LINE 112 OF ..\SOURCE\XMODEM.C: 'XMODEM_ACK': undefined identifier
113 5 xmodem_index = 3;
114 5 return 0;
115 5 } else if(xmodem_buff[1] == xmodem_block_number -1) {
116 5 putchar(XMODEM_ACK);//uart_sendchar
*** ERROR C202 IN LINE 116 OF ..\SOURCE\XMODEM.C: 'XMODEM_ACK': undefined identifier
117 5 } else {
118 5 xmodem_index = -1;
119 5 }
120 4 err_retry_count++;
121 4 continue;
122 4 } else if(xmodem_buff[0] == XMODEM_EOT) {
*** ERROR C202 IN LINE 122 OF ..\SOURCE\XMODEM.C: 'XMODEM_EOT': undefined identifier
123 4 putchar(XMODEM_ACK);
*** ERROR C202 IN LINE 123 OF ..\SOURCE\XMODEM.C: 'XMODEM_ACK': undefined identifier
124 4 xmodem_index = -1;
125 4 return -1;
126 4 }
127 3 }
128 2
129 2 xmodem_index = -1;
130 2 err_retry_count++;
131 2 }
132 1
133 1 xmodem_index = -1;
134 1 return -2;
135 1 }
136
137 static int xmodem_eof(void)
138 {
139 1 int i;
140 1
141 1 if(xmodem_index < 0) {
142 2 return 1;
143 2 }
144 1
145 1 for( i = xmodem_index; i < sizeof(xmodem_buff) -1; i++) {
146 2 if(xmodem_buff[i] != XMODEM_EOF) {
C51 COMPILER V7.01 XMODEM 08/31/2007 14:11:36 PAGE 4
*** ERROR C202 IN LINE 146 OF ..\SOURCE\XMODEM.C: 'XMODEM_EOF': undefined identifier
147 3 return 0;
148 3 }
149 2 }
150 1
151 1 if(peekchar() != XMODEM_EOT) {
152 2 return 0;
153 2 }
154 1
155 1 return 1;
156 1 }
157
158 int xmodem_start(void)
159 {
160 1 xmodem_index = sizeof(xmodem_buff)-1;
161 1 xmodem_block_number = 0;
162 1
163 1 return 0;
164 1 }
165
166 int xmodem_finish(void)
167 {
168 1 int c;
169 1
170 1 do {
171 2 c = xmodem_getchar();
172 2 } while(c >= 0);
173 1
174 1 return 0;
175 1 }
176
177
178 int xmodem_abort(void)
179 {
180 1 int i;
181 1
182 1 for(i=0; i<8; i++) {
183 2 putchar(XMODEM_CAN);
184 2 }
185 1
186 1 xmodem_finish();
187 1
188 1 return 0;
189 1 }
190
191 /****************************************************************
192 * This is the user api call for xmodem transfers.
193 *
194 *
195 */
196
197 int xmodem_getchar(void)
198 {
199 1 int err;
200 1 int c;
201 1 if(xmodem_index < 0) {
202 2 return -1;
203 2 }
204 1
205 1 if(xmodem_index >= sizeof(xmodem_buff)-1) {
206 2 err = xmodem_get_more();
207 2
C51 COMPILER V7.01 XMODEM 08/31/2007 14:11:36 PAGE 5
208 2 if(err < 0) {
209 3 return err;
210 3 }
211 2 }
212 1
213 1 c = xmodem_buff[xmodem_index];
214 1 xmodem_index++;
215 1
216 1 if(c == XMODEM_EOF) {
217 2 if( xmodem_eof() ) {
218 3 xmodem_finish();
219 3 xmodem_index = -1;
220 3 return -1;
221 3 }
222 2 }
223 1
224 1 return c;
225 1 }
226
C51 COMPILATION COMPLETE. 0 WARNING(S), 33 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -