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

📄 os_cpu_a.lst

📁 一个通过方向判别芯片进行角度计算的程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
0068 09              481         INC     R1
                     482     ;         } while (--i != 0);
0069 DAFA            483         DJNZ    R2,StkInit18
                     484     ;     }
006B                 485     StkInit12:
                     486     ;     cp = OSTsakStackBotton[TaskID];
006B 7400     F      487         MOV     A,#LOW (OSTsakStackBotton)
006D 2B              488         ADD     A,R3
006E F8              489         MOV     R0,A
006F E6              490         MOV     A,@R0
0070 F9              491         MOV     R1,A
                     492     ;     *cp++ = (uint16)task % 256;
0071 D0E0            493         pop     ACC
0073 F7              494         MOV     @R1,A
0074 09              495         INC     R1
                     496     ;     *cp++ = (uint16)task / 256;
0075 D0E0            497         pop     ACC
0077 F7              498         MOV     @R1,A
0078 09              499         INC     R1
                     500     
                             
                                 
                                 
A51 MACRO ASSEMBLER  OS_CPU_A                                                             03/10/2007 13:05:45 PAGE     9

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

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

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

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

⌨️ 快捷键说明

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