📄 os_core.ls1
字号:
0077 E0 797 MOVX A,@DPTR
0078 7800 F 798 MOV R0,#LOW (OSTCBHighRdy)
007A A603 799 MOV @R0,AR3
007C 08 800 INC R0
007D A602 801 MOV @R0,AR2
007F 08 802 INC R0
0080 F6 803 MOV @R0,A
804 ; OSCtxSwCtr++; /* Keep track of the number of
ctx switches */
805 ; SOURCE LINE # 187
0081 900000 F 806 MOV DPTR,#OSCtxSwCtr
0084 E0 807 MOVX A,@DPTR
0085 FC 808 MOV R4,A
0086 A3 809 INC DPTR
0087 E0 810 MOVX A,@DPTR
0088 FD 811 MOV R5,A
0089 A3 812 INC DPTR
008A E0 813 MOVX A,@DPTR
008B FE 814 MOV R6,A
008C A3 815 INC DPTR
008D E0 816 MOVX A,@DPTR
008E 2401 817 ADD A,#01H
0090 FF 818 MOV R7,A
0091 E4 819 CLR A
0092 3E 820 ADDC A,R6
0093 FE 821 MOV R6,A
0094 E4 822 CLR A
0095 3D 823 ADDC A,R5
0096 FD 824 MOV R5,A
0097 E4 825 CLR A
0098 3C 826 ADDC A,R4
0099 FC 827 MOV R4,A
009A 900000 F 828 MOV DPTR,#OSCtxSwCtr
009D 120000 F 829 LCALL ?C?LSTXDATA
830 ; OSIntCtxSw(); /* Perform interrupt level ctx
switch */
831 ; SOURCE LINE # 188
00A0 120000 F 832 LCALL OSIntCtxSw
833 ; }
834 ; SOURCE LINE # 189
835 ; }
836 ; SOURCE LINE # 190
00A3 837 ?C0007:
838 ; OS_EXIT_CRITICAL();
839 ; SOURCE LINE # 191
00A3 D2AF 840 SETB EA
841 ; }
842 ; SOURCE LINE # 192
843 ; }
844 ; SOURCE LINE # 193
00A5 845 ?C0009:
00A5 22 846 RET
847 ; END OF _?OSIntExit
848
849 ; /*$PAGE*/
850 ; /*
851 ; *****************************************************************************************
****************
852 ; * PREVENT SCHEDULING
A51 MACRO ASSEMBLER OS_CORE 08/08/2005 12:35:32 PAGE 15
853 ; *
854 ; * Description: This function is used to prevent rescheduling to take place. This allows
your application
855 ; * to prevent context switches until you are ready to permit context switchin
g.
856 ; *
857 ; * Arguments : none
858 ; *
859 ; * Returns : none
860 ; *
861 ; * Notes : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair. In other wo
rds, for every
862 ; * call to OSSchedLock() you MUST have a call to OSSchedUnlock().
863 ; *****************************************************************************************
****************
864 ; */
865 ;
866 ; #if OS_SCHED_LOCK_EN > 0
867 ; void OSSchedLock (void) reentrant
868
---- 869 RSEG ?PR?_?OSSchedLock?OS_CORE
0000 870 _?OSSchedLock:
871 USING 0
872 ; SOURCE LINE # 212
873 ; {
874 ;
875 ;
876 ;
877 ; if (OSRunning == TRUE) { /* Make sure multitasking is running
*/
878 ; SOURCE LINE # 217
0000 7800 F 879 MOV R0,#LOW (OSRunning)
0002 E6 880 MOV A,@R0
0003 B40110 881 CJNE A,#01H,?C0012
882 ; OS_ENTER_CRITICAL();
883 ; SOURCE LINE # 218
0006 C2AF 884 CLR EA
885 ; if (OSLockNesting < 255) { /* Prevent OSLockNesting from wrapping b
ack to 0 */
886 ; SOURCE LINE # 219
0008 900000 F 887 MOV DPTR,#OSLockNesting
000B E0 888 MOVX A,@DPTR
000C C3 889 CLR C
000D 94FF 890 SUBB A,#0FFH
000F 5003 891 JNC ?C0011
892 ; OSLockNesting++; /* Increment lock nesting level
*/
893 ; SOURCE LINE # 220
0011 E0 894 MOVX A,@DPTR
0012 04 895 INC A
0013 F0 896 MOVX @DPTR,A
897 ; }
898 ; SOURCE LINE # 221
0014 899 ?C0011:
900 ; OS_EXIT_CRITICAL();
901 ; SOURCE LINE # 222
0014 D2AF 902 SETB EA
903 ; }
904 ; SOURCE LINE # 223
905 ; }
906 ; SOURCE LINE # 224
0016 907 ?C0012:
0016 22 908 RET
909 ; END OF _?OSSchedLock
910
911 ; #endif
A51 MACRO ASSEMBLER OS_CORE 08/08/2005 12:35:32 PAGE 16
912 ;
913 ; /*$PAGE*/
914 ; /*
915 ; *****************************************************************************************
****************
916 ; * ENABLE SCHEDULING
917 ; *
918 ; * Description: This function is used to re-allow rescheduling.
919 ; *
920 ; * Arguments : none
921 ; *
922 ; * Returns : none
923 ; *
924 ; * Notes : 1) You MUST invoke OSSchedLock() and OSSchedUnlock() in pair. In other wo
rds, for every
925 ; * call to OSSchedLock() you MUST have a call to OSSchedUnlock().
926 ; *****************************************************************************************
****************
927 ; */
928 ;
929 ; #if OS_SCHED_LOCK_EN > 0
930 ; void OSSchedUnlock (void) reentrant
931
---- 932 RSEG ?PR?_?OSSchedUnlock?OS_CORE
0000 933 _?OSSchedUnlock:
934 USING 0
935 ; SOURCE LINE # 244
936 ; {
937 ;
938 ;
939 ; if (OSRunning == TRUE) { /* Make sure multitasking
is running */
940 ; SOURCE LINE # 248
0000 7800 F 941 MOV R0,#LOW (OSRunning)
0002 E6 942 MOV A,@R0
0003 6401 943 XRL A,#01H
0005 7021 944 JNZ ?C0018
945 ; OS_ENTER_CRITICAL();
946 ; SOURCE LINE # 249
0007 C2AF 947 CLR EA
948 ; if (OSLockNesting > 0) { /* Do not decrement if alr
eady 0 */
949 ; SOURCE LINE # 250
0009 900000 F 950 MOV DPTR,#OSLockNesting
000C E0 951 MOVX A,@DPTR
000D D3 952 SETB C
000E 9400 953 SUBB A,#00H
0010 4014 954 JC ?C0014
955 ; OSLockNesting--; /* Decrement lock nesting
level */
956 ; SOURCE LINE # 251
0012 E0 957 MOVX A,@DPTR
0013 14 958 DEC A
0014 F0 959 MOVX @DPTR,A
960 ; if ((OSLockNesting == 0) && (OSIntNesting == 0)) { /* See if sched. enabled a
nd not an ISR */
961 ; SOURCE LINE # 252
0015 E0 962 MOVX A,@DPTR
0016 700B 963 JNZ ?C0015
0018 900000 F 964 MOV DPTR,#OSIntNesting
001B E0 965 MOVX A,@DPTR
001C 7005 966 JNZ ?C0015
967 ; OS_EXIT_CRITICAL();
968 ; SOURCE LINE # 253
001E D2AF 969 SETB EA
970 ; OS_Sched(); /* See if a HPT is ready
A51 MACRO ASSEMBLER OS_CORE 08/08/2005 12:35:32 PAGE 17
*/
971 ; SOURCE LINE # 254
0020 020000 F 972 LJMP OS_Sched
973 ; } else {
974 ; SOURCE LINE # 255
0023 975 ?C0015:
976 ; OS_EXIT_CRITICAL();
977 ; SOURCE LINE # 256
0023 D2AF 978 SETB EA
979 ; }
980 ; SOURCE LINE # 257
981 ; } else {
982 ; SOURCE LINE # 258
0025 22 983 RET
0026 984 ?C0014:
985 ; OS_EXIT_CRITICAL();
986 ; SOURCE LINE # 259
0026 D2AF 987 SETB EA
988 ; }
989 ; SOURCE LINE # 260
990 ; }
991 ; SOURCE LINE # 261
992 ; }
993 ; SOURCE LI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -