📄 memtest.lst
字号:
C51 COMPILER V7.06 MEMTEST 08/11/2008 10:32:20 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MEMTEST
OBJECT MODULE PLACED IN MEMTEST.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MEMTEST.C OPTIMIZE(6,SPEED) DEBUG OBJECTEXTEND CODE
stmt level source
1 // RAM test - avoids the range from 0x4000 to 0x5100 since it is loaded there
2 #define ALLOCATE_EXTERN // Allocate explicit register addresses here
3 #include "Fx2.h"
*** WARNING C318 IN LINE 3 OF MEMTEST.C: can't open file 'Fx2.h'
4 #include "Fx2regs.h"
*** WARNING C318 IN LINE 4 OF MEMTEST.C: can't open file 'Fx2regs.h'
5
6 #define START_MEM00 0x0080
7 #define LENGTH_MEM00 (0x2000-START_MEM00)
8 #define START_MEM01 0x2000
9 #define LENGTH_MEM01 0x2000 // avoids the range from 0x4000 to 0x5100
10 // this program code is loaded at 0x4000-0x5000
11 // and XDATA is located at 0x5000-0x5100
12 #define START_MEM02 0x5100 // check 0x5100 to 0x8000
13 #define LENGTH_MEM02 (0x8000-START_MEM02)
14
15 #define START_MEM03 0x8000
16 #define LENGTH_MEM03 0x61FF // stop at 512 byte(s) reserved
17
18 #define START_MEM04 0xE400 // check GPIF waveform buffer
19 #define LENGTH_MEM04 0x007F // and stop at 384 byte(s) reserved
20
21 #define START_MEM05 0xE740 // check endpoint 0 & 1 buffer(s)
22 #define LENGTH_MEM05 0x00BF // and stop at 2k Reserved & 2,4,6,8 buffer(s)
23
24 #define START_MEM06 0xF000 // check EP2
25 #define LENGTH_MEM06 0x0200
26
27 #define START_MEM07 0xF400 // check EP4
28 #define LENGTH_MEM07 0x0200
29
30 #define START_MEM08 0xF800 // check EP6
31 #define LENGTH_MEM08 0x0200
32
33 #define START_MEM09 0xFC00 // check EP8
34 #define LENGTH_MEM09 0x0200
35
36 #define LED_ADDR 0x21
37
38 BYTE xdata Digit[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x98, 0x88, 0x83, 0xc6, 0xa1,
- 0x86, 0x8e };
*** ERROR C129 IN LINE 38 OF MEMTEST.C: missing ';' before 'xdata'
39 BYTE xdata Alpha[] = { 0x88,0x83,0xa7,0xa1,0x86,0x8e,0x90,0x8b,0xef,0xe1,0x87,0xc7,0x80,0xab,0xa3,0x8c,0x4
-0,0xaf,0x92,0x87,0xc1,0xcd,0x80,0x89,0x99,0xa4 };
40 BYTE xdata blank = 0xff;
41
42 BYTE err_lvl;
43
44 extern BOOL test_data(void);
45
46 long test_mem(BYTE xdata *addr, WORD length)
47 {
48 WORD i;
49 BYTE data1;
50 BYTE data2;
C51 COMPILER V7.06 MEMTEST 08/11/2008 10:32:20 PAGE 2
51
52 err_lvl = 1;
53
54 for(i = 0; i < length; ++i)
55 addr[i] = 0x00;
56 for(i = 0; i < length; ++i)
57 if(addr[i] != 0x00)
58 return(addr+i);
59
60 err_lvl = 2;
61
62 for(i = 0; i < length; ++i)
63 addr[i] = 0xff;
64 for(i = 0; i < length; ++i)
65 if(addr[i] != 0xff)
66 return(addr+i);
67
68 err_lvl = 3;
69
70 for(i = 0; i < length; ++i)
71 addr[i] = 0xaa;
72 for(i = 0; i < length; ++i)
73 if(addr[i] != 0xaa)
74 return(addr+i);
75
76 err_lvl = 4;
77
78 for(i = 0; i < length; ++i)
79 addr[i] = 0x55;
80 for(i = 0; i < length; ++i)
81 if(addr[i] != 0x55)
82 return(addr+i);
83
84 err_lvl = 5;
85
86 for(i = length-1; i > 0; --i) // Check the address bus -- LSB only
87 addr[i] = LSB(i) + MSB(i) * 3;
88 for(i = length-1; i > 0; --i)
89 if(addr[i] != (BYTE) (LSB(i) + MSB(i) * 3))
90 return(addr+i);
91
92 err_lvl = 6;
93
94 for(i = 0; i < length; ++i)
95 addr[i] = LSB(i) + MSB(i) * 3;
96 for(i = 0; i < length; ++i)
97 if(addr[i] != (BYTE) (LSB(i) + MSB(i) * 3))
98 return(addr+i);
99
100 err_lvl = 7;
101
102 if( ((addr+length) <= 0x2000) ||((addr+length) >= 0xF000) ) // internal data access only via AUTODAT1
103 {
104 for(i = 0; i < length; ++i)
105 addr[i] = 0x00;
106 APTR1H = MSB(addr);
107 APTR1L = LSB(addr);
108 for(i = 0; i < length; ++i)
109 {
110 data1 = LSB(i) + MSB(i) * 3;
111 EXTAUTODAT1 = data1;
112 }
C51 COMPILER V7.06 MEMTEST 08/11/2008 10:32:20 PAGE 3
113
114 APTR1H = MSB(addr);
115 APTR1L = LSB(addr);
116 for(i = 0; i < length; ++i)
117 {
118 data2 = EXTAUTODAT1;
119 if(data2 != (BYTE) (LSB(i) + MSB(i) * 3))
120 return(addr+i);
121 }
122 }
123
124 return(-1);
125 }
126
127 void status(WORD stat)
128 {
129 WORD saveStat = stat;
130 BYTE i;
131
132 while(TRUE)
133 {
134 stat=saveStat;
135 for (i = 0; i < 4; i++, stat <<= 4)
136 {
137 EZUSB_WriteI2C(LED_ADDR, 0x01, &(Digit[(stat>>12)&0xf]));
138 EZUSB_WaitForEEPROMWrite(LED_ADDR);
139 EZUSB_Delay(400);
140 EZUSB_WriteI2C(LED_ADDR, 0x01, &blank);
141 EZUSB_WaitForEEPROMWrite(LED_ADDR);
142 EZUSB_Delay(200);
143 }
144 EZUSB_WriteI2C(LED_ADDR, 0x01, &blank);
145 EZUSB_WaitForEEPROMWrite(LED_ADDR);
146 EZUSB_Delay(500);
147 }
148 }
149
150 void statString(char *stat)
151 {
152 BYTE i;
153
154 for (i = 0; stat[i]; i++)
155 {
156 EZUSB_WriteI2C(LED_ADDR, 0x01, &(Alpha[(stat[i] & 0x5f)-'A']));
157 EZUSB_WaitForEEPROMWrite(LED_ADDR);
158 EZUSB_Delay(400);
159 EZUSB_WriteI2C(LED_ADDR, 0x01, &blank);
160 EZUSB_WaitForEEPROMWrite(LED_ADDR);
161 EZUSB_Delay(200);
162 }
163 EZUSB_WriteI2C(LED_ADDR, 0x01, &blank);
164 EZUSB_WaitForEEPROMWrite(LED_ADDR);
165 EZUSB_Delay(500);
166 }
167
168 main()
169 {
170 BYTE xdata *xd;
171 BYTE code *cd;
172 long addr;
173 BYTE xdata buttons = 0;
174 BYTE xdata cont_loop = 1;
C51 COMPILER V7.06 MEMTEST 08/11/2008 10:32:20 PAGE 4
175
176
177 EZUSB_InitI2C();
178 CPUCS = 0x10; // set 48Mhz bit
179 IFCONFIG = 0xF6; // GPIF Int clock 48Mhz GSTATE SYNC 1111 0110
180
181 // enable dual autopointer feature
182 AUTOPTRSETUP |= 0x01;
183
184 EZUSB_WriteI2C(LED_ADDR, 0x01, &(Digit[0]));
185 EZUSB_WaitForEEPROMWrite(LED_ADDR);
186
187 while(cont_loop)
188 {
189
190 addr = test_mem(START_MEM00,LENGTH_MEM00);
191 if (addr != -1)
192 status(addr);
193
194
195 addr = test_mem(START_MEM01,LENGTH_MEM01);
196 if (addr != -1)
197 status(addr);
198
199 addr = test_mem(START_MEM02,LENGTH_MEM02);
200 if (addr != -1)
201 status(addr);
202
203 addr = test_mem(START_MEM03,LENGTH_MEM03);
204 if (addr != -1)
205 status(addr);
206
207 addr = test_mem(START_MEM06,LENGTH_MEM06);
208 if (addr != -1)
209 status(addr);
210
211 addr = test_mem(START_MEM07,LENGTH_MEM07);
212 if (addr != -1)
213 status(addr);
214
215 addr = test_mem(START_MEM08,LENGTH_MEM08);
216 if (addr != -1)
217 status(addr);
218
219 addr = test_mem(START_MEM09,LENGTH_MEM09);
220 if (addr != -1)
221 status(addr);
222
223 IFCONFIG = 0x02;
224
225 addr = test_mem(START_MEM04,LENGTH_MEM04); // Do WF Mem test
226 if (addr != -1)
227 status(addr);
228
229 addr = test_mem(START_MEM05,LENGTH_MEM05);
230 if (addr != -1)
231 status(addr);
232
233 xd = (BYTE xdata *)START_MEM00;
234 cd = (BYTE code *)START_MEM01;
235
236 *xd = *cd + 1;
C51 COMPILER V7.06 MEMTEST 08/11/2008 10:32:20 PAGE 5
237
238 if(*xd != *cd)
239 {
240 statString("good");
241 }
242 }
243
244 statString("dog"); // Never happen
245 EZUSB_ReadI2C(0x20,0x01,&buttons); // Read button states
246
247 }
248
C51 COMPILATION COMPLETE. 2 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -