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

📄 os_cpu_a.lst

📁 小型便携式温度计的源代码第二版
💻 LST
📖 第 1 页 / 共 3 页
字号:
                +1   240     
                +1   241     
                +1   242     
                +1   243                                                 
A51 MACRO ASSEMBLER  OS_CPU_A                                                             02/14/2009 14:56:15 PAGE     5

                +1   244     
                +1   245     
                +1   246     
                +1   247     
                +1   248     
                +1   249     
                +1   250     
                +1   251     
                +1   252     
                +1   253     
                +1   254     
                +1   255     
                +1   256     
                +1   257                                                 
                +1   258     
                +1   259     
                +1   260     
                +1   261     
                +1   262     
                +1   263     
                +1   264     
                +1   265     
                +1   266     
                +1   267     
                +1   268     
                +1           
                +1           
                +1   271     
                +1   272     
                +1           
                +1           
                +1           
                +1           
                +1           
                     278     
                     279     
                     280             NAME    OS_CPU_A_ASM
                     281     
                     282     ?PR?OSCtxSw?OS_CPU_A                     SEGMENT CODE ;INBLOCK 
                     283     ?PR?OSIntCtxSw?OS_CPU_A                  SEGMENT CODE ;INBLOCK 
                     284     ?PR?LoadCtx?OS_CPU_A                     SEGMENT CODE ;INBLOCK 
                     285     ?PR?C_OSCtxSw?OS_CPU_C                   SEGMENT CODE 
                     286     
                     287     
                     288             EXTRN   CODE (OSMapTbl)
                     289             EXTRN   DATA (OSFastSwap)
                     290             EXTRN   DATA (OSTaskID)
                     291             EXTRN   DATA (OSNextTaskID)
                     292             EXTRN   DATA (OSTsakStackBotton)
                     293             EXTRN   DATA (Os_Enter_Sum)
                     294     IF 0  <> 0
                                     EXTRN   IDATA (Sp2)
                             ENDIF
                     297     
                     298     
                     299             PUBLIC  LoadCtx
                     300             PUBLIC  OSIntCtxSw
                     301             PUBLIC  OSCtxSw
                     302             PUBLIC  STACK 
                     303     
                     304     ;****************************************************************************************
                     305     ;?STACK SEGMENT IDATA
                     306     
                     307     ?STACK          SEGMENT   IDATA
                     308     
----                 309                     RSEG    ?STACK
A51 MACRO ASSEMBLER  OS_CPU_A                                                             02/14/2009 14:56:15 PAGE     6

0000                 310     STACK:                                          ;堆栈
0000                 311                     DS      1
                     312     
                     313     ;****************************************************************************************
                     314     ;/*****************************************************************************************
                             ****************
                     315     ;** 函数名称: LoadCtx
                     316     ;** 功能描述: 任务环境恢复函数
                     317     ;** 输 入: OSTaskID,OSFastSwap
                     318     ;** 输 出 : 无
                     319     ;** 全局变量: 无
                     320     ;** 调用模块: 无
                     321     ;** 
                     322     ;** 作 者: 陈明计
                     323     ;** 日 期: 2002年2月22日
                     324     ;**----------------------------------------------------------------------------------------
                             ---------------
                     325     ;** 修 改: 陈明计
                     326     ;** 日 期: 2002年12月2日
                     327     ;**----------------------------------------------------------------------------------------
                             ---------------
                     328     ;** 修 改: 陈明计
                     329     ;** 日 期: 2003年2月5日
                     330     ;**----------------------------------------------------------------------------------------
                             ---------------
                     331     ;** 修 改:
                     332     ;** 日 期:
                     333     ;**----------------------------------------------------------------------------------------
                             ---------------
                     334     ;******************************************************************************************
                             **************/
                     335     
----                 336             RSEG  ?PR?LoadCtx?OS_CPU_A
0000                 337     LoadCtx:
                     338             USING   0
                     339                
0000 D000     F      340         POP     Os_Enter_Sum            ;恢复关中断计数器
                     341                                         ;判断是否需要恢复所有寄存器
0002 E500     F      342         MOV     A,OSTaskID
0004 B40202          343         CJNE    A,#2,LoadCtx_0
0007 8022            344         SJMP    LoadCtx_2
0009                 345     LoadCtx_0:
0009 900000   F      346         MOV     DPTR,#OSMapTbl
                     347     
000C 93              348         MOVC    A,@A+DPTR
000D 5500     F      349         ANL     A,OSFastSwap
                             
                                 
                                 
                                 
                                 
                                 
                                 
                             
                                 
                                 
                             
000F 701A            361         JNZ     LoadCtx_2
                     362                                         ;恢复寄存器
0011 D007            363         POP     7
0013 D006            364         POP     6
0015 D005            365         POP     5
0017 D004            366         POP     4
0019 D003            367         POP     3
001B D002            368         POP     2
001D D001            369         POP     1
A51 MACRO ASSEMBLER  OS_CPU_A                                                             02/14/2009 14:56:15 PAGE     7

001F D000            370         POP     0
0021 D0D0            371         POP     PSW
0023 D082            372         POP     DPL
0025 D083            373         POP     DPH
0027 D0F0            374         POP     B
0029 D0E0            375         POP     ACC
002B                 376     LoadCtx_2:
                     377                                         ;判断是否需要开中断
002B 0500     F      378         INC     Os_Enter_Sum
002D D50002   F      379         djnz    Os_Enter_Sum,LoadCtx_3
                     380         SET_EA                          ;开中断
0032                 382     LoadCtx_3:
0032 22              383         RET
                     384     
                     385     ;****************************************************************************************
                     386     ;/*****************************************************************************************
                             ****************
                     387     ;** 函数名称: OSCtxSw
                     388     ;** 功能描述: 任务主动放弃CPU环境保存函数
                     389     ;** 输 入: OSTaskID
                     390     ;** 输 出 : 无
                     391     ;** 全局变量: OSFastSwap
                     392     ;** 调用模块: 无
                     393     ;** 
                     394     ;** 作 者: 陈明计
                     395     ;** 日 期: 2002年2月22日
                     396     ;**----------------------------------------------------------------------------------------
                             ---------------
                     397     ;** 修 改:
                     398     ;** 日 期:
                     399     ;**----------------------------------------------------------------------------------------
                             ---------------
                     400     ;******************************************************************************************
                             **************/
----                 401         RSEG  ?PR?OSCtxSw?OS_CPU_A
0000                 402     OSCtxSw:
                     403         USING       0
                     404                                         ;设置标志:任务再次恢复运行时不必恢复所有寄存器
0000 900000   F      405         MOV     DPTR,#OSMapTbl
0003 E500     F      406         MOV     A,OSTaskID
                     407     
0005 93              408         MOVC    A,@A+DPTR
0006 4500     F      409         ORL     A,OSFastSwap
0008 F500     F      410         MOV     OSFastSwap,A
                             
                                 
                                 
                                 
                                 
                                 
                                 
                                 
                             
                                 
                                 
                                 
                                 
                             
000A 020000   F      425         LJMP    C_OSCtxSw
                     426     ;****************************************************************************************
                     427     ;/*****************************************************************************************
                             ****************
                     428     ;** 函数名称: C_OSCtxSw
                     429     ;** 功能描述: 堆栈处理函数
                     430     ;** 输 入: 无
                     431     ;** 输 出 : 无
A51 MACRO ASSEMBLER  OS_CPU_A                                                             02/14/2009 14:56:15 PAGE     8

                     432     ;** 全局变量: OSTaskID,OSTsakStackBotton,SP
                     433     ;** 调用模块: LoadCtx
                     434     ;** 
                     435     ;** 作 者: 陈明计
                     436     ;** 日 期: 2002年2月22日
                     437     ;**----------------------------------------------------------------------------------------
                             ---------------
                     438     ;** 修 改: 陈明计
                     439     ;** 日 期: 2002年12月2日
                     440     ;**----------------------------------------------------------------------------------------
                             ---------------
                     441     ;** 修 改:
                     442     ;** 日 期:
                     443     ;**----------------------------------------------------------------------------------------
                             ---------------
                     444     ;******************************************************************************************
                             **************/
----                 445             RSEG  ?PR?C_OSCtxSw?OS_CPU_C
0000                 446     C_OSCtxSw:
0000 C000     F      447         PUSH    Os_Enter_Sum            ;保存关中断计数器
0002 AA81            448         mov     r2,sp
                     449         
                     450     ;     cp1 = (unsigned char idata *)SP +1;
0004 A881            451         MOV     R0,SP
                     452     
                     453     IF 0  <> 0
                                 mov     sp,#(Sp2-1)             ;堆栈指向临时空间,允许“软非屏蔽中断”
                             ENDIF
                     456     
0006 08              457         INC     R0
                     458     ;     temp = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
0007 7400     F      459         MOV     A,#LOW (OSTsakStackBotton+01H)
0009 2500     F      460         ADD     A,OSNextTaskID
000B F9              461         MOV     R1,A
000C E7              462         MOV     A,@R1
000D FF              463         MOV     R7,A
                     464     ;     cp2 = OSTsakStackBotton[OSTaskID+1];
000E 7400     F      465         MOV     A,#LOW (OSTsakStackBotton+01H)
0010 2500     F      466         ADD     A,OSTaskID
0012 F9              467         MOV     R1,A
0013 E7              468         MOV     A,@R1
0014 F9              469         MOV     R1,A
                     470     ;     if( OSNextTaskID > OSTaskID)
0015 E500     F      471         MOV     A,OSNextTaskID
0017 D3              472         SETB    C
0018 9500     F      473         SUBB    A,OSTaskID
001A 4033            474         JC      ?C0001
                     475     ;     {
                     476     ;         while(cp2 != (unsigned char idata *)temp)
                     477     ;         {
                     478     ;             *cp1++ = *cp2++;
                     479     ;         }
001C EF              480         MOV     A,R7
001D C3              481         CLR     C
001E 99              482         SUBB    A,R1
001F FE              483         MOV     R6,A
0020                 484     ?C0002:

⌨️ 快捷键说明

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