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

📄 os_cpu_a.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
                +1   241     
                +1   242     
                +1   243     
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 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   269     
                +1           
                +1           
                +1   272     
                +1   273     
                +1           
                +1           
                +1           
                +1           
                +1           
                     279     
                     280     
                     281             NAME    OS_CPU_A_ASM
                     282     
                     283     ?PR?OSCtxSw?OS_CPU_A                     SEGMENT CODE ;INBLOCK 
                     284     ?PR?OSIntCtxSw?OS_CPU_A                  SEGMENT CODE ;INBLOCK 
                     285     ?PR?LoadCtx?OS_CPU_A                     SEGMENT CODE ;INBLOCK 
                     286     ?PR?C_OSCtxSw?OS_CPU_C                   SEGMENT CODE 
                     287     
                     288     
                     289             EXTRN   CODE (OSMapTbl)
                     290             EXTRN   DATA (OSFastSwap)
                     291             EXTRN   DATA (OSTaskID)
                     292             EXTRN   DATA (OSNextTaskID)
                     293             EXTRN   DATA (OSTsakStackBotton)
                     294             EXTRN   DATA (Os_Enter_Sum)
                     295     IF 0  <> 0
                                     EXTRN   IDATA (Sp2)
                             ENDIF
                     298     
                     299     
                     300             PUBLIC  LoadCtx
                     301             PUBLIC  OSIntCtxSw
                     302             PUBLIC  OSCtxSw
                     303             PUBLIC  STACK 
                     304     
                     305     ;****************************************************************************************
                     306     ;?STACK SEGMENT IDATA
                     307     
                     308     ?STACK          SEGMENT   IDATA
                     309     
A51 MACRO ASSEMBLER  OS_CPU_A                                                             12/21/2004 15:11:28 PAGE     6

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

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

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

⌨️ 快捷键说明

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