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

📄 os_cpu_a.lst

📁 keil开发环境
💻 LST
📖 第 1 页 / 共 4 页
字号:
                     483     ;         } while (--i != 0);
0069 DAFA            484         DJNZ    R2,StkInit18
                     485     ;     }
006B                 486     StkInit12:
                     487     ;     cp = OSTsakStackBotton[TaskID];
006B 7400     F      488         MOV     A,#LOW (OSTsakStackBotton)
006D 2B              489         ADD     A,R3
006E F8              490         MOV     R0,A
006F E6              491         MOV     A,@R0
0070 F9              492         MOV     R1,A
                     493     ;     *cp++ = (uint16)task % 256;
0071 D0E0            494         pop     ACC
0073 F7              495         MOV     @R1,A
0074 09              496         INC     R1
                     497     ;     *cp++ = (uint16)task / 256;
0075 D0E0            498         pop     ACC
0077 F7              499         MOV     @R1,A
0078 09              500         INC     R1
                     501     
                             
                                 
A51 MACRO ASSEMBLER  OS_CPU_A                                                             07/02/2005 23:47:38 PAGE     9

                                 
                             
                                 
                                 
                             
                     509     ;     *cp = 0;
0079 E4              510         CLR     A
007A F7              511         MOV     @R1,A
                     512     ; }
007B 22              513         RET     
                     514     
                     515     ;/*****************************************************************************************
                             ****************
                     516     ;** 函数名称: LoadCtx
                     517     ;** 功能描述: 任务环境恢复函数
                     518     ;** 输 入: OSTaskID,OSFastSwap
                     519     ;** 输 出 : 无
                     520     ;** 全局变量: 无
                     521     ;** 调用模块: 无
                     522     ;** 
                     523     ;** 作 者: 陈明计
                     524     ;** 日 期: 2002年2月22日
                     525     ;**----------------------------------------------------------------------------------------
                             ---------------
                     526     ;** 修 改: 陈明计
                     527     ;** 日 期: 2002年12月2日
                     528     ;**----------------------------------------------------------------------------------------
                             ---------------
                     529     ;** 修 改: 陈明计
                     530     ;** 日 期: 2003年2月5日
                     531     ;**----------------------------------------------------------------------------------------
                             ---------------
                     532     ;** 修 改:
                     533     ;** 日 期:
                     534     ;**----------------------------------------------------------------------------------------
                             ---------------
                     535     ;******************************************************************************************
                             **************/
                     536     
----                 537         RSEG  ?PR?LoadCtx?OS_CPU_A
0000                 538     LoadCtx:
                     539         USING   0
                     540        
0000 D000     F      541         POP     Os_Enter_Sum            ;恢复关中断计数器
                     542     
                     543     
                                 
                                 
                             
                     547     
                     548                                         ;判断是否需要恢复所有寄存器
0002 E500     F      549         MOV     A,OSTaskID
0004 B40202          550         CJNE    A,#2,LoadCtx_0
0007 8022            551         SJMP    LoadCtx_2
0009                 552     LoadCtx_0:
0009 900000   F      553         MOV     DPTR,#OSMapTbl
                     554     
000C 93              555         MOVC    A,@A+DPTR
000D 5500     F      556         ANL     A,OSFastSwap
                             
                                 
                                 
                                 
                                 
                                 
                                 
A51 MACRO ASSEMBLER  OS_CPU_A                                                             07/02/2005 23:47:38 PAGE    10

                             
                                 
                                 
                             
000F 701A            568         JNZ     LoadCtx_2
                     569                                         ;恢复寄存器
0011 D007            570         POP     7
0013 D006            571         POP     6
0015 D005            572         POP     5
0017 D004            573         POP     4
0019 D003            574         POP     3
001B D002            575         POP     2
001D D001            576         POP     1
001F D000            577         POP     0
0021 D0D0            578         POP     PSW
0023 D082            579         POP     DPL
0025 D083            580         POP     DPH
0027 D0F0            581         POP     B
0029 D0E0            582         POP     ACC
002B                 583     LoadCtx_2:
                     584                                         ;判断是否需要开中断
002B 0500     F      585         INC     Os_Enter_Sum
002D D50002   F      586         djnz    Os_Enter_Sum,LoadCtx_3
                     587         SET_EA                          ;开中断
0032                 589     LoadCtx_3:
0032 22              590         RET
                     591     
                     592     
                     593     ;/*****************************************************************************************
                             ****************
                     594     ;** 函数名称: OSCtxSw
                     595     ;** 功能描述: 任务主动放弃CPU环境保存函数
                     596     ;** 输 入: OSTaskID
                     597     ;** 输 出 : 无
                     598     ;** 全局变量: OSFastSwap
                     599     ;** 调用模块: 无
                     600     ;** 
                     601     ;** 作 者: 陈明计
                     602     ;** 日 期: 2002年2月22日
                     603     ;**----------------------------------------------------------------------------------------
                             ---------------
                     604     ;** 修 改:
                     605     ;** 日 期:
                     606     ;**----------------------------------------------------------------------------------------
                             ---------------
                     607     ;******************************************************************************************
                             **************/
----                 608         RSEG  ?PR?OSCtxSw?OS_CPU_A
0000                 609     OSCtxSw:
                     610         USING   0
                     611     
                     612     
                                 
                                 
                             
                     616     
0000 C000     F      617         PUSH    Os_Enter_Sum            ;保存关中断计数器
                     618                                         ;设置标志:任务再次恢复运行时不必恢复所有寄存器
0002 900000   F      619         MOV     DPTR,#OSMapTbl
0005 E500     F      620         MOV     A,OSTaskID
                     621     
0007 93              622         MOVC    A,@A+DPTR
0008 4200     F      623         ORL     OSFastSwap,A
                             
                                 
                                 
A51 MACRO ASSEMBLER  OS_CPU_A                                                             07/02/2005 23:47:38 PAGE    11

                                 
                                 
                                 
                                 
                             
                                 
                                 
                                 
                             
000A 020000   F      636         LJMP    C_OSCtxSw
                     637     ;****************************************************************************************
                     638     ;/*****************************************************************************************
                             ****************
                     639     ;** 函数名称: C_OSCtxSw
                     640     ;** 功能描述: 堆栈处理函数
                     641     ;** 输 入: 无
                     642     ;** 输 出 : 无
                     643     ;** 全局变量: OSTaskID,OSTsakStackBotton,SP
                     644     ;** 调用模块: LoadCtx
                     645     ;** 
                     646     ;** 作 者: 陈明计
                     647     ;** 日 期: 2002年2月22日
                     648     ;**----------------------------------------------------------------------------------------
                             ---------------
                     649     ;** 修 改: 陈明计
                     650     ;** 日 期: 2002年12月2日
                     651     ;**----------------------------------------------------------------------------------------
                             ---------------
                     652     ;** 修 改:
                     653     ;** 日 期:
                     654     ;**----------------------------------------------------------------------------------------
                             ---------------
                     655     ;******************************************************************************************
                             **************/
----                 656         RSEG  ?PR?C_OSCtxSw?OS_CPU_A
0000                 657     C_OSCtxSw:
                     658     
0000 AA81            659         mov     r2,sp
                     660         
                     661     ;     cp1 = (unsigned char idata *)SP +1;
0002 A881            662         MOV     R0,SP
                     663     
                     664     IF 0  <> 0
                                 mov     sp,#(Sp2-1)             ;堆栈指向临时空间,允许“软非屏蔽中断”
                             ENDIF
                     667     
0004 08              668         INC     R0
                     669     ;     temp = (unsigned char )OSTsakStackBotton[OSNextTaskID+1];
0005 7400     F      670         MOV     A,#LOW (OSTsakStackBotton+01H)
0007 2500     F      671         ADD     A,OSNextTaskID
0009 F9              672         MOV     R1,A
000A E7              673         MOV     A,@R1
000B FF              674         MOV     R7,A
                     675     ;     cp2 = OSTsakStackBotton[OSTaskID+1];
000C 7400     F      676         MOV     A,#LOW (OSTsakStackBotton+01H)
000E 2500     F      677         ADD     A,OSTaskID
0010 F9              678         MOV     R1,A
0011 E7              679         MOV     A,@R1
0012 F9              680         MOV     R1,A
                     681     ;     if( OSNextTaskID > OSTaskID)
0013 E500     F      682         MOV     A,OSNextTaskID
0015 D3              683         SETB    C
0016 9500     F      684         SUBB    A,OSTaskID
0018 4033            685         JC      ?C0001
                     686     ;     {
                     687     ;         while(cp2 != (unsigned char idata *)temp)
A51 MACRO ASSEMBLER  OS_CPU_A                                                             07/02/2005 23:47:38 PAGE    12

                     688     ;         {
                     689     ;             *cp1++ = *cp2++;
                     690     ;         }
001A EF              691         MOV     A,R7
001B C3              692         CLR     C
001C 99              693         SUBB    A,R1
001D FE              694         MOV     R6,A
001E                 695     ?C0002:
001E E7              696         MOV     A,@R1
001F F6              697         MOV     @R0,A
0020 08              698         INC     R0
0021 09              699         INC     R1
0022 DEFA            700         DJNZ    R6,?C0002
0024                 701     ?C0003:
                     702     ;         temp = OSTsakStackBotton[OSTaskID+1] - (unsigned char idata *)SP-1;
0024 7400     F      703         MOV     A,#LOW (OSTsakStackBotton+1)
0026 2500     F      704         ADD     A,OSTaskID
0028 F9              705         MOV     R1,A
0029 E7              706         MOV     A,@R1
002A D3              707         SETB    C
                     708         ;SUBB    A,sp
002B 9A              709         SUBB    A,r2
002C FF              710         MOV     R7,A
                     711     ;         SP = (unsigned char )cp1 - 1;
002D 18              712         DEC     R0;
002E 8881            713         MOV     SP,R0
                     714     ;         for(i = OSTaskID+1;i < OSNextTaskID+1; i++)
                     715     ;         {
                     716     ;             OSTsakStackBotton[i] -= temp;
                     717     ;         }
0030 E500     F      718         MOV     A,OSNextTaskID
0032 C3              719         CLR     C
0033 9500     F      720         SUBB    A,OSTaskID
0035 FE              721         MOV     R6,A

⌨️ 快捷键说明

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