📄 os.lst
字号:
121:os.c **** void OSH_sleep(void)
122:os.c **** {
348 .LM56:
349 /* prologue: frame size=0 */
350 /* prologue end (size=0) */
123:os.c **** * (volatile unsigned char *)(0x35 + 0x20) |= 1 << 5;
352 .LM57:
353 00b4 85B7 in r24,85-0x20
354 00b6 8062 ori r24,lo8(32)
355 00b8 85BF out 85-0x20,r24
124:os.c **** __asm volatile ("sleep");}
357 .LM58:
358 /* #APP */
359 00ba 8895 sleep
360 /* #NOAPP */
361 /* epilogue: frame size=0 */
362 00bc 0895 ret
363 /* epilogue end (size=1) */
364 /* function OSH_sleep size 6 (5) */
368 .global AtomicEnd
370 AtomicEnd:
125:os.c ****
126:os.c **** void AtomicEnd(uint8_t oldSreg)
127:os.c **** {
372 .LM59:
373 /* prologue: frame size=0 */
374 /* prologue end (size=0) */
128:os.c **** * (volatile unsigned char *)(0x3F + 0x20) = oldSreg;
376 .LM60:
377 00be 8FBF out 95-0x20,r24
378 /* epilogue: frame size=0 */
379 00c0 0895 ret
380 /* epilogue end (size=1) */
381 /* function AtomicEnd size 2 (1) */
384 .global AtomicStart
386 AtomicStart:
129:os.c **** }
130:os.c ****
131:os.c **** uint8_t AtomicStart(void )
132:os.c **** {
388 .LM61:
389 /* prologue: frame size=0 */
390 /* prologue end (size=0) */
133:os.c **** uint8_t result = * (volatile unsigned char *)(0x3F + 0x20);
392 .LM62:
393 00c2 8FB7 in r24,95-0x20
134:os.c ****
135:os.c **** __asm volatile ("cli");
395 .LM63:
396 /* #APP */
397 00c4 F894 cli
136:os.c **** return result;
137:os.c **** }
399 .LM64:
400 /* #NOAPP */
401 00c6 9927 clr r25
402 /* epilogue: frame size=0 */
403 00c8 0895 ret
404 /* epilogue end (size=1) */
405 /* function AtomicStart size 5 (4) */
409 .global OSHRunNextTask
411 OSHRunNextTask:
138:os.c ****
139:os.c **** bool OSHRunNextTask(void)
140:os.c **** {
413 .LM65:
414 /* prologue: frame size=0 */
415 00ca 0F93 push r16
416 00cc 1F93 push r17
417 /* 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) {
419 .LM66:
420 00ce 9091 0000 lds r25,OSH_sched_full
421 00d2 8091 0000 lds r24,OSH_sched_free
422 00d6 9817 cp r25,r24
423 00d8 19F4 brne .L19
146:os.c ****
147:os.c **** return 0;
425 .LM67:
426 00da 80E0 ldi r24,lo8(0)
427 00dc 90E0 ldi r25,hi8(0)
428 00de 1EC0 rjmp .L18
429 .L19:
148:os.c **** }
149:os.c **** else {
150:os.c **** fInterruptFlags = AtomicStart();
431 .LM68:
432 00e0 0E94 0000 call AtomicStart
151:os.c **** old_full = OSH_sched_full;
434 .LM69:
435 00e4 2091 0000 lds r18,OSH_sched_full
152:os.c **** OSH_sched_full++;
437 .LM70:
438 00e8 9091 0000 lds r25,OSH_sched_full
439 00ec 9F5F subi r25,lo8(-(1))
440 00ee 9093 0000 sts OSH_sched_full,r25
153:os.c **** OSH_sched_full &= OSH_TASK_BITMASK;
442 .LM71:
443 00f2 9091 0000 lds r25,OSH_sched_full
444 00f6 9770 andi r25,lo8(7)
445 00f8 9093 0000 sts OSH_sched_full,r25
154:os.c **** func = OSH_queue[(int )old_full].tp;
447 .LM72:
448 00fc E22F mov r30,r18
449 00fe FF27 clr r31
450 0100 EE0F add r30,r30
451 0102 FF1F adc r31,r31
452 0104 E050 subi r30,lo8(-(OSH_queue))
453 0106 F040 sbci r31,hi8(-(OSH_queue))
454 0108 0081 ld r16,Z
455 010a 1181 ldd r17,Z+1
155:os.c **** OSH_queue[(int )old_full].tp = 0;
457 .LM73:
458 010c 1082 st Z,__zero_reg__
459 010e 1182 std Z+1,__zero_reg__
156:os.c **** AtomicEnd(fInterruptFlags);
461 .LM74:
462 0110 0E94 0000 call AtomicEnd
157:os.c **** func();
464 .LM75:
465 0114 F801 movw r30,r16
466 0116 0995 icall
158:os.c **** return 1;
468 .LM76:
469 0118 81E0 ldi r24,lo8(1)
470 011a 90E0 ldi r25,hi8(1)
471 .L18:
472 /* epilogue: frame size=0 */
473 011c 1F91 pop r17
474 011e 0F91 pop r16
475 0120 0895 ret
476 /* epilogue end (size=3) */
477 /* function OSHRunNextTask size 44 (39) */
482 .global OSHRunTask
484 OSHRunTask:
159:os.c **** }
160:os.c **** }
161:os.c ****
162:os.c **** void OSHRunTask(void)
163:os.c **** {
486 .LM77:
487 /* prologue: frame size=0 */
488 /* prologue end (size=0) */
489 .L22:
164:os.c **** while (OSHRunNextTask())
491 .LM78:
492 0122 0E94 0000 call OSHRunNextTask
493 0126 8823 tst r24
494 0128 E1F7 brne .L22
165:os.c **** ;
166:os.c **** OSH_sleep();
496 .LM79:
497 012a 0E94 0000 call OSH_sleep
167:os.c **** OSH_wait();
499 .LM80:
500 012e 0E94 0000 call OSH_wait
501 /* epilogue: frame size=0 */
502 0132 0895 ret
503 /* epilogue end (size=1) */
504 /* function OSHRunTask size 9 (8) */
508 .global OSPostTask
510 OSPostTask:
168:os.c **** }
169:os.c ****
170:os.c **** bool OSPostTask(void (*tp)(void))
171:os.c **** {
512 .LM81:
513 /* prologue: frame size=0 */
514 0134 1F93 push r17
515 0136 CF93 push r28
516 0138 DF93 push r29
517 /* prologue end (size=3) */
518 013a EC01 movw r28,r24
172:os.c **** uint8_t fInterruptFlags;
173:os.c **** uint8_t tmp;
174:os.c ****
175:os.c **** fInterruptFlags = AtomicStart();
520 .LM82:
521 013c 0E94 0000 call AtomicStart
522 0140 282F mov r18,r24
176:os.c ****
177:os.c **** tmp = OSH_sched_free;
524 .LM83:
525 0142 1091 0000 lds r17,OSH_sched_free
178:os.c **** OSH_sched_free++;
527 .LM84:
528 0146 8091 0000 lds r24,OSH_sched_free
529 014a 8F5F subi r24,lo8(-(1))
530 014c 8093 0000 sts OSH_sched_free,r24
179:os.c **** OSH_sched_free &= OSH_TASK_BITMASK;
532 .LM85:
533 0150 8091 0000 lds r24,OSH_sched_free
534 0154 8770 andi r24,lo8(7)
535 0156 8093 0000 sts OSH_sched_free,r24
180:os.c ****
181:os.c **** if (OSH_sched_free != OSH_sched_full) {
537 .LM86:
538 015a 9091 0000 lds r25,OSH_sched_free
539 015e 8091 0000 lds r24,OSH_sched_full
540 0162 9817 cp r25,r24
541 0164 71F0 breq .L26
182:os.c **** AtomicEnd(fInterruptFlags);
543 .LM87:
544 0166 822F mov r24,r18
545 0168 0E94 0000 call AtomicEnd
183:os.c ****
184:os.c **** OSH_queue[tmp].tp = tp;
547 .LM88:
548 016c E12F mov r30,r17
549 016e FF27 clr r31
550 0170 EE0F add r30,r30
551 0172 FF1F adc r31,r31
552 0174 E050 subi r30,lo8(-(OSH_queue))
553 0176 F040 sbci r31,hi8(-(OSH_queue))
554 0178 C083 st Z,r28
555 017a D183 std Z+1,r29
185:os.c **** return TRUE;
557 .LM89:
558 017c 81E0 ldi r24,lo8(1)
559 017e 90E0 ldi r25,hi8(1)
560 0180 07C0 rjmp .L25
561 .L26:
186:os.c **** }
187:os.c **** else {
188:os.c **** OSH_sched_free = tmp;
563 .LM90:
564 0182 1093 0000 sts OSH_sched_free,r17
189:os.c **** AtomicEnd(fInterruptFlags);
566 .LM91:
567 0186 822F mov r24,r18
568 0188 0E94 0000 call AtomicEnd
190:os.c ****
191:os.c **** return FALSE;
570 .LM92:
571 018c 80E0 ldi r24,lo8(0)
572 018e 90E0 ldi r25,hi8(0)
573 .L25:
574 /* epilogue: frame size=0 */
575 0190 DF91 pop r29
576 0192 CF91 pop r28
577 0194 1F91 pop r17
578 0196 0895 ret
579 /* epilogue end (size=4) */
580 /* function OSPostTask size 50 (43) */
584 .comm OSH_queue,16,1
585 .comm OSH_sched_full,1,1
586 .comm OSH_sched_free,1,1
590 .text
592 Letext:
593 /* File "os.c": code 217 = 0x00d9 ( 194), 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/ccisbaaa.s:87 .text:00000000 OSH_SET_PIN_DIRECTIONS
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:178 .text:0000006a MainHardwareInit
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:198 .text:00000074 OSSchedInit
*COM*:00000001 OSH_sched_free
*COM*:00000001 OSH_sched_full
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:218 .text:0000007e OSH_uwait
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:269 .text:0000009a MainStdControlInit
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:288 .text:000000a2 MainStdControlStart
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:307 .text:000000aa EnableInterrupt
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:325 .text:000000ae OSH_wait
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:346 .text:000000b4 OSH_sleep
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:370 .text:000000be AtomicEnd
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:386 .text:000000c2 AtomicStart
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:411 .text:000000ca OSHRunNextTask
*COM*:00000010 OSH_queue
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:484 .text:00000122 OSHRunTask
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:510 .text:00000134 OSPostTask
C:\DOCUME~1\xiapeng\LOCALS~1\Temp/ccisbaaa.s:592 .text:00000198 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
LLCStdControlInit
LLCStdControlStart
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -