start08.lst
来自「在MC68HC908JB8上移植UCOSII成功」· LST 代码 · 共 413 行 · 第 1/2 页
LST
413 行
142: #if USE_C_IMPL /* (optimized) C implementation of COPY DOWN */
143: p = (int*)_startupData.toCopyDownBeg;
144: for (;;) {
145: i = *p; /* nof */
146: if (i == 0) {
147: break;
148: }
149: dst = (char*)p[1]; /* dstAddr */
150: p+=2;
151: do {
152: /* p points now into 'bytes' */
153: *dst = *((char*)p); /* copy byte-wise */
154: ((char*)p)++;
155: dst++;
156: i--;
157: } while (i!= 0);
158: }
159: #elif defined(__OPTIMIZE_FOR_SIZE__)
160: {
161:
162: asm {
163: LDA _startupData.toCopyDownBeg:(1+toCopyDownBegOffs)
003f c60011 LDA _startupData:17
164: PSHA
0042 87 PSHA
165: LDA _startupData.toCopyDownBeg:(0+toCopyDownBegOffs)
0043 c60010 LDA _startupData:16
166: PSHA
0046 87 PSHA
0047 L47:
167: Loop0:
168: JSR loadByte ; load high byte counter
0047 ad00 BSR loadByte
169: TAX ; save for compare
0049 97 TAX
170: INCA
004a 4c INCA
171: STA i
004b 9ee703 STA 3,SP
172: JSR loadByte ; load low byte counter
004e ad00 BSR loadByte
173: INCA
0050 4c INCA
174: STA i:1
0051 9ee704 STA 4,SP
175: DECA
0054 4a DECA
176: BNE notfinished
0055 2603 BNE L5A ;abs = 005a
177: CBEQX #0, finished
0057 510018 CBEQX #0,L72 ;abs = 0072
005a L5A:
178: notfinished:
179:
180: JSR loadByte ; load high byte ptr
005a ad00 BSR loadByte
181: PSHA
005c 87 PSHA
182: PULH
005d 8a PULH
183: JSR loadByte ; load high byte ptr
005e ad00 BSR loadByte
184: TAX ; HX is now destination pointer
0060 97 TAX
185: BRA Loop1
0061 2005 BRA L68 ;abs = 0068
0063 L63:
186: Loop3:
187: Loop2:
188: JSR loadByte ; load data byte
0063 ad00 BSR loadByte
189: STA 0,X
0065 f7 STA ,X
190: AIX #1
0066 af01 AIX #1
0068 L68:
191: Loop1:
192: DBNZ i:1, Loop2
0068 9e6b04f7 DBNZ 4,SP,L63 ;abs = 0063
193: DBNZ i:0, Loop3
006c 9e6b03f3 DBNZ 3,SP,L63 ;abs = 0063
194: BRA Loop0
0070 20d5 BRA L47 ;abs = 0047
0072 L72:
195:
196: finished:
197: AIS #2
198: }
199: }
200:
201:
202:
203:
204: #else /* optimized asm version. Some bytes (ca 3) larger than C version (when considering the runtime routine too), but about 4 times faster */
205: asm {
206: LDX _startupData.toCopyDownBeg:(0+toCopyDownBegOffs)
207: PSHX
208: PULH
209: LDX _startupData.toCopyDownBeg:(1+toCopyDownBegOffs)
210: next:
211: LDA 0,X ; list is terminated by 2 zero bytes
212: ORA 1,X
213: BEQ copydone
214: PSHX ; store current position
215: PSHH
216: LDA 3,X ; psh dest low
217: PSHA
218: LDA 2,X ; psh dest high
219: PSHA
220: LDA 1,X ; psh cnt low
221: PSHA
222: LDA 0,X ; psh cnt high
223: PSHA
224: AIX #4
225: JSR _COPY_L ; copy one block
226: PULH
227: PULX
228: TXA
229: ADD 1,X ; add low
230: PSHA
231: PSHH
232: PULA
233: ADC 0,X ; add high
234: PSHA
235: PULH
236: PULX
237: AIX #4
238: BRA next
239: copydone:
240: }
241: #endif
242:
243:
244: /* FuncInits: for C++, this are the global constructors */
245: #ifdef __cplusplus
246: #ifdef __ELF_OBJECT_FILE_FORMAT__
247: i = _startupData.nofInitBodies - 1;
248: while ( i >= 0) {
249: (&_startupData.initBodies->initFunc)[i](); /* call C++ constructors */
250: i--;
251: }
252: #else
253: if (_startupData.mInits != NULL) {
254: _PFunc *fktPtr;
255: fktPtr = _startupData.mInits;
256: while(*fktPtr != NULL) {
257: (**fktPtr)(); /* call constructor */
258: fktPtr++;
259: }
260: }
261: #endif
262: #endif
263: /* LibInits: used only for ROM libraries */
264: }
0072 a706 AIS #6
0074 81 RTS
265:
266: #pragma NO_EXIT
267: #ifdef __cplusplus
268: extern "C"
269: #endif
270: void _Startup (void) { /* To set in the linker parameter file: 'VECTOR 0 _Startup' */
Function: _Startup
Source : C:\motoctest\ucos1\sources\Start08.c
Options : -Cc -EnvGENPATH=C:\motoctest\ucos1;C:\motoctest\ucos1\bin;C:\motoctest\ucos1\cmd;C:\motoctest\ucos1\prm;C:\motoctest\ucos1\sources;C:\Metrowerks\lib\HC08c\LIB;C:\Metrowerks\lib\HC08c\src;C:\Metrowerks\lib\HC08c\INCLUDE -EnvLIBPATH=C:\Metrowerks\lib\HC08c\INCLUDE -EnvOBJPATH=C:\motoctest\ucos1\bin -EnvTEXTPATH=C:\motoctest\ucos1\bin -La=%f.inc -Lasm=%n.lst -ObjN=C:\motoctest\ucos1\ucos1_Data\MMDS-MMEVS\ObjectCode\Start08.c.o -WmsgSd20001
271: /* purpose: 1) initialize the stack
272: 2) initialize run-time, ...
273: initialize the RAM, copy down init dat etc (Init)
274: 3) call main;
275: called from: _PRESTART-code generated by the Linker
276: */
277: #ifdef __ELF_OBJECT_FILE_FORMAT__
278: DisableInterrupts; /* in HIWARE format, this is done in the prestart code */
279: #endif
280: asm{
281: MOV #$27,31// USB Reset Disable, COP Disable
0000 6e271f MOV #39,31
0003 L3:
282: }
283: for (;;) { /* forever: initialize the program; call the root-procedure */
284: if (!(_startupData.flags&STARTUP_FLAGS_NOT_INIT_SP)) {
0003 c60001 LDA _startupData:1
0006 a502 BIT #2
0008 2604 BNE LE ;abs = 000e
285: /* initialize the stack pointer */
286: INIT_SP_FROM_STARTUP_DESC();
000a 450000 LDHX @__SEG_END_SSTACK
000d 94 TXS
000e LE:
287: }
288: Init();
000e cd0000 JSR Init
289: (*_startupData.main)();
0011 ce0002 LDX _startupData:2
0014 89 PSHX
0015 8a PULH
0016 ce0003 LDX _startupData:3
0019 fd JSR ,X
001a 20e7 BRA L3 ;abs = 0003
290: } /* end loop forever */
291: }
292:
293:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?