📄 os_core.lst
字号:
254:OS_CORE.c **** {
255:OS_CORE.c **** OSIntSendSignal(i);
452 .LM42:
453 0108 812F mov r24,r17
454 010a 0E94 0000 call OSIntSendSignal
455 .L32:
457 .LM43:
458 010e 1F5F subi r17,lo8(-(1))
459 0110 2196 adiw r28,1
460 0112 1430 cpi r17,lo8(4)
461 0114 90F3 brlo .L35
462 /* epilogue: frame size=0 */
463 0116 DF91 pop r29
464 0118 CF91 pop r28
465 011a 1F91 pop r17
466 011c 0895 ret
467 /* epilogue end (size=4) */
468 /* function OSTimeTick size 24 (17) */
473 .Lscope5:
477 .global OSWait
479 OSWait:
256:OS_CORE.c **** }
257:OS_CORE.c **** }
258:OS_CORE.c **** }
259:OS_CORE.c **** }
260:OS_CORE.c ****
261:OS_CORE.c **** /**************************************************************************************************
262:OS_CORE.c **** ** 函数名称: OSWait
263:OS_CORE.c **** ** 功能描述: 系统等待函数,任务调用此函数可以等待一定时间或信号
264:OS_CORE.c **** ** 输 入: typ: 等待事件类型,目前可以取以下值,或是其中任意个值的按位或
265:OS_CORE.c **** ** K_SIG: 等待信号
266:OS_CORE.c **** ** K_TMO: 等待超时
267:OS_CORE.c **** ** ticks : 等待超时时的系统嘀嗒数
268:OS_CORE.c **** ** 输 出 : NOT_OK : 参数错误
269:OS_CORE.c **** ** TMO_EVENT : 超时到
270:OS_CORE.c **** ** SIG_EVENT : 有信号
271:OS_CORE.c **** ** 全局变量: OSWaitTick
272:OS_CORE.c **** ** 调用模块: OSClearSignal
273:OS_CORE.c **** ***************************************************************************************************
274:OS_CORE.c **** uint8 OSWait(uint8 typ, uint8 ticks)
275:OS_CORE.c ****
276:OS_CORE.c **** {
481 .LM44:
482 /* prologue: frame size=0 */
483 /* prologue end (size=0) */
277:OS_CORE.c **** OSWaitTick[OSTaskID] = ticks; /* 设置超时时间 */
485 .LM45:
486 011e 2091 0000 lds r18,OSTaskID
487 0122 E22F mov r30,r18
488 0124 FF27 clr r31
489 0126 E050 subi r30,lo8(-(OSWaitTick))
490 0128 F040 sbci r31,hi8(-(OSWaitTick))
491 012a 6083 st Z,r22
278:OS_CORE.c **** /* 可以优化寄存器的使用 */
279:OS_CORE.c **** switch(typ)
493 .LM46:
494 012c 9927 clr r25
495 012e 8230 cpi r24,2
496 0130 9105 cpc r25,__zero_reg__
497 0132 81F0 breq .L41
499 .LM47:
500 0134 8330 cpi r24,3
501 0136 9105 cpc r25,__zero_reg__
502 0138 1CF4 brge .L51
503 013a 0197 sbiw r24,1
504 013c 21F0 breq .L40
505 013e 53C0 rjmp .L50
506 .L51:
507 0140 0397 sbiw r24,3
508 0142 39F1 breq .L46
509 0144 50C0 rjmp .L50
510 .L40:
280:OS_CORE.c **** {
281:OS_CORE.c **** case K_SIG: /* 等待信号,即挂起自己 */
282:OS_CORE.c **** OSWaitTick[OSTaskID] = 0; /* 没有超时处理 */
512 .LM48:
513 0146 1082 st Z,__zero_reg__
283:OS_CORE.c **** OSClearSignal(OSTaskID); /* 任务进入等待状态 */
515 .LM49:
516 0148 822F mov r24,r18
517 014a 0E94 0000 call OSClearSignal
284:OS_CORE.c **** OSSched(); /* 运行下一个任务 */
519 .LM50:
520 014e 0E94 0000 call OSSched
521 0152 43C0 rjmp .L55
522 .L41:
285:OS_CORE.c **** return SIG_EVENT;
286:OS_CORE.c **** case K_TMO: /* 等待超时,即延时一段时间 */
287:OS_CORE.c **** OS_ENTER_CRITICAL();
524 .LM51:
525 /* #APP */
526 0154 F894 cli
527 /* #NOAPP */
528 0156 8091 0000 lds r24,Os_Enter_Sum
529 015a 8F5F subi r24,lo8(-(1))
530 015c 8093 0000 sts Os_Enter_Sum,r24
288:OS_CORE.c **** while (OSWaitTick[OSTaskID] != 0) /* 判断超时时间是否到 */
289:OS_CORE.c **** {
290:OS_CORE.c **** OSClearSignal(OSTaskID); /* 任务进入等待状态 */
291:OS_CORE.c **** OSSched(); /* 运行下一个任务 */
532 .LM52:
533 0160 922F mov r25,r18
534 .L54:
535 0162 E92F mov r30,r25
536 0164 FF27 clr r31
537 0166 E050 subi r30,lo8(-(OSWaitTick))
538 0168 F040 sbci r31,hi8(-(OSWaitTick))
539 016a 8081 ld r24,Z
540 016c 8823 tst r24
541 016e 41F0 breq .L53
543 .LM53:
544 0170 892F mov r24,r25
545 0172 0E94 0000 call OSClearSignal
547 .LM54:
548 0176 0E94 0000 call OSSched
549 017a 9091 0000 lds r25,OSTaskID
550 017e F1CF rjmp .L54
551 .L53:
292:OS_CORE.c **** }
293:OS_CORE.c **** OS_EXIT_CRITICAL();
553 .LM55:
554 0180 8091 0000 lds r24,Os_Enter_Sum
555 0184 8150 subi r24,lo8(-(-1))
556 0186 8093 0000 sts Os_Enter_Sum,r24
557 018a 8823 tst r24
558 018c 49F5 brne .L49
559 /* #APP */
560 018e 7894 sei
561 /* #NOAPP */
562 0190 27C0 rjmp .L49
563 .L46:
294:OS_CORE.c **** return TMO_EVENT;
295:OS_CORE.c **** case (K_TMO | K_SIG): /* 等待信号(挂起自己)直到超时 */
296:OS_CORE.c **** /* 别的任务或中断可以恢复它 */
297:OS_CORE.c **** OS_ENTER_CRITICAL();
565 .LM56:
566 /* #APP */
567 0192 F894 cli
568 /* #NOAPP */
569 0194 8091 0000 lds r24,Os_Enter_Sum
570 0198 8F5F subi r24,lo8(-(1))
571 019a 8093 0000 sts Os_Enter_Sum,r24
298:OS_CORE.c **** if (OSWaitTick[OSTaskID] == 0) /* 判断超时时间是否到 */
573 .LM57:
574 019e E22F mov r30,r18
575 01a0 FF27 clr r31
576 01a2 E050 subi r30,lo8(-(OSWaitTick))
577 01a4 F040 sbci r31,hi8(-(OSWaitTick))
578 01a6 8081 ld r24,Z
579 01a8 8823 tst r24
580 01aa D1F0 breq .L49
299:OS_CORE.c **** {
300:OS_CORE.c **** return TMO_EVENT;
301:OS_CORE.c **** }
302:OS_CORE.c **** OSClearSignal(OSTaskID); /* 任务进入等待状态 */
582 .LM58:
583 01ac 822F mov r24,r18
584 01ae 0E94 0000 call OSClearSignal
303:OS_CORE.c **** OS_EXIT_CRITICAL();
586 .LM59:
587 01b2 8091 0000 lds r24,Os_Enter_Sum
588 01b6 8150 subi r24,lo8(-(-1))
589 01b8 8093 0000 sts Os_Enter_Sum,r24
590 01bc 8823 tst r24
591 01be 09F4 brne .L48
592 /* #APP */
593 01c0 7894 sei
594 /* #NOAPP */
595 .L48:
304:OS_CORE.c **** OSSched(); /* 运行下一个任务 */
597 .LM60:
598 01c2 0E94 0000 call OSSched
305:OS_CORE.c **** if (OSWaitTick[OSTaskID] != 0)
600 .LM61:
601 01c6 8091 0000 lds r24,OSTaskID
602 01ca E82F mov r30,r24
603 01cc FF27 clr r31
604 01ce E050 subi r30,lo8(-(OSWaitTick))
605 01d0 F040 sbci r31,hi8(-(OSWaitTick))
606 01d2 8081 ld r24,Z
607 01d4 8823 tst r24
608 01d6 21F0 breq .L49
306:OS_CORE.c **** {
307:OS_CORE.c **** OSWaitTick[OSTaskID] = 0;
610 .LM62:
611 01d8 1082 st Z,__zero_reg__
612 .L55:
308:OS_CORE.c **** return SIG_EVENT;
614 .LM63:
615 01da 84E0 ldi r24,lo8(4)
616 01dc 90E0 ldi r25,hi8(4)
617 01de 0895 ret
618 .L49:
309:OS_CORE.c **** }
310:OS_CORE.c **** return TMO_EVENT;
620 .LM64:
621 01e0 88E0 ldi r24,lo8(8)
622 01e2 90E0 ldi r25,hi8(8)
623 01e4 0895 ret
624 .L50:
311:OS_CORE.c **** default:
312:OS_CORE.c **** OSWaitTick[OSTaskID] = 0;
626 .LM65:
627 01e6 E22F mov r30,r18
628 01e8 FF27 clr r31
629 01ea E050 subi r30,lo8(-(OSWaitTick))
630 01ec F040 sbci r31,hi8(-(OSWaitTick))
631 01ee 1082 st Z,__zero_reg__
313:OS_CORE.c **** return NOT_OK;
633 .LM66:
634 01f0 8FEF ldi r24,lo8(255)
635 01f2 90E0 ldi r25,hi8(255)
314:OS_CORE.c **** }
315:OS_CORE.c **** }
637 .LM67:
638 01f4 0895 ret
639 /* epilogue: frame size=0 */
640 /* epilogue: noreturn */
641 /* epilogue end (size=0) */
642 /* function OSWait size 114 (114) */
644 .Lscope6:
645 .comm Alarm,1,1
646 .comm OSIntNesting,1,1
647 .comm OSWaitTick,4,1
656 .text
658 Letext:
659 /* File "OS_CORE.c": code 265 = 0x0109 ( 257), prologues 3, epilogues 5 */
DEFINED SYMBOLS
*ABS*:00000000 OS_CORE.c
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:129 .bss:00000000 Os_Enter_Sum
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:135 .data:00000000 OSMapTbl
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:148 .data:00000009 OSTaskRuning
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:155 .bss:00000001 OSNextTaskID
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:161 .bss:00000002 OSTaskID
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:168 .text:00000000 OSIntSendSignal
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:212 .text:00000026 OSClearSignal
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:256 .text:0000004e OSIntExit
*COM*:00000001 OSIntNesting
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:336 .text:000000a2 OSSched
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:404 .text:000000e4 OSSendSignal
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:424 .text:000000ee OSTimeTick
*COM*:00000004 OSWaitTick
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:479 .text:0000011e OSWait
*COM*:00000001 Alarm
C:\DOCUME~1\64564564\LOCALS~1\Temp/ccEdbaaa.s:658 .text:000001f6 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
OSIntCtxSw
OSCtxSw
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -