📄 os.lst
字号:
120:os.c **** void OSH_sleep(void)
121:os.c **** {
347 .LM56:
348 /* prologue: frame size=0 */
349 /* prologue end (size=0) */
122:os.c **** * (volatile unsigned char *)(0x35 + 0x20) |= 1 << 5;
351 .LM57:
352 00b4 85B7 in r24,85-0x20
353 00b6 8062 ori r24,lo8(32)
354 00b8 85BF out 85-0x20,r24
123:os.c **** __asm volatile ("sleep");}
356 .LM58:
357 /* #APP */
358 00ba 8895 sleep
359 /* #NOAPP */
360 /* epilogue: frame size=0 */
361 00bc 0895 ret
362 /* epilogue end (size=1) */
363 /* function OSH_sleep size 6 (5) */
367 .global AtomicEnd
369 AtomicEnd:
124:os.c ****
125:os.c **** void AtomicEnd(uint8_t oldSreg)
126:os.c **** {
371 .LM59:
372 /* prologue: frame size=0 */
373 /* prologue end (size=0) */
127:os.c **** * (volatile unsigned char *)(0x3F + 0x20) = oldSreg;
375 .LM60:
376 00be 8FBF out 95-0x20,r24
377 /* epilogue: frame size=0 */
378 00c0 0895 ret
379 /* epilogue end (size=1) */
380 /* function AtomicEnd size 2 (1) */
383 .global AtomicStart
385 AtomicStart:
128:os.c **** }
129:os.c ****
130:os.c **** uint8_t AtomicStart(void )
131:os.c **** {
387 .LM61:
388 /* prologue: frame size=0 */
389 /* prologue end (size=0) */
132:os.c **** uint8_t result = * (volatile unsigned char *)(0x3F + 0x20);
391 .LM62:
392 00c2 8FB7 in r24,95-0x20
133:os.c ****
134:os.c **** __asm volatile ("cli");
394 .LM63:
395 /* #APP */
396 00c4 F894 cli
135:os.c **** return result;
136:os.c **** }
398 .LM64:
399 /* #NOAPP */
400 00c6 9927 clr r25
401 /* epilogue: frame size=0 */
402 00c8 0895 ret
403 /* epilogue end (size=1) */
404 /* function AtomicStart size 5 (4) */
408 .global OSHRunNextTask
410 OSHRunNextTask:
137:os.c ****
138:os.c **** bool OSHRunNextTask(void)
139:os.c **** {
412 .LM65:
413 /* prologue: frame size=0 */
414 00ca 0F93 push r16
415 00cc 1F93 push r17
416 /* prologue end (size=2) */
140:os.c **** uint8_t fInterruptFlags;
141:os.c **** uint8_t old_full;
142:os.c **** void (*func)(void );
143:os.c ****
144:os.c **** if (OSH_sched_full == OSH_sched_free) {
418 .LM66:
419 00ce 9091 0000 lds r25,OSH_sched_full
420 00d2 8091 0000 lds r24,OSH_sched_free
421 00d6 9817 cp r25,r24
422 00d8 19F4 brne .L19
145:os.c ****
146:os.c **** return 0;
424 .LM67:
425 00da 80E0 ldi r24,lo8(0)
426 00dc 90E0 ldi r25,hi8(0)
427 00de 19C0 rjmp .L18
428 .L19:
147:os.c **** }
148:os.c **** else {
149:os.c **** fInterruptFlags = AtomicStart();
430 .LM68:
431 00e0 0E94 0000 call AtomicStart
150:os.c **** old_full = OSH_sched_full;
433 .LM69:
434 00e4 2091 0000 lds r18,OSH_sched_full
151:os.c **** OSH_sched_full++;
436 .LM70:
437 00e8 922F mov r25,r18
438 00ea 9F5F subi r25,lo8(-(1))
152:os.c **** OSH_sched_full &= OSH_TASK_BITMASK;
440 .LM71:
441 00ec 9F70 andi r25,lo8(15)
442 00ee 9093 0000 sts OSH_sched_full,r25
153:os.c **** func = OSH_queue[(int )old_full].tp;
444 .LM72:
445 00f2 E22F mov r30,r18
446 00f4 FF27 clr r31
447 00f6 EE0F add r30,r30
448 00f8 FF1F adc r31,r31
449 00fa E050 subi r30,lo8(-(OSH_queue))
450 00fc F040 sbci r31,hi8(-(OSH_queue))
451 00fe 0081 ld r16,Z
452 0100 1181 ldd r17,Z+1
154:os.c **** OSH_queue[(int )old_full].tp = 0;
454 .LM73:
455 0102 1082 st Z,__zero_reg__
456 0104 1182 std Z+1,__zero_reg__
155:os.c **** AtomicEnd(fInterruptFlags);
458 .LM74:
459 0106 0E94 0000 call AtomicEnd
156:os.c **** func();
461 .LM75:
462 010a F801 movw r30,r16
463 010c 0995 icall
157:os.c **** return 1;
465 .LM76:
466 010e 81E0 ldi r24,lo8(1)
467 0110 90E0 ldi r25,hi8(1)
468 .L18:
469 /* epilogue: frame size=0 */
470 0112 1F91 pop r17
471 0114 0F91 pop r16
472 0116 0895 ret
473 /* epilogue end (size=3) */
474 /* function OSHRunNextTask size 39 (34) */
479 .global OSHRunTask
481 OSHRunTask:
158:os.c **** }
159:os.c **** }
160:os.c ****
161:os.c **** void OSHRunTask(void)
162:os.c **** {
483 .LM77:
484 /* prologue: frame size=0 */
485 /* prologue end (size=0) */
486 .L22:
163:os.c **** while (OSHRunNextTask())
488 .LM78:
489 0118 0E94 0000 call OSHRunNextTask
490 011c 8823 tst r24
491 011e E1F7 brne .L22
164:os.c **** ;
165:os.c **** OSH_sleep();
493 .LM79:
494 0120 0E94 0000 call OSH_sleep
166:os.c **** OSH_wait();
496 .LM80:
497 0124 0E94 0000 call OSH_wait
498 /* epilogue: frame size=0 */
499 0128 0895 ret
500 /* epilogue end (size=1) */
501 /* function OSHRunTask size 9 (8) */
505 .global OSPostTask
507 OSPostTask:
167:os.c **** }
168:os.c ****
169:os.c **** bool OSPostTask(void (*tp)(void))
170:os.c **** {
509 .LM81:
510 /* prologue: frame size=0 */
511 012a 0F93 push r16
512 012c 1F93 push r17
513 012e CF93 push r28
514 /* prologue end (size=3) */
515 0130 8C01 movw r16,r24
171:os.c **** uint8_t fInterruptFlags;
172:os.c **** uint8_t tmp;
173:os.c ****
174:os.c **** fInterruptFlags = AtomicStart();
517 .LM82:
518 0132 0E94 0000 call AtomicStart
519 0136 282F mov r18,r24
175:os.c ****
176:os.c **** tmp = OSH_sched_free;
521 .LM83:
522 0138 C091 0000 lds r28,OSH_sched_free
177:os.c **** OSH_sched_free++;
524 .LM84:
525 013c CF5F subi r28,lo8(-(1))
178:os.c **** OSH_sched_free &= OSH_TASK_BITMASK;
527 .LM85:
528 013e 9C2F mov r25,r28
529 0140 9F70 andi r25,lo8(15)
530 0142 C150 subi r28,lo8(-(-1))
531 0144 9093 0000 sts OSH_sched_free,r25
179:os.c ****
180:os.c **** if (OSH_sched_free != OSH_sched_full) {
533 .LM86:
534 0148 8091 0000 lds r24,OSH_sched_full
535 014c 9817 cp r25,r24
536 014e 71F0 breq .L26
181:os.c **** AtomicEnd(fInterruptFlags);
538 .LM87:
539 0150 822F mov r24,r18
540 0152 0E94 0000 call AtomicEnd
182:os.c ****
183:os.c **** OSH_queue[tmp].tp = tp;
542 .LM88:
543 0156 EC2F mov r30,r28
544 0158 FF27 clr r31
545 015a EE0F add r30,r30
546 015c FF1F adc r31,r31
547 015e E050 subi r30,lo8(-(OSH_queue))
548 0160 F040 sbci r31,hi8(-(OSH_queue))
549 0162 0083 st Z,r16
550 0164 1183 std Z+1,r17
184:os.c **** return TRUE;
552 .LM89:
553 0166 81E0 ldi r24,lo8(1)
554 0168 90E0 ldi r25,hi8(1)
555 016a 07C0 rjmp .L25
556 .L26:
185:os.c **** }
186:os.c **** else {
187:os.c **** OSH_sched_free = tmp;
558 .LM90:
559 016c C093 0000 sts OSH_sched_free,r28
188:os.c **** AtomicEnd(fInterruptFlags);
561 .LM91:
562 0170 822F mov r24,r18
563 0172 0E94 0000 call AtomicEnd
189:os.c ****
190:os.c **** return FALSE;
565 .LM92:
566 0176 80E0 ldi r24,lo8(0)
567 0178 90E0 ldi r25,hi8(0)
568 .L25:
569 /* epilogue: frame size=0 */
570 017a CF91 pop r28
571 017c 1F91 pop r17
572 017e 0F91 pop r16
573 0180 0895 ret
574 /* epilogue end (size=4) */
575 /* function OSPostTask size 44 (37) */
579 .comm RecordPassed,30,1
580 .comm OSH_queue,32,1
581 .lcomm OSH_sched_full,1
582 .lcomm OSH_sched_free,1
587 .text
589 Letext:
590 /* File "os.c": code 206 = 0x00ce ( 183), 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__
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:86 .text:00000000 OSH_SET_PIN_DIRECTIONS
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:177 .text:0000006a MainHardwareInit
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:197 .text:00000074 OSSchedInit
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:581 .bss:00000001 OSH_sched_free
.bss:00000000 OSH_sched_full
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:217 .text:0000007e OSH_uwait
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:268 .text:0000009a MainStdControlInit
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:287 .text:000000a2 MainStdControlStart
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:306 .text:000000aa EnableInterrupt
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:324 .text:000000ae OSH_wait
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:345 .text:000000b4 OSH_sleep
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:369 .text:000000be AtomicEnd
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:385 .text:000000c2 AtomicStart
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:410 .text:000000ca OSHRunNextTask
*COM*:00000020 OSH_queue
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:481 .text:00000118 OSHRunTask
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:507 .text:0000012a OSPostTask
*COM*:0000001e RecordPassed
D:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/ccyYaaaa.s:589 .text:00000182 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
Init
Start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -