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

📄 os_cpu_a.lst

📁 移植UCOS2.00版内核到8051
💻 LST
字号:
C51 COMPILER V7.08   OS_CPU_A                                                              10/23/2007 17:47:44 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE OS_CPU_A
OBJECT MODULE PLACED IN OS_CPU_A.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE OS_CPU_A.C LARGE BROWSE DEBUG OBJECTEXTEND SRC(.\OS_CPU_A.SRC)

line level    source

   1          /*
   2          *********************************************************************************************************
   3          *                                               uC/OS-II
   4          *                                               实时内核
   5          *
   6          *                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
   7          *                                               版权所有
   8          *
   9          *                                            MCU-51 专用代码
  10          *                                           KEIL C51大模式编译
  11          *
  12          * 文件名 : OS_CPU_A.C
  13          * 作者   : Jean J. Labrosse
  14          * 改编   : 柯新 kexin28@126.com 深圳众芯科技有限公司软件部 2007.10.22
  15          *********************************************************************************************************
  16          */
  17          
  18          //#define  OS_CPU_GLOBALS
  19          #include "includes.h"
  20          
  21          OS_STK  *UserStkSP_tmp;
  22          
  23          #if CXBP_OK>0
  24          #pragma asm
  25                  EXTRN DATA  (?C_XBP)     ;仿真堆栈指针用于重入局部变量保存    
  26          #pragma endasm
  27          #endif
  28          
  29          #pragma asm
  30          
  31          PUSHALL MACRO
  32          
  33                  PUSH PSW
  34                  PUSH ACC
  35                  PUSH B
  36                  PUSH DPL
  37                  PUSH DPH
  38                  MOV  A,R0   ;R0-R7入栈
  39                  PUSH ACC
  40                  MOV  A,R1
  41                  PUSH ACC
  42                  MOV  A,R2
  43                  PUSH ACC
  44                  MOV  A,R3
  45                  PUSH ACC
  46                  MOV  A,R4
  47                  PUSH ACC
  48                  MOV  A,R5
  49                  PUSH ACC
  50                  MOV  A,R6
  51                  PUSH ACC
  52                  MOV  A,R7
  53                  PUSH ACC
  54          
  55          ENDM
C51 COMPILER V7.08   OS_CPU_A                                                              10/23/2007 17:47:44 PAGE 2   

  56          
  57          #pragma endasm
  58          
  59          #pragma asm
  60          
  61          POPALL MACRO
  62          
  63                  POP  ACC    ;R0-R7出栈
  64                  MOV  R7,A
  65                  POP  ACC
  66                  MOV  R6,A
  67                  POP  ACC
  68                  MOV  R5,A
  69                  POP  ACC
  70                  MOV  R4,A
  71                  POP  ACC
  72                  MOV  R3,A
  73                  POP  ACC
  74                  MOV  R2,A
  75                  POP  ACC
  76                  MOV  R1,A
  77                  POP  ACC
  78                  MOV  R0,A
  79                  POP  DPH
  80                  POP  DPL
  81                  POP  B
  82                  POP  ACC
  83                  POP  PSW
  84          
  85          ENDM
  86          
  87          #pragma endasm
  88          
  89          void OSCtxSw(void)
  90          {
  91   1              OS_STK idata *SysStkSP;
  92   1              OS_STK *UserStkSP;
  93   1              INT8U  STKCount;
  94   1              
  95   1      #pragma asm
  96   1        PUSHALL 
  97   1      #pragma endasm
  98   1      
  99   1        SysStkSP=UserSysSP_Start;
 100   1        STKCount=SP-UserSysSP_Start;
 101   1        UserStkSP=OSTCBCur->OSTCBStkPtr;
 102   1        
 103   1        *UserStkSP=STKCount;
 104   1        
 105   1        do
 106   1        {
 107   2              SysStkSP++;
 108   2              UserStkSP++;
 109   2              *UserStkSP=*SysStkSP;
 110   2              STKCount--;
 111   2        }while(STKCount!=0);
 112   1      
 113   1      #if CXBP_OK>0
 114   1        UserStkSP++;
 115   1        UserStkSP_tmp=UserStkSP;
 116   1      #pragma asm
 117   1              MOV  R0,#LOW (UserStkSP_tmp)
C51 COMPILER V7.08   OS_CPU_A                                                              10/23/2007 17:47:44 PAGE 3   

 118   1              ;MOV  R0,#UserStkSP_tmp
 119   1              ;INC  R0
 120   1              ;MOV  DPH,@R0    ;变量 UserStkSP_tmp 在IDATA中
 121   1              ;INC  R0
 122   1              ;MOV  DPL,@R0  
 123   1                    
 124   1              ;保存仿真堆栈指针?C_XBP
 125   1              MOV  A,?C_XBP    ;?C_XBP 仿真堆栈指针高8位
 126   1              ;MOVX @DPTR,A
 127   1              MOVX @R0,A
 128   1              INC  R0
 129   1              ;INC  DPTR
 130   1              MOV  A,?C_XBP+1  ;?C_XBP 仿真堆栈指针低8位
 131   1              ;MOVX @DPTR,A 
 132   1              MOVX @R0,A  
 133   1      #pragma endasm  
 134   1      #endif                  
 135   1              OSTaskSwHook();
 136   1              
 137   1      
 138   1              OSTCBCur=OSTCBHighRdy;
 139   1              OSPrioCur=OSPrioHighRdy;
 140   1      
 141   1              UserStkSP=OSTCBCur->OSTCBStkPtr;
 142   1              SysStkSP=UserSysSP_Start;               
 143   1              STKCount=*UserStkSP;
 144   1              
 145   1              SP=UserSysSP_Start+STKCount;
 146   1              
 147   1              do{
 148   2                      UserStkSP++;
 149   2                      SysStkSP++;
 150   2                      *SysStkSP=*UserStkSP;
 151   2          STKCount--;
 152   2        }while(STKCount!=0);
 153   1        
 154   1      #if CXBP_OK>0 
 155   1        UserStkSP++;
 156   1        UserStkSP_tmp=UserStkSP;
 157   1      #pragma asm
 158   1              MOV  R0,#LOW (UserStkSP_tmp)
 159   1              ;MOV  R0,#UserStkSP_tmp
 160   1              ;INC  R0
 161   1              ;MOV  DPH,@R0    ;变量UserStkSP在IDATA中
 162   1              ;INC  R0
 163   1              ;MOV  DPL,@R0  
 164   1                    
 165   1              ;MOVX A,@DPTR
 166   1              MOVX A,@R0
 167   1              MOV  ?C_XBP,A    ;?C_XBP 仿真堆栈指针高8位
 168   1              ;INC  DPTR
 169   1              INC  R0
 170   1              ;MOVX A,@DPTR
 171   1              MOVX A,@R0
 172   1              MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆栈指针低8位
 173   1      #pragma endasm
 174   1      #endif
 175   1      
 176   1      #pragma asm
 177   1       POPALL
 178   1       RETI
 179   1      #pragma endasm                  
C51 COMPILER V7.08   OS_CPU_A                                                              10/23/2007 17:47:44 PAGE 4   

 180   1        
 181   1      }
 182          
 183          void OSTickISR(void) interrupt 1
 184          {
 185   1      /*      OS_STK idata *SysStkSP;
 186   1              OS_STK *UserStkSP;
 187   1              INT8U  STKCount;*/
 188   1      
 189   1              TR0=0;
 190   1              TH0=0x70;
 191   1              TL0=0x00;
 192   1              TR0 = 1;
 193   1              
 194   1              OSIntEnter();
 195   1      /*      if (OSIntNesting == 1)
 196   1              {
 197   1        SysStkSP=UserSysSP_Start;
 198   1        STKCount=SP-UserSysSP_Start;
 199   1        UserStkSP=OSTCBCur->OSTCBStkPtr;
 200   1        
 201   1        *UserStkSP=STKCount;
 202   1        
 203   1        do
 204   1        {
 205   1              SysStkSP++;
 206   1              UserStkSP++;
 207   1              *UserStkSP=*SysStkSP;
 208   1              STKCount--;
 209   1        }while(STKCount!=0);          
 210   1        }     */
 211   1        OSTimeTick();
 212   1              OSIntExit();
 213   1      }
 214          
 215          void OSIntCtxSw(void)
 216          {
 217   1              OS_STK idata *SysStkSP;
 218   1              OS_STK *UserStkSP;
 219   1              INT8U  STKCount;
 220   1              
 221   1              OSTaskSwHook();
 222   1              
 223   1              OSTCBCur=OSTCBHighRdy;
 224   1              OSPrioCur=OSPrioHighRdy;
 225   1      
 226   1              UserStkSP=OSTCBCur->OSTCBStkPtr;
 227   1              SysStkSP=UserSysSP_Start;               
 228   1              STKCount=*UserStkSP;
 229   1      //      STKCount-=4;
 230   1              SP=UserSysSP_Start+STKCount;
 231   1              
 232   1              do{
 233   2                      UserStkSP++;
 234   2                      SysStkSP++;
 235   2                      *SysStkSP=*UserStkSP;
 236   2          STKCount--;
 237   2        }while(STKCount!=0);
 238   1      
 239   1      #if CXBP_OK>0 
 240   1        UserStkSP++;
 241   1        UserStkSP_tmp=UserStkSP;
C51 COMPILER V7.08   OS_CPU_A                                                              10/23/2007 17:47:44 PAGE 5   

 242   1      #pragma asm
 243   1               MOV  R0,#LOW (UserStkSP_tmp)
 244   1              ;MOV  R0,#UserStkSP_tmp
 245   1              ;INC  R0
 246   1              ;MOV  DPH,@R0    ;变量UserStkSP在IDATA中
 247   1              ;INC  R0
 248   1              ;MOV  DPL,@R0  
 249   1                    
 250   1              ;MOVX A,@DPTR
 251   1              MOVX A,@R0
 252   1              MOV  ?C_XBP,A    ;?C_XBP 仿真堆栈指针高8位
 253   1              ;INC  DPTR
 254   1              INC  R0
 255   1              ;MOVX A,@DPTR
 256   1              MOVX A,@R0
 257   1              MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆栈指针低8位
 258   1      #pragma endasm
 259   1      #endif
 260   1      
 261   1      #pragma asm
 262   1       POPALL 
 263   1       RETI
 264   1      #pragma endasm 
 265   1      
 266   1      }
 267          
 268          void OSStartHighRdy(void)
 269          {
 270   1              OS_STK idata *SysStkSP;
 271   1              OS_STK *UserStkSP;
 272   1              INT8U  STKCount;
 273   1              
 274   1              OSTaskSwHook();
 275   1              
 276   1              
 277   1              SysStkSP=UserSysSP_Start;
 278   1              OSTCBCur=OSTCBHighRdy;
 279   1              OSPrioCur=OSPrioHighRdy;
 280   1              
 281   1              UserStkSP=OSTCBCur->OSTCBStkPtr;
 282   1              STKCount=*UserStkSP;
 283   1              
 284   1              SP=UserSysSP_Start+STKCount;
 285   1              
 286   1              do{
 287   2                      UserStkSP++;
 288   2                      SysStkSP++;
 289   2                      *SysStkSP=*UserStkSP;
 290   2          STKCount--;
 291   2        }while(STKCount!=0);
 292   1      
 293   1      #if CXBP_OK>0
 294   1        UserStkSP++;
 295   1        UserStkSP_tmp=UserStkSP;
 296   1      #pragma asm
 297   1              MOV  R0,#LOW (UserStkSP_tmp)
 298   1              ;MOV  R0,#UserStkSP_tmp
 299   1              ;INC  R0
 300   1              ;MOV  DPH,@R0    ;变量UserStkSP在IDATA中
 301   1              ;INC  R0
 302   1              ;MOV  DPL,@R0  
 303   1                    
C51 COMPILER V7.08   OS_CPU_A                                                              10/23/2007 17:47:44 PAGE 6   

 304   1              ;MOVX A,@DPTR
 305   1              MOVX A,@R0
 306   1              MOV  ?C_XBP,A    ;?C_XBP 仿真堆栈指针高8位
 307   1              ;INC  DPTR
 308   1              INC  R0
 309   1              ;MOVX A,@DPTR
 310   1              MOVX A,@R0
 311   1              MOV  ?C_XBP+1,A  ;?C_XBP 仿真堆栈指针低8位
 312   1      #pragma endasm
 313   1      #endif
 314   1      
 315   1        OSRunning = 1;
 316   1      
 317   1      #pragma asm
 318   1       POPALL
 319   1       RETI
 320   1      #pragma endasm          
 321   1      }
 322          
 323          #if SERIAL_OK>0
 324          void SerialISR(void) reentrant interrupt 4 using 0
 325          {    
 326   1             // EA=0;
 327   1              OSIntEnter();
 328   1              serial();   
 329   1            //  EA=1;
 330   1              OSIntExit(); 
 331   1      }
 332          #endif 
 333          
 334              


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    651    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      3    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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