?? os_cpu_a.lst
字號:
0033 9500 F 719 SUBB A,OSTaskID
0035 FE 720 MOV R6,A
0036 600F 721 JZ ?C0005
722
0038 7400 F 723 MOV A,#LOW (OSTsakStackBotton)
003A 2500 F 724 ADD A,OSTaskID
003C F9 725 MOV R1,A
003D EF 726 MOV A,R7
003E F4 727 CPL A
003F 04 728 INC A
0040 FF 729 MOV R7,A
0041 730 ?C0004:
0041 09 731 INC R1
0042 EF 732 MOV A,R7
0043 27 733 ADD A,@R1
0044 F7 734 MOV @R1,A
0045 DEFA 735 DJNZ R6,?C0004
0047 736 ?C0005:
737 ; OSTaskID = OSNextTaskID;
0047 850000 F 738 MOV OSTaskID,OSNextTaskID
739 ; LoadCtx();
004A 020000 F 740 LJMP LoadCtx
741 ; }
004D 742 ?C0001:
743 ;
744 ; if( OSNextTaskID != OSTaskID)
004D E500 F 745 MOV A,OSNextTaskID
004F 6500 F 746 XRL A,OSTaskID
0051 6036 747 JZ ?C000r
748 ; {
749 ; cp2--;
750 ; cp1--;
751 ; while(cp2 != (unsigned char idata *)temp)
752 ; {
753 ; *cp2-- = *cp1--;
A51 MACRO ASSEMBLER OS_CPU_A 03/10/2007 13:05:45 PAGE 13
754 ; }
755 ;MOV A,R7
756 ;CLR C
757 ;SUBB A,R1
758 ;MOV R6,A
0053 E8 759 mov a,r0
0054 C3 760 clr c
0055 9F 761 subb a,r7
0056 FE 762 mov r6,a
0057 763 ?C0008:
0057 18 764 DEC R0
0058 19 765 DEC R1
0059 E6 766 MOV A,@R0
005A F7 767 MOV @R1,A
005B DEFA 768 DJNZ R6,?C0008
005D 769 ?C0009:
770 ; temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
005D 7400 F 771 MOV A,#LOW (OSTsakStackBotton+01H)
005F 2500 F 772 ADD A,OSTaskID
0061 F9 773 MOV R1,A
0062 E7 774 MOV A,@R1
0063 D3 775 SETB C
776 ;SUBB A,SP
0064 9A 777 SUBB A,r2
0065 FF 778 MOV R7,A
779 ; SP = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
0066 7400 F 780 MOV A,#LOW (OSTsakStackBotton+01H)
0068 2500 F 781 ADD A,OSNextTaskID
006A F9 782 MOV R1,A
006B E7 783 MOV A,@R1
006C F581 784 MOV SP,A
785 ; for(i = OSNextTaskID+1;i < OSTaskID+1; i++)
786 ; {
787 ; OSTsakStackBotton[i] += temp;
788 ; }
789
006E E500 F 790 MOV A,OSTaskID
0070 C3 791 CLR C
0071 9500 F 792 SUBB A,OSNextTaskID
0073 600C 793 JZ ?C0011
794
0075 FE 795 MOV R6,A
0076 7400 F 796 MOV A,#LOW (OSTsakStackBotton)
0078 2500 F 797 ADD A,OSNextTaskID
007A F9 798 MOV R1,A
007B 799 ?C0010:
007B 09 800 INC R1
007C EF 801 MOV A,R7
007D 27 802 ADD A,@R1
007E F7 803 MOV @R1,A
007F DEFA 804 DJNZ R6,?C0010
805
0081 806 ?C0011:
807 ; OSTaskID = OSNextTaskID;
0081 850000 F 808 MOV OSTaskID,OSNextTaskID
809 ; SP--;
0084 1581 810 DEC SP
811 ; }
0086 812 ?C0007:
813 ; LoadCtx();
0086 020000 F 814 LJMP LoadCtx
0089 815 ?C000r:
816 IF 0 <> 0
mov SP,r2
ENDIF
0089 020000 F 819 LJMP LoadCtx
A51 MACRO ASSEMBLER OS_CPU_A 03/10/2007 13:05:45 PAGE 14
820 ;****************************************************************************************
821 ;/*****************************************************************************************
****************
822 ;** 函數名稱: OSIntCtxSw
823 ;** 功能描述: 中斷使任務放棄CPU環境保存函數
824 ;** 輸 入: OSTaskID
825 ;** 輸 出 : 無
826 ;** 全局變量: OSFastSwap
827 ;** 調用模塊: 無
828 ;**
829 ;** 作 者: 陳明計
830 ;** 日 期: 2002年2月22日
831 ;**----------------------------------------------------------------------------------------
---------------
832 ;** 修 改: 陳明計
833 ;** 日 期: 2002年12月2日
834 ;**----------------------------------------------------------------------------------------
---------------
835 ;** 修 改:
836 ;** 日 期:
837 ;**----------------------------------------------------------------------------------------
---------------
838 ;******************************************************************************************
**************/
---- 839 RSEG ?PR?OSIntCtxSw?OS_CPU_A
0000 840 OSIntCtxSw:
841 USING 0
842 ;是否是優先級最低任務
0000 7403 843 MOV A,#3
0002 6500 F 844 XRL A,OSTaskID
0004 700F 845 JNZ OSIntCtxSw_0
846 ;是則不需要保存所有寄存器
847 ;SP=SP-13-4 ;4:兩層函數調用堆棧,13:寄存器數目
0006 74EF 848 MOV A,#(-17)
0008 2581 849 ADD A,SP
000A F581 850 MOV SP,A
851 ;跳轉到OSCtxSw,同時通知CPU中斷處理完成
000C 7400 F 852 MOV A, #LOW OSCtxSw
000E C0E0 853 PUSH ACC
0010 7400 F 854 MOV A, #HIGH OSCtxSw
0012 C0E0 855 PUSH ACC
0014 32 856 RETI
857 ;需要保存所有寄存器
0015 858 OSIntCtxSw_0:
859 ;SP=SP-4 ;4:兩層函數調用堆棧
0015 74FC 860 MOV A,#0FCH
0017 2581 861 ADD A,SP
0019 F581 862 MOV SP,A
863 ;設置標志:任務再次恢復運行時需要恢復所有寄存器
001B 900000 F 864 MOV DPTR,#OSMapTbl
001E E500 F 865 MOV A,OSTaskID
866
0020 93 867 MOVC A,@A+DPTR
0021 F4 868 CPL A
0022 5200 F 869 ANL OSFastSwap,A
A51 MACRO ASSEMBLER OS_CPU_A 03/10/2007 13:05:45 PAGE 15
885
886
0024 C000 F 890 PUSH Os_Enter_Sum ;保存關中斷計數器
891 ;跳轉到堆棧處理,同時通知CPU中斷處理完成
0026 7400 F 892 MOV A, #LOW C_OSCtxSw
0028 C0E0 893 PUSH ACC
002A 7400 F 894 MOV A, #HIGH C_OSCtxSw
002C C0E0 895 PUSH ACC
002E 32 896 RETI
897
898 ;/*****************************************************************************************
****************
899 ;** End Of File
900 ;******************************************************************************************
**************/
901 END
A51 MACRO ASSEMBLER OS_CPU_A 03/10/2007 13:05:45 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 + -