📄 os_cpu_a.lst
字号:
0036 600F 722 JZ ?C0005
723
0038 7400 F 724 MOV A,#LOW (OSTsakStackBotton)
003A 2500 F 725 ADD A,OSTaskID
003C F9 726 MOV R1,A
003D EF 727 MOV A,R7
003E F4 728 CPL A
003F 04 729 INC A
0040 FF 730 MOV R7,A
0041 731 ?C0004:
0041 09 732 INC R1
0042 EF 733 MOV A,R7
0043 27 734 ADD A,@R1
0044 F7 735 MOV @R1,A
0045 DEFA 736 DJNZ R6,?C0004
0047 737 ?C0005:
738 ; OSTaskID = OSNextTaskID;
0047 850000 F 739 MOV OSTaskID,OSNextTaskID
740 ; LoadCtx();
004A 020000 F 741 LJMP LoadCtx
742 ; }
004D 743 ?C0001:
744 ;
745 ; if( OSNextTaskID != OSTaskID)
004D E500 F 746 MOV A,OSNextTaskID
004F 6500 F 747 XRL A,OSTaskID
0051 6036 748 JZ ?C000r
749 ; {
750 ; cp2--;
751 ; cp1--;
752 ; while(cp2 != (unsigned char idata *)temp)
753 ; {
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 13
754 ; *cp2-- = *cp1--;
755 ; }
756 ;MOV A,R7
757 ;CLR C
758 ;SUBB A,R1
759 ;MOV R6,A
0053 E8 760 mov a,r0
0054 C3 761 clr c
0055 9F 762 subb a,r7
0056 FE 763 mov r6,a
0057 764 ?C0008:
0057 18 765 DEC R0
0058 19 766 DEC R1
0059 E6 767 MOV A,@R0
005A F7 768 MOV @R1,A
005B DEFA 769 DJNZ R6,?C0008
005D 770 ?C0009:
771 ; temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
005D 7400 F 772 MOV A,#LOW (OSTsakStackBotton+01H)
005F 2500 F 773 ADD A,OSTaskID
0061 F9 774 MOV R1,A
0062 E7 775 MOV A,@R1
0063 D3 776 SETB C
777 ;SUBB A,SP
0064 9A 778 SUBB A,r2
0065 FF 779 MOV R7,A
780 ; SP = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
0066 7400 F 781 MOV A,#LOW (OSTsakStackBotton+01H)
0068 2500 F 782 ADD A,OSNextTaskID
006A F9 783 MOV R1,A
006B E7 784 MOV A,@R1
006C F581 785 MOV SP,A
786 ; for(i = OSNextTaskID+1;i < OSTaskID+1; i++)
787 ; {
788 ; OSTsakStackBotton[i] += temp;
789 ; }
790
006E E500 F 791 MOV A,OSTaskID
0070 C3 792 CLR C
0071 9500 F 793 SUBB A,OSNextTaskID
0073 600C 794 JZ ?C0011
795
0075 FE 796 MOV R6,A
0076 7400 F 797 MOV A,#LOW (OSTsakStackBotton)
0078 2500 F 798 ADD A,OSNextTaskID
007A F9 799 MOV R1,A
007B 800 ?C0010:
007B 09 801 INC R1
007C EF 802 MOV A,R7
007D 27 803 ADD A,@R1
007E F7 804 MOV @R1,A
007F DEFA 805 DJNZ R6,?C0010
806
0081 807 ?C0011:
808 ; OSTaskID = OSNextTaskID;
0081 850000 F 809 MOV OSTaskID,OSNextTaskID
810 ; SP--;
0084 1581 811 DEC SP
812 ; }
0086 813 ?C0007:
814 ; LoadCtx();
0086 020000 F 815 LJMP LoadCtx
0089 816 ?C000r:
817 IF 0 <> 0
mov SP,r2
ENDIF
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 14
0089 020000 F 820 LJMP LoadCtx
821 ;****************************************************************************************
822 ;/*****************************************************************************************
****************
823 ;** 函数名称: OSIntCtxSw
824 ;** 功能描述: 中断使任务放弃CPU环境保存函数
825 ;** 输 入: OSTaskID
826 ;** 输 出 : 无
827 ;** 全局变量: OSFastSwap
828 ;** 调用模块: 无
829 ;**
830 ;** 作 者: 陈明计
831 ;** 日 期: 2002年2月22日
832 ;**----------------------------------------------------------------------------------------
---------------
833 ;** 修 改: 陈明计
834 ;** 日 期: 2002年12月2日
835 ;**----------------------------------------------------------------------------------------
---------------
836 ;** 修 改:
837 ;** 日 期:
838 ;**----------------------------------------------------------------------------------------
---------------
839 ;******************************************************************************************
**************/
---- 840 RSEG ?PR?OSIntCtxSw?OS_CPU_A
0000 841 OSIntCtxSw:
842 USING 0
843 ;是否是优先级最低任务
0000 7402 844 MOV A,#2
0002 6500 F 845 XRL A,OSTaskID
0004 700F 846 JNZ OSIntCtxSw_0
847 ;是则不需要保存所有寄存器
848 ;SP=SP-13-4 ;4:两层函数调用堆栈,13:寄存器数目
0006 74EF 849 MOV A,#(-17)
0008 2581 850 ADD A,SP
000A F581 851 MOV SP,A
852 ;跳转到OSCtxSw,同时通知CPU中断处理完成
000C 7400 F 853 MOV A, #LOW OSCtxSw
000E C0E0 854 PUSH ACC
0010 7400 F 855 MOV A, #HIGH OSCtxSw
0012 C0E0 856 PUSH ACC
0014 32 857 RETI
858 ;需要保存所有寄存器
0015 859 OSIntCtxSw_0:
860 ;SP=SP-4 ;4:两层函数调用堆栈
0015 74FC 861 MOV A,#0FCH
0017 2581 862 ADD A,SP
0019 F581 863 MOV SP,A
864 ;设置标志:任务再次恢复运行时需要恢复所有寄存器
001B 900000 F 865 MOV DPTR,#OSMapTbl
001E E500 F 866 MOV A,OSTaskID
867
0020 93 868 MOVC A,@A+DPTR
0021 F4 869 CPL A
0022 5200 F 870 ANL OSFastSwap,A
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 15
886
887
0024 C000 F 891 PUSH Os_Enter_Sum ;保存关中断计数器
892 ;跳转到堆栈处理,同时通知CPU中断处理完成
0026 7400 F 893 MOV A, #LOW C_OSCtxSw
0028 C0E0 894 PUSH ACC
002A 7400 F 895 MOV A, #HIGH C_OSCtxSw
002C C0E0 896 PUSH ACC
002E 32 897 RETI
898
899 ;/*****************************************************************************************
****************
900 ;** End Of File
901 ;******************************************************************************************
**************/
902 END
A51 MACRO ASSEMBLER OS_CPU_A 07/02/2005 23:47:38 PAGE 16
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
?C0001. . . . . . . . . . . C ADDR 004DH R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0002. . . . . . . . . . . C ADDR 001EH R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0003. . . . . . . . . . . C ADDR 0024H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0004. . . . . . . . . . . C ADDR 0041H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0005. . . . . . . . . . . C ADDR 0047H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0007. . . . . . . . . . . C ADDR 0086H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0008. . . . . . . . . . . C ADDR 0057H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0009. . . . . . . . . . . C ADDR 005DH R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C000R. . . . . . . . . . . C ADDR 0089H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0010. . . . . . . . . . . C ADDR 007BH R SEG=?PR?C_OSCTXSW?OS_CPU_A
?C0011. . . . . . . . . . . C ADDR 0081H R SEG=?PR?C_OSCTXSW?OS_CPU_A
?PR?C_OSCTXSW?OS_CPU_A. . . C SEG 008CH REL=UNIT
?PR?LOADCTX?OS_CPU_A. . . . C SEG 0033H REL=UNIT
?PR?OSCTXSW?OS_CPU_A. . . . C SEG 000DH REL=UNIT
?PR?OSINTCTXSW?OS_CPU_A . . C SEG 002FH REL=UNIT
?PR?_OSTASKSTKINIT?OS_CPU_A C SEG 007CH REL=UNIT
?STACK. . . . . . . . . . . I SEG 0001H REL=UNIT
ACC . . . . . . . . . . . . D ADDR 00E0H A
AR6 . . . . . . . . . . . . D ADDR 0006H A
AR7 . . . . . . . . . . . . D ADDR 0007H A
B . . . . . . . . . . . . . D ADDR 00F0H A
C_OSCTXSW . . . . . . . . . C ADDR 0000H R SEG=?PR?C_OSCTXSW?OS_CPU_A
DPH . . . . . . . . . . . . D ADDR 0083H A
DPL . . . . . . . . . . . . D ADDR 0082H A
EA. . . . . . . . . . . . . B ADDR 00A8H.7 A
LOADCTX . . . . . . . . . . C ADDR 0000H R SEG=?PR?LOADCTX?OS_CPU_A
LOADCTX_0 . . . . . . . . . C ADDR 0009H R SEG=?PR?LOADCTX?OS_CPU_A
LOADCTX_2 . . . . . . . . . C ADDR 002BH R SEG=?PR?LOADCTX?OS_CPU_A
LOADCTX_3 . . . . . . . . . C ADDR 0032H R SEG=?PR?LOADCTX?OS_CPU_A
OSCTXSW . . . . . . . . . . C ADDR 0000H R SEG=?PR?OSCTXSW?OS_CPU_A
OSFASTSWAP. . . . . . . . . D ADDR ----- EXT
OSINTCTXSW. . . . . . . . . C ADDR 0000H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSINTCTXSW_0. . . . . . . . C ADDR 0015H R SEG=?PR?OSINTCTXSW?OS_CPU_A
OSMAPTBL. . . . . . . . . . C ADDR ----- EXT
OSNEXTTASKID. . . . . . . . D ADDR ----- EXT
OSTASKID. . . . . . . . . . D ADDR ----- EXT
OSTSAKSTACKBOTTON . . . . . D ADDR ----- EXT
OS_CPU_A_ASM. . . . . . . . N NUMB -----
OS_ENTER_SUM. . . . . . . . D ADDR ----- EXT
PSW . . . . . . . . . . . . D ADDR 00D0H A
SP. . . . . . . . . . . . . D ADDR 0081H A
STACK . . . . . . . . . . . I ADDR 0000H R SEG=?STACK
STKINIT11 . . . . . . . . . C ADDR 0037H R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
STKINIT12 . . . . . . . . . C ADDR 006BH R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
STKINIT15 . . . . . . . . . C ADDR 0049H R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
STKINIT18 . . . . . . . . . C ADDR 0065H R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
STKINIT5. . . . . . . . . . C ADDR 003FH R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
STKINIT8. . . . . . . . . . C ADDR 001AH R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
_OSTASKSTKINIT. . . . . . . C ADDR 0000H R SEG=?PR?_OSTASKSTKINIT?OS_CPU_A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -