⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_cpu_a.lst

📁 该源码是本人经调试通过的UCOS2操作系统在51单片机上移植好的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
0020 7601            148     MOV @R0,#01
                     149     
                     150     POPALL
0044 D2AF            173     SETB EA ;开中断
0046 32              174     RETI
                     175     ;-------------------------------------------------------------------------
----                 176     RSEG ?PR?OSCtxSw?OS_CPU_A
0000                 177     OSCtxSw: 
                     178     PUSHALL
                     201     
0022                 202     OSIntCtxSw_in:
                     203     
                     204     ;获得堆栈长度和起址
0022 E581            205     MOV A,SP
0024 C3              206     CLR C
0025 9400     F      207     SUBB A,#OSStkStart
0027 FD              208     MOV R5,A ;获得堆栈长度 
                     209     
                     210     ;OSTCBCur ===> DPTR 获得当前TCB指针,详见C51.PDF第178页
0028 7800     F      211     MOV R0,#LOW (OSTCBCur) ;获得OSTCBCur指针低地址,指针占3字节。+0类型+1高8位数据+2低8位数据
002A 08              212     INC R0
002B 8683            213     MOV DPH,@R0 ;全局变量OSTCBCur在IDATA中
002D 08              214     INC R0
002E 8682            215     MOV DPL,@R0
                     216     
                     217     ;OSTCBCur->OSTCBStkPtr ===> DPTR 获得用户堆栈指针
0030 A3              218     INC DPTR ;指针占3字节。+0类型+1高8位数据+2低8位数据
0031 E0              219     MOVX A,@DPTR ;.OSTCBStkPtr是void指针
0032 F8              220     MOV R0,A
0033 A3              221     INC DPTR
0034 E0              222     MOVX A,@DPTR
0035 F9              223     MOV R1,A
0036 8883            224     MOV DPH,R0
0038 8982            225     MOV DPL,R1
                     226     
                     227     ;保存堆栈长度
003A ED              228     MOV A,R5
003B F0              229     MOVX @DPTR,A
                     230     
003C 7800     F      231     MOV R0,#OSStkStart ;获得堆栈起址
003E                 232     save_stack:
A51 MACRO ASSEMBLER  OS_CPU_A                                                             09/30/2006 10:50:44 PAGE     4

                     233     
003E A3              234     INC DPTR
003F 08              235     INC R0
0040 E6              236     MOV A,@R0
0041 F0              237     MOVX @DPTR,A
0042 DDFA            238     DJNZ R5,save_stack
                     239     
                     240     ;调用用户程序
                     241     ;LCALL _?OSTaskSwHook
                     242     
                     243     ;OSTCBCur = OSTCBHighRdy
0044 7800     F      244     MOV R0,#OSTCBCur
0046 7900     F      245     MOV R1,#OSTCBHighRdy
0048 E7              246     MOV A,@R1
0049 F6              247     MOV @R0,A
004A 08              248     INC R0
004B 09              249     INC R1
004C E7              250     MOV A,@R1
004D F6              251     MOV @R0,A
004E 08              252     INC R0
004F 09              253     INC R1
0050 E7              254     MOV A,@R1
0051 F6              255     MOV @R0,A
                     256     
                     257     ;OSPrioCur = OSPrioHighRdy 使用这两个变量主要目的是为了使指针比较变为字节比较,以便节省时间
0052 7800     F      258     MOV R0,#OSPrioCur
0054 7900     F      259     MOV R1,#OSPrioHighRdy
0056 E7              260     MOV A,@R1
0057 F6              261     MOV @R0,A
                     262     
0058 020000   F      263     LJMP OSCtxSw_in
                     264     ;-------------------------------------------------------------------------
----                 265     RSEG ?PR?OSIntCtxSw?OS_CPU_A
                     266     
0000                 267     OSIntCtxSw:
                     268     
                     269     ;调整SP指针去掉在调用OSIntExit(),OSIntCtxSw()过程中压入堆栈的多余内容
                     270     ;SP=SP-4
                     271     
0000 E581            272     MOV A,SP
0002 C3              273     CLR C
0003 9404            274     SUBB A,#4
0005 F581            275     MOV SP,A
                     276     
0007 020000   F      277     LJMP OSIntCtxSw_in
                     278     ;-------------------------------------------------------------------------
----                 279     CSEG AT 000BH ;OSTickISR
000B 020000   F      280     LJMP OSTickISR ;使用定时器0
----                 281     RSEG ?PR?OSTickISR?OS_CPU_A
                     282     
0000                 283     OSTickISR: 
                     284     
                     285     USING 0 
                     286     PUSHALL
                     309     
0022 C28C            310     CLR TR0
0024 758C70          311     MOV TH0,#70H ;定义Tick=50次/秒(即0.02秒/次)
0027 758A00          312     MOV TL0,#00H ;OS_CPU_C.C 和 OS_TICKS_PER_SEC
002A D28C            313     SETB TR0
                     314     
002C 120000   F      315     LCALL _?OSIntEnter
002F 120000   F      316     LCALL _?OSTimeTick
0032 120000   F      317     LCALL _?OSIntExit
                     318     POPALL 
                     341     
A51 MACRO ASSEMBLER  OS_CPU_A                                                             09/30/2006 10:50:44 PAGE     5

0057 32              342     RETI
                     343          end
A51 MACRO ASSEMBLER  OS_CPU_A                                                             09/30/2006 10:50:44 PAGE     6

SYMBOL TABLE LISTING
------ ----- -------


N A M E                      T Y P E  V A L U E   ATTRIBUTES

?PR?OSCTXSW?OS_CPU_A. . . .  C SEG    005BH       REL=UNIT
?PR?OSINTCTXSW?OS_CPU_A . .  C SEG    000AH       REL=UNIT
?PR?OSSTARTHIGHRDY?OS_CPU_A  C SEG    0047H       REL=UNIT
?PR?OSTICKISR?OS_CPU_A. . .  C SEG    0058H       REL=UNIT
?STACK. . . . . . . . . . .  I SEG    0040H       REL=UNIT
ACC . . . . . . . . . . . .  D ADDR   00E0H   A   
B . . . . . . . . . . . . .  D ADDR   00F0H   A   
DPH . . . . . . . . . . . .  D ADDR   0083H   A   
DPL . . . . . . . . . . . .  D ADDR   0082H   A   
EA. . . . . . . . . . . . .  B ADDR   00A8H.7 A   
OSCTXSW . . . . . . . . . .  C ADDR   0000H   R   SEG=?PR?OSCTXSW?OS_CPU_A
OSCTXSW_IN. . . . . . . . .  C ADDR   0000H   R   SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSINTCTXSW. . . . . . . . .  C ADDR   0000H   R   SEG=?PR?OSINTCTXSW?OS_CPU_A
OSINTCTXSW_IN . . . . . . .  C ADDR   0022H   R   SEG=?PR?OSCTXSW?OS_CPU_A
OSPRIOCUR . . . . . . . . .  I ADDR   -----       EXT
OSPRIOHIGHRDY . . . . . . .  I ADDR   -----       EXT
OSRUNNING . . . . . . . . .  I ADDR   -----       EXT
OSSTACK . . . . . . . . . .  I ADDR   0000H   R   SEG=?STACK
OSSTARTHIGHRDY. . . . . . .  C ADDR   0000H   R   SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
OSSTKSTART. . . . . . . . .  I ADDR   FFFFH   R   SEG=?STACK
OSTCBCUR. . . . . . . . . .  I ADDR   -----       EXT
OSTCBHIGHRDY. . . . . . . .  I ADDR   -----       EXT
OSTICKISR . . . . . . . . .  C ADDR   0000H   R   SEG=?PR?OSTICKISR?OS_CPU_A
OS_CPU_A. . . . . . . . . .  N NUMB   -----       
PSW . . . . . . . . . . . .  D ADDR   00D0H   A   
RESTORE_STACK . . . . . . .  C ADDR   0016H   R   SEG=?PR?OSSTARTHIGHRDY?OS_CPU_A
SAVE_STACK. . . . . . . . .  C ADDR   003EH   R   SEG=?PR?OSCTXSW?OS_CPU_A
SP. . . . . . . . . . . . .  D ADDR   0081H   A   
TH0 . . . . . . . . . . . .  D ADDR   008CH   A   
TL0 . . . . . . . . . . . .  D ADDR   008AH   A   
TR0 . . . . . . . . . . . .  B ADDR   0088H.4 A   
_?OSINTENTER. . . . . . . .  C ADDR   -----       EXT
_?OSINTEXIT . . . . . . . .  C ADDR   -----       EXT
_?OSTIMETICK. . . . . . . .  C ADDR   -----       EXT


REGISTER BANK(S) USED: 0 

ASSEMBLY COMPLETE.  0 WARNING(S), 0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -