?? os.lst
字號:
121:os.c **** void OSH_sleep(void)
122:os.c **** {
346 .LM55:
347 /* prologue: frame size=0 */
348 /* prologue end (size=0) */
123:os.c **** * (volatile unsigned char *)(0x35 + 0x20) |= 1 << 5;
350 .LM56:
351 00b2 85B7 in r24,85-0x20
352 00b4 8062 ori r24,lo8(32)
353 00b6 85BF out 85-0x20,r24
124:os.c **** __asm volatile ("sleep");}
355 .LM57:
356 /* #APP */
357 00b8 8895 sleep
358 /* #NOAPP */
359 /* epilogue: frame size=0 */
360 00ba 0895 ret
361 /* epilogue end (size=1) */
362 /* function OSH_sleep size 6 (5) */
366 .global AtomicEnd
368 AtomicEnd:
125:os.c ****
126:os.c **** void AtomicEnd(uint8_t oldSreg)
127:os.c **** {
370 .LM58:
371 /* prologue: frame size=0 */
372 /* prologue end (size=0) */
128:os.c **** * (volatile unsigned char *)(0x3F + 0x20) = oldSreg;
374 .LM59:
375 00bc 8FBF out 95-0x20,r24
376 /* epilogue: frame size=0 */
377 00be 0895 ret
378 /* epilogue end (size=1) */
379 /* function AtomicEnd size 2 (1) */
382 .global AtomicStart
384 AtomicStart:
129:os.c **** }
130:os.c ****
131:os.c **** uint8_t AtomicStart(void )
132:os.c **** {
386 .LM60:
387 /* prologue: frame size=0 */
388 /* prologue end (size=0) */
133:os.c **** uint8_t result = * (volatile unsigned char *)(0x3F + 0x20);
390 .LM61:
391 00c0 8FB7 in r24,95-0x20
134:os.c ****
135:os.c **** __asm volatile ("cli");
393 .LM62:
394 /* #APP */
395 00c2 F894 cli
136:os.c **** return result;
137:os.c **** }
397 .LM63:
398 /* #NOAPP */
399 00c4 9927 clr r25
400 /* epilogue: frame size=0 */
401 00c6 0895 ret
402 /* epilogue end (size=1) */
403 /* function AtomicStart size 5 (4) */
407 .global OSHRunNextTask
409 OSHRunNextTask:
138:os.c ****
139:os.c **** bool OSHRunNextTask(void)
140:os.c **** {
411 .LM64:
412 /* prologue: frame size=0 */
413 00c8 0F93 push r16
414 00ca 1F93 push r17
415 /* prologue end (size=2) */
141:os.c **** uint8_t fInterruptFlags;
142:os.c **** uint8_t old_full;
143:os.c **** void (*func)(void );
144:os.c ****
145:os.c **** if (OSH_sched_full == OSH_sched_free) {
417 .LM65:
418 00cc 9091 0000 lds r25,OSH_sched_full
419 00d0 8091 0000 lds r24,OSH_sched_free
420 00d4 9817 cp r25,r24
421 00d6 19F4 brne .L19
146:os.c ****
147:os.c **** return 0;
423 .LM66:
424 00d8 80E0 ldi r24,lo8(0)
425 00da 90E0 ldi r25,hi8(0)
426 00dc 1EC0 rjmp .L18
427 .L19:
148:os.c **** }
149:os.c **** else {
150:os.c **** fInterruptFlags = AtomicStart();
429 .LM67:
430 00de 0E94 0000 call AtomicStart
151:os.c **** old_full = OSH_sched_full;
432 .LM68:
433 00e2 2091 0000 lds r18,OSH_sched_full
152:os.c **** OSH_sched_full++;
435 .LM69:
436 00e6 9091 0000 lds r25,OSH_sched_full
437 00ea 9F5F subi r25,lo8(-(1))
438 00ec 9093 0000 sts OSH_sched_full,r25
153:os.c **** OSH_sched_full &= OSH_TASK_BITMASK;
440 .LM70:
441 00f0 9091 0000 lds r25,OSH_sched_full
442 00f4 9770 andi r25,lo8(7)
443 00f6 9093 0000 sts OSH_sched_full,r25
154:os.c **** func = OSH_queue[(int )old_full].tp;
445 .LM71:
446 00fa E22F mov r30,r18
447 00fc FF27 clr r31
448 00fe EE0F add r30,r30
449 0100 FF1F adc r31,r31
450 0102 E050 subi r30,lo8(-(OSH_queue))
451 0104 F040 sbci r31,hi8(-(OSH_queue))
452 0106 0081 ld r16,Z
453 0108 1181 ldd r17,Z+1
155:os.c **** OSH_queue[(int )old_full].tp = 0;
455 .LM72:
456 010a 1082 st Z,__zero_reg__
457 010c 1182 std Z+1,__zero_reg__
156:os.c **** AtomicEnd(fInterruptFlags);
459 .LM73:
460 010e 0E94 0000 call AtomicEnd
157:os.c **** func();
462 .LM74:
463 0112 F801 movw r30,r16
464 0114 0995 icall
158:os.c **** return 1;
466 .LM75:
467 0116 81E0 ldi r24,lo8(1)
468 0118 90E0 ldi r25,hi8(1)
469 .L18:
470 /* epilogue: frame size=0 */
471 011a 1F91 pop r17
472 011c 0F91 pop r16
473 011e 0895 ret
474 /* epilogue end (size=3) */
475 /* function OSHRunNextTask size 44 (39) */
480 .global OSHRunTask
482 OSHRunTask:
159:os.c **** }
160:os.c **** }
161:os.c ****
162:os.c **** void OSHRunTask(void)
163:os.c **** {
484 .LM76:
485 /* prologue: frame size=0 */
486 /* prologue end (size=0) */
487 .L22:
164:os.c **** while (OSHRunNextTask())
489 .LM77:
490 0120 0E94 0000 call OSHRunNextTask
491 0124 8823 tst r24
492 0126 E1F7 brne .L22
165:os.c **** ;
166:os.c **** OSH_sleep();
494 .LM78:
495 0128 0E94 0000 call OSH_sleep
167:os.c **** OSH_wait();
497 .LM79:
498 012c 0E94 0000 call OSH_wait
499 /* epilogue: frame size=0 */
500 0130 0895 ret
501 /* epilogue end (size=1) */
502 /* function OSHRunTask size 9 (8) */
506 .global OSPostTask
508 OSPostTask:
168:os.c **** }
169:os.c ****
170:os.c **** bool OSPostTask(void (*tp)(void))
171:os.c **** {
510 .LM80:
511 /* prologue: frame size=0 */
512 0132 1F93 push r17
513 0134 CF93 push r28
514 0136 DF93 push r29
515 /* prologue end (size=3) */
516 0138 EC01 movw r28,r24
172:os.c **** uint8_t fInterruptFlags;
173:os.c **** uint8_t tmp;
174:os.c ****
175:os.c **** fInterruptFlags = AtomicStart();
518 .LM81:
519 013a 0E94 0000 call AtomicStart
520 013e 282F mov r18,r24
176:os.c ****
177:os.c **** tmp = OSH_sched_free;
522 .LM82:
523 0140 1091 0000 lds r17,OSH_sched_free
178:os.c **** OSH_sched_free++;
525 .LM83:
526 0144 8091 0000 lds r24,OSH_sched_free
527 0148 8F5F subi r24,lo8(-(1))
528 014a 8093 0000 sts OSH_sched_free,r24
179:os.c **** OSH_sched_free &= OSH_TASK_BITMASK;
530 .LM84:
531 014e 8091 0000 lds r24,OSH_sched_free
532 0152 8770 andi r24,lo8(7)
533 0154 8093 0000 sts OSH_sched_free,r24
180:os.c ****
181:os.c **** if (OSH_sched_free != OSH_sched_full) {
535 .LM85:
536 0158 9091 0000 lds r25,OSH_sched_free
537 015c 8091 0000 lds r24,OSH_sched_full
538 0160 9817 cp r25,r24
539 0162 71F0 breq .L26
182:os.c **** AtomicEnd(fInterruptFlags);
541 .LM86:
542 0164 822F mov r24,r18
543 0166 0E94 0000 call AtomicEnd
183:os.c ****
184:os.c **** OSH_queue[tmp].tp = tp;
545 .LM87:
546 016a E12F mov r30,r17
547 016c FF27 clr r31
548 016e EE0F add r30,r30
549 0170 FF1F adc r31,r31
550 0172 E050 subi r30,lo8(-(OSH_queue))
551 0174 F040 sbci r31,hi8(-(OSH_queue))
552 0176 C083 st Z,r28
553 0178 D183 std Z+1,r29
185:os.c **** return TRUE;
555 .LM88:
556 017a 81E0 ldi r24,lo8(1)
557 017c 90E0 ldi r25,hi8(1)
558 017e 07C0 rjmp .L25
559 .L26:
186:os.c **** }
187:os.c **** else {
188:os.c **** OSH_sched_free = tmp;
561 .LM89:
562 0180 1093 0000 sts OSH_sched_free,r17
189:os.c **** AtomicEnd(fInterruptFlags);
564 .LM90:
565 0184 822F mov r24,r18
566 0186 0E94 0000 call AtomicEnd
190:os.c ****
191:os.c **** return FALSE;
568 .LM91:
569 018a 80E0 ldi r24,lo8(0)
570 018c 90E0 ldi r25,hi8(0)
571 .L25:
572 /* epilogue: frame size=0 */
573 018e DF91 pop r29
574 0190 CF91 pop r28
575 0192 1F91 pop r17
576 0194 0895 ret
577 /* epilogue end (size=4) */
578 /* function OSPostTask size 50 (43) */
582 .comm OSH_queue,16,1
583 .comm OSH_sched_full,1,1
584 .comm OSH_sched_free,1,1
588 .text
590 Letext:
591 /* File "os.c": code 216 = 0x00d8 ( 193), prologues 5, epilogues 18 */
DEFINED SYMBOLS
*ABS*:00000000 os.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:87 .text:00000000 OSH_SET_PIN_DIRECTIONS
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:178 .text:0000006a MainHardwareInit
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:198 .text:00000074 OSSchedInit
*COM*:00000001 OSH_sched_free
*COM*:00000001 OSH_sched_full
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:218 .text:0000007e OSH_uwait
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:269 .text:0000009a MainStdControlInit
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:288 .text:000000a2 MainStdControlStart
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:305 .text:000000a8 EnableInterrupt
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:323 .text:000000ac OSH_wait
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:344 .text:000000b2 OSH_sleep
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:368 .text:000000bc AtomicEnd
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:384 .text:000000c0 AtomicStart
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:409 .text:000000c8 OSHRunNextTask
*COM*:00000010 OSH_queue
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:482 .text:00000120 OSHRunTask
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:508 .text:00000132 OSPostTask
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/cc6lbaaa.s:590 .text:00000196 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
OSH_MAKE_RED_LED_OUTPUT
OSH_MAKE_YELLOW_LED_OUTPUT
OSH_MAKE_GREEN_LED_OUTPUT
OSH_MAKE_CC_CHP_OUT_INPUT
OSH_MAKE_PW7_OUTPUT
OSH_MAKE_PW6_OUTPUT
OSH_MAKE_PW5_OUTPUT
OSH_MAKE_PW4_OUTPUT
OSH_MAKE_PW3_OUTPUT
OSH_MAKE_PW2_OUTPUT
OSH_MAKE_PW1_OUTPUT
OSH_MAKE_PW0_OUTPUT
OSH_MAKE_CC_PALE_OUTPUT
OSH_MAKE_CC_PDATA_OUTPUT
OSH_MAKE_CC_PCLK_OUTPUT
OSH_MAKE_MISO_INPUT
OSH_MAKE_SPI_OC1C_INPUT
OSH_MAKE_SERIAL_ID_INPUT
OSH_CLR_SERIAL_ID_PIN
OSH_MAKE_FLASH_SELECT_OUTPUT
OSH_MAKE_FLASH_OUT_OUTPUT
OSH_MAKE_FLASH_CLK_OUTPUT
OSH_SET_FLASH_SELECT_PIN
OSH_SET_RED_LED_PIN
OSH_SET_YELLOW_LED_PIN
OSH_SET_GREEN_LED_PIN
testBaseInit
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -