📄 os_time.ls1
字号:
625 ; *****************************************************************************************
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 11
****************
626 ; * RESUME A DELAYED TASK
627 ; *
628 ; * Description: This function is used resume a task that has been delayed through a call t
o either
629 ; * OSTimeDly() or OSTimeDlyHMSM(). Note that you MUST NOT call this function
to resume a
630 ; * task that is waiting for an event with timeout. This situation would make
the task look
631 ; * like a timeout occurred (unless you desire this effect). Also, you cannot
resume a task
632 ; * that has called OSTimeDlyHMSM() with a combined time that exceeds 65535 cl
ock ticks. In
633 ; * other words, if the clock tick runs at 100 Hz then, you will not be able t
o resume a
634 ; * delayed task that called OSTimeDlyHMSM(0, 10, 55, 350) or higher.
635 ; *
636 ; * (10 Minutes * 60 + 55 Seconds + 0.35) * 100 ticks/second.
637 ; *
638 ; * Arguments : prio specifies the priority of the task to resume
639 ; *
640 ; * Returns : OS_NO_ERR Task has been resumed
641 ; * OS_PRIO_INVALID if the priority you specify is higher that the m
aximum allowed
642 ; * (i.e. >= OS_LOWEST_PRIO)
643 ; * OS_TIME_NOT_DLY Task is not waiting for time to expire
644 ; * OS_TASK_NOT_EXIST The desired task has not been created
645 ; *****************************************************************************************
****************
646 ; */
647 ;
648 ; #if OS_TIME_DLY_RESUME_EN > 0
649 ; INT8U OSTimeDlyResume (INT8U prio)
650
---- 651 RSEG ?PR?_OSTimeDlyResume?OS_TIME
0000 652 _OSTimeDlyResume:
653 USING 0
654 ; SOURCE LINE # 136
655 ;---- Variable 'prio?247' assigned to Register 'R7' ----
656 ; {
657 ; SOURCE LINE # 137
658 ;
659 ; OS_TCB *ptcb;
660 ;
661 ;
662 ; if (prio >= OS_LOWEST_PRIO) {
663 ; SOURCE LINE # 142
0000 EF 664 MOV A,R7
0001 C3 665 CLR C
0002 940C 666 SUBB A,#0CH
0004 4003 667 JC ?C0012
668 ; return (OS_PRIO_INVALID);
669 ; SOURCE LINE # 143
0006 7F2A 670 MOV R7,#02AH
0008 22 671 RET
672 ; }
673 ; SOURCE LINE # 144
0009 674 ?C0012:
675 ; OS_ENTER_CRITICAL();
676 ; SOURCE LINE # 145
0009 C2AF 677 CLR EA
678 ; ptcb = (OS_TCB *)OSTCBPrioTbl[prio]; /* Make sure that task exist
*/
679 ; SOURCE LINE # 146
000B EF 680 MOV A,R7
000C 75F003 681 MOV B,#03H
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 12
000F A4 682 MUL AB
0010 2400 F 683 ADD A,#LOW (OSTCBPrioTbl)
0012 F582 684 MOV DPL,A
0014 E4 685 CLR A
0015 3400 F 686 ADDC A,#HIGH (OSTCBPrioTbl)
0017 F583 687 MOV DPH,A
0019 E0 688 MOVX A,@DPTR
001A F9 689 MOV R1,A
001B A3 690 INC DPTR
001C E0 691 MOVX A,@DPTR
001D FA 692 MOV R2,A
001E A3 693 INC DPTR
001F E0 694 MOVX A,@DPTR
0020 900000 F 695 MOV DPTR,#ptcb?248
0023 C9 696 XCH A,R1
0024 F0 697 MOVX @DPTR,A
0025 A3 698 INC DPTR
0026 EA 699 MOV A,R2
0027 F0 700 MOVX @DPTR,A
0028 A3 701 INC DPTR
0029 E9 702 MOV A,R1
002A F0 703 MOVX @DPTR,A
704 ; if (ptcb != (OS_TCB *)0) {
705 ; SOURCE LINE # 147
002B 900000 F 706 MOV DPTR,#ptcb?248
002E E0 707 MOVX A,@DPTR
002F FB 708 MOV R3,A
0030 A3 709 INC DPTR
0031 E0 710 MOVX A,@DPTR
0032 FA 711 MOV R2,A
0033 A3 712 INC DPTR
0034 E0 713 MOVX A,@DPTR
0035 4A 714 ORL A,R2
0036 4B 715 ORL A,R3
0037 6074 716 JZ ?C0014
717 ; if (ptcb->OSTCBDly != 0) { /* See if task is delayed
*/
718 ; SOURCE LINE # 148
0039 900000 F 719 MOV DPTR,#ptcb?248
003C A3 720 INC DPTR
003D A3 721 INC DPTR
003E E0 722 MOVX A,@DPTR
003F F9 723 MOV R1,A
0040 900009 724 MOV DPTR,#09H
0043 120000 F 725 LCALL ?C?ILDOPTR
0046 45F0 726 ORL A,B
0048 605E 727 JZ ?C0015
728 ; ptcb->OSTCBDly = 0; /* Clear the time delay
*/
729 ; SOURCE LINE # 149
004A 900009 730 MOV DPTR,#09H
004D E4 731 CLR A
004E F5F0 732 MOV B,A
0050 120000 F 733 LCALL ?C?ISTOPTR
734 ; if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == OS_STAT_RDY) { /* See if task is
ready to run */
735 ; SOURCE LINE # 150
0053 90000B 736 MOV DPTR,#0BH
0056 120000 F 737 LCALL ?C?CLDOPTR
0059 20E347 738 JB ACC.3,?C0016
739 ; OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready
to run */
740 ; SOURCE LINE # 151
005C 900000 F 741 MOV DPTR,#OSRdyGrp
005F E0 742 MOVX A,@DPTR
0060 FF 743 MOV R7,A
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 13
0061 900000 F 744 MOV DPTR,#ptcb?248
0064 E0 745 MOVX A,@DPTR
0065 FB 746 MOV R3,A
0066 A3 747 INC DPTR
0067 E0 748 MOVX A,@DPTR
0068 FA 749 MOV R2,A
0069 A3 750 INC DPTR
006A E0 751 MOVX A,@DPTR
006B F9 752 MOV R1,A
006C 900010 753 MOV DPTR,#010H
006F 120000 F 754 LCALL ?C?CLDOPTR
0072 FE 755 MOV R6,A
0073 EF 756 MOV A,R7
0074 4E 757 ORL A,R6
0075 900000 F 758 MOV DPTR,#OSRdyGrp
0078 F0 759 MOVX @DPTR,A
760 ; OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
761 ; SOURCE LINE # 152
0079 90000E 762 MOV DPTR,#0EH
007C 120000 F 763 LCALL ?C?CLDOPTR
007F 2400 F 764 ADD A,#LOW (OSRdyTbl)
0081 F582 765 MOV DPL,A
0083 E4 766 CLR A
0084 3400 F 767 ADDC A,#HIGH (OSRdyTbl)
0086 F583 768 MOV DPH,A
0088 C083 769 PUSH DPH
008A C082 770 PUSH DPL
008C E0 771 MOVX A,@DPTR
008D FF 772 MOV R7,A
008E 90000F 773 MOV DPTR,#0FH
0091 120000 F 774 LCALL ?C?CLDOPTR
0094 FE 775 MOV R6,A
0095 EF 776 MOV A,R7
0096 4E 777 ORL A,R6
0097 D082 778 POP DPL
0099 D083 779 POP DPH
009B F0 780 MOVX @DPTR,A
781 ; OS_EXIT_CRITICAL();
782 ; SOURCE LINE # 153
009C D2AF 783 SETB EA
784 ; OS_Sched(); /* See if this is new highest
priority */
785 ; SOURCE LINE # 154
009E 120000 F 786 LCALL OS_Sched
787 ; } else {
788 ; SOURCE LINE # 155
00A1 8002 789 SJMP ?C0017
00A3 790 ?C0016:
791 ; OS_EXIT_CRITICAL(); /* Task may be suspended
*/
792 ; SOURCE LINE # 156
00A3 D2AF 793 SETB EA
794 ; }
795 ; SOURCE LINE # 157
00A5 796 ?C0017:
797 ; return (OS_NO_ERR);
798 ; SOURCE LINE # 158
00A5 7F00 799 MOV R7,#00H
00A7 22 800 RET
801 ; } else {
802 ; SOURCE LINE # 159
00A8 803 ?C0015:
804 ; OS_EXIT_CRITICAL();
805 ; SOURCE LINE # 160
00A8 D2AF 806 SETB EA
807 ; return (OS_TIME_NOT_DLY); /* Indicate that task was not
A51 MACRO ASSEMBLER OS_TIME 08/08/2005 11:36:58 PAGE 14
delayed */
808 ; SOURCE LINE # 161
00AA 7F50 809 MOV R7,#050H
00AC 22 810 RET
811 ; }
812 ; SOURCE LINE # 162
813 ; }
814 ; SOURCE LINE # 163
00AD 815 ?C0014:
816 ; OS_EXIT_CRITICAL();
817 ; SOURCE LINE # 164
00AD D2AF 818 SETB EA
819 ; return (OS_TASK_NOT_EXIST); /* The task does not exist
*/
820 ; SOURCE LINE # 165
00AF 7F0B 821 MOV R7,#0BH
822 ; }
823 ; SOURCE LINE # 166
00B1 824 ?C0013:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -