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

📄 os_cpu_c.lst

📁 uCOS2 for 51系列
💻 LST
📖 第 1 页 / 共 3 页
字号:
  45          *                                    ---------- |
  46          *                                    |   ...  | 仿真堆栈空间
  47          *----------                          ---------- | 每任务一个
  48          *|OSTCBCur|               ?C_XBP---->|        | | KEIL自动处理
  49          *----------                          ---------- -
  50          *    |                               |空闲间隔|
  51          *    |     -----------------------   ----------                           ----------
  52          *    \---->|OSTCBCur->OSTCBStkPtr|   |?C_XBP低|                    SP---->|        |
  53          *          -----------------------   ----------                           ----------
  54          *                     |              |?C_XBP高|                           |        |
  55          *                     |              ---------- -                         ----------
  56          *                     |              |        | |                         |   .    |
  57          *                     |              ---------- |                         |   .    |
  58          *                     |              |        | |                         |   .    |
  59          *                     |              ---------- |                         ----------
  60          *                     |              |   .    |长度                       |        | +1
  61          *                     |              |   .    | |                         ----------
  62          *                     |              |   .    | |             OSStack---->|        | 0
  63          *                     |              ---------- |                         ----------
  64          *                     |              |        | |          OSStkStart---->| 不关心 | -1  低地址
  65          *                     |              ---------- -                         ----------
  66          *                     \------------->|  长度  | 低地址                   系统硬件堆栈
  67          *                                    ----------
  68          *                                     用户堆栈                       长度=SP-OSStkStart
  69          *********************************************************************************************************
  70          */
  71          
  72          void *OSTaskStkInit (void (*task)(void *pd), void *ppdata, OS_STK *ptos, INT16U opt) reentrant
  73          {    
  74   1          OS_STK *stk;
  75   1      
  76   1          ppdata = ppdata;
  77   1          opt    = opt;                               //opt没被用到,保留此语句防止告警产生    
  78   1          stk    = (OS_STK *)ptos;                    //用户堆栈最低有效地址
  79   1          *stk++ = 15;                                //用户堆栈长度
  80   1          *stk++ = (INT16U)task & 0xFF;               //任务地址低8位
  81   1          *stk++ = (INT16U)task >> 8;                 //任务地址高8位    
  82   1          *stk++ = 0x00;                              //PSW
  83   1          *stk++ = 0x0A;                              //ACC
  84   1          *stk++ = 0x0B;                              //B
  85   1          *stk++ = 0x00;                              //DPL
  86   1          *stk++ = 0x00;                              //DPH
  87   1      
  88   1              //R3、R2、R1用于传递任务参数ppdata,其中R3代表存储器类型,R2为高字节偏移,R1为低字节位移。
  89   1              //通过分析KEIL汇编,了解到任务的void *ppdata参数恰好是用R3、R2、R1传递,不是通过虚拟堆栈。
  90   1          *stk++ = (INT16U)ppdata & 0xFF;             //R1
  91   1          *stk++ = (INT16U)ppdata >> 8;               //R2
  92   1          *stk++ = 0x01;                              //R3  因为我用的全是XDATA,所以存储器类型固定为1,见C51.PD
             -F第178页说明。
  93   1      
  94   1          *stk++ = 0x03;                              //R3
  95   1          *stk++ = 0x04;                              //R4
  96   1          *stk++ = 0x05;                              //R5
  97   1          *stk++ = 0x06;                              //R6
  98   1          *stk++ = 0x07;                              //R7
  99   1                                                      //不用保存SP,任务切换时根据用户堆栈长度计算得出。    
C51 COMPILER V7.50   OS_CPU_C                                                              01/12/2005 21:47:41 PAGE 7   

 100   1          *stk++ = (INT16U) (ptos+TaskStkSize) >> 8;   //?C_XBP 仿真堆栈指针高8位
 101   1          *stk++ = (INT16U) (ptos+TaskStkSize) & 0xFF; //?C_XBP 仿真堆栈指针低8位
 102   1              
 103   1          return ((void *)ptos);
 104   1      }
 105          
 106          
 107          
 108          
 109          //初始化定时器0
 110          void InitTimer0(void) reentrant
 111          {
 112   1          TMOD=TMOD&0xF0;
 113   1          TMOD=TMOD|0x01;     //模式1(16位定时器),仅受TR0控制
 114   1          TH0=0x70;           //定义Tick=50次/秒(即0.02秒/次)
 115   1          TL0=0x00;           //OS_CPU_A.ASM  和  OS_TICKS_PER_SEC
 116   1          ET0=1;              //允许T0中断
 117   1          TR0=1;   
 118   1      }
 119          
 120          //在OSIntExit()中切换任务,当用方法3关中断时调整XBP
 121          INT16U AdjXBP( INT16U i )
 122          {
 123   1      #if OS_CRITICAL_METHOD == 3
 124   1          i++;
 125   1      #endif
 126   1          
 127   1          return i;
 128   1      }
C51 COMPILER V7.50   OS_CPU_C                                                              01/12/2005 21:47:41 PAGE 8   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _?OSTaskStkInit (BEGIN)
                                           ; SOURCE LINE # 72
0000 90FFFD            MOV     DPTR,#0FFFDH
0003 120000      E     LCALL   ?C?ADDXBP
0006 EB                MOV     A,R3
0007 F0                MOVX    @DPTR,A
0008 A3                INC     DPTR
0009 EA                MOV     A,R2
000A F0                MOVX    @DPTR,A
000B A3                INC     DPTR
000C E9                MOV     A,R1
000D F0                MOVX    @DPTR,A
000E 90FFFD            MOV     DPTR,#0FFFDH
0011 120000      E     LCALL   ?C?ADDXBP
                                           ; SOURCE LINE # 76
0014 900006            MOV     DPTR,#06H
0017 120000      E     LCALL   ?C?XBPOFF
001A E0                MOVX    A,@DPTR
001B FB                MOV     R3,A
001C A3                INC     DPTR
001D E0                MOVX    A,@DPTR
001E FA                MOV     R2,A
001F A3                INC     DPTR
0020 E0                MOVX    A,@DPTR
0021 F9                MOV     R1,A
0022 900006            MOV     DPTR,#06H
0025 120000      E     LCALL   ?C?XBPOFF
0028 EB                MOV     A,R3
0029 F0                MOVX    @DPTR,A
002A A3                INC     DPTR
002B EA                MOV     A,R2
002C F0                MOVX    @DPTR,A
002D A3                INC     DPTR
002E E9                MOV     A,R1
002F F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 77
0030 90000C            MOV     DPTR,#0CH
0033 120000      E     LCALL   ?C?XBPOFF
0036 E0                MOVX    A,@DPTR
0037 FE                MOV     R6,A
0038 A3                INC     DPTR
0039 E0                MOVX    A,@DPTR
003A FF                MOV     R7,A
003B 90000C            MOV     DPTR,#0CH
003E 120000      E     LCALL   ?C?XBPOFF
0041 EE                MOV     A,R6
0042 F0                MOVX    @DPTR,A
0043 A3                INC     DPTR
0044 EF                MOV     A,R7
0045 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 78
0046 900009            MOV     DPTR,#09H
0049 120000      E     LCALL   ?C?XBPOFF
004C E0                MOVX    A,@DPTR
004D FB                MOV     R3,A
004E A3                INC     DPTR
004F E0                MOVX    A,@DPTR
0050 FA                MOV     R2,A
0051 A3                INC     DPTR
C51 COMPILER V7.50   OS_CPU_C                                                              01/12/2005 21:47:41 PAGE 9   

0052 E0                MOVX    A,@DPTR
0053 F9                MOV     R1,A
0054 850083      E     MOV     DPH,?C_XBP
0057 850082      E     MOV     DPL,?C_XBP+01H
005A EB                MOV     A,R3
005B F0                MOVX    @DPTR,A
005C A3                INC     DPTR
005D EA                MOV     A,R2
005E F0                MOVX    @DPTR,A
005F A3                INC     DPTR
0060 E9                MOV     A,R1
0061 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 79
0062 850083      E     MOV     DPH,?C_XBP
0065 850082      E     MOV     DPL,?C_XBP+01H
0068 E0                MOVX    A,@DPTR
0069 FB                MOV     R3,A
006A A3                INC     DPTR
006B E4                CLR     A
006C 75F001            MOV     B,#01H
006F 120000      E     LCALL   ?C?ILDIX
0072 A9F0              MOV     R1,B
0074 FA                MOV     R2,A
0075 740F              MOV     A,#0FH
0077 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 80
007A 900003            MOV     DPTR,#03H
007D 120000      E     LCALL   ?C?XBPOFF
0080 E0                MOVX    A,@DPTR
0081 FB                MOV     R3,A
0082 A3                INC     DPTR
0083 E0                MOVX    A,@DPTR
0084 FA                MOV     R2,A
0085 A3                INC     DPTR
0086 E0                MOVX    A,@DPTR
0087 F9                MOV     R1,A
0088 AF01              MOV     R7,AR1
008A EF                MOV     A,R7
008B 54FF              ANL     A,#0FFH
008D FF                MOV     R7,A
008E 850083      E     MOV     DPH,?C_XBP
0091 850082      E     MOV     DPL,?C_XBP+01H
0094 E0                MOVX    A,@DPTR
0095 FB                MOV     R3,A
0096 A3                INC     DPTR
0097 E4                CLR     A
0098 75F001            MOV     B,#01H
009B 120000      E     LCALL   ?C?ILDIX
009E A9F0              MOV     R1,B
00A0 FA                MOV     R2,A
00A1 EF                MOV     A,R7
00A2 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 81
00A5 900003            MOV     DPTR,#03H
00A8 120000      E     LCALL   ?C?XBPOFF
00AB E0                MOVX    A,@DPTR
00AC FB                MOV     R3,A
00AD A3                INC     DPTR
00AE E0                MOVX    A,@DPTR
00AF FA                MOV     R2,A
00B0 A3                INC     DPTR
00B1 E0                MOVX    A,@DPTR
C51 COMPILER V7.50   OS_CPU_C                                                              01/12/2005 21:47:41 PAGE 10  

00B2 F9                MOV     R1,A
00B3 AE02              MOV     R6,AR2
00B5 AF01              MOV     R7,AR1
00B7 EE                MOV     A,R6
00B8 FF                MOV     R7,A
00B9 7E00              MOV     R6,#00H
00BB 850083      E     MOV     DPH,?C_XBP
00BE 850082      E     MOV     DPL,?C_XBP+01H
00C1 E0                MOVX    A,@DPTR
00C2 FB                MOV     R3,A
00C3 A3                INC     DPTR
00C4 E4                CLR     A
00C5 75F001            MOV     B,#01H
00C8 120000      E     LCALL   ?C?ILDIX
00CB A9F0              MOV     R1,B
00CD FA                MOV     R2,A
00CE EF                MOV     A,R7
00CF 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 82
00D2 850083      E     MOV     DPH,?C_XBP
00D5 850082      E     MOV     DPL,?C_XBP+01H
00D8 E0                MOVX    A,@DPTR
00D9 FB                MOV     R3,A
00DA A3                INC     DPTR
00DB E4                CLR     A
00DC 75F001            MOV     B,#01H
00DF 120000      E     LCALL   ?C?ILDIX
00E2 A9F0              MOV     R1,B
00E4 FA                MOV     R2,A
00E5 E4                CLR     A
00E6 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 83
00E9 850083      E     MOV     DPH,?C_XBP
00EC 850082      E     MOV     DPL,?C_XBP+01H
00EF E0                MOVX    A,@DPTR
00F0 FB                MOV     R3,A
00F1 A3                INC     DPTR
00F2 E4                CLR     A
00F3 75F001            MOV     B,#01H
00F6 120000      E     LCALL   ?C?ILDIX
00F9 A9F0              MOV     R1,B
00FB FA                MOV     R2,A
00FC 740A              MOV     A,#0AH
00FE 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 84
0101 850083      E     MOV     DPH,?C_XBP
0104 850082      E     MOV     DPL,?C_XBP+01H
0107 E0                MOVX    A,@DPTR
0108 FB                MOV     R3,A
0109 A3                INC     DPTR
010A E4                CLR     A
010B 75F001            MOV     B,#01H
010E 120000      E     LCALL   ?C?ILDIX
0111 A9F0              MOV     R1,B
0113 FA                MOV     R2,A
0114 740B              MOV     A,#0BH
0116 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 85
0119 850083      E     MOV     DPH,?C_XBP
011C 850082      E     MOV     DPL,?C_XBP+01H
011F E0                MOVX    A,@DPTR
0120 FB                MOV     R3,A
C51 COMPILER V7.50   OS_CPU_C                                                              01/12/2005 21:47:41 PAGE 11  

0121 A3                INC     DPTR
0122 E4                CLR     A
0123 75F001            MOV     B,#01H
0126 120000      E     LCALL   ?C?ILDIX
0129 A9F0              MOV     R1,B
012B FA                MOV     R2,A
012C E4                CLR     A
012D 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 86
0130 850083      E     MOV     DPH,?C_XBP
0133 850082      E     MOV     DPL,?C_XBP+01H
0136 E0                MOVX    A,@DPTR
0137 FB                MOV     R3,A
0138 A3                INC     DPTR
0139 E4                CLR     A
013A 75F001            MOV     B,#01H
013D 120000      E     LCALL   ?C?ILDIX
0140 A9F0              MOV     R1,B
0142 FA                MOV     R2,A
0143 E4                CLR     A
0144 120000      E     LCALL   ?C?CSTPTR
                                           ; SOURCE LINE # 90
0147 900006            MOV     DPTR,#06H
014A 120000      E     LCALL   ?C?XBPOFF
014D E0                MOVX    A,@DPTR
014E FB                MOV     R3,A
014F A3                INC     DPTR
0150 E0                MOVX    A,@DPTR
0151 FA                MOV     R2,A
0152 A3                INC     DPTR
0153 E0                MOVX    A,@DPTR
0154 F9                MOV     R1,A
0155 AF01              MOV     R7,AR1
0157 EF                MOV     A,R7
0158 54FF              ANL     A,#0FFH
015A FF                MOV     R7,A
015B 850083      E     MOV     DPH,?C_XBP
015E 850082      E     MOV     DPL,?C_XBP+01H
0161 E0                MOVX    A,@DPTR
0162 FB                MOV     R3,A
0163 A3                INC     DPTR
0164 E4                CLR     A
0165 75F001            MOV     B,#01H
0168 120000      E     LCALL   ?C?ILDIX
016B A9F0              MOV     R1,B
016D FA                MOV     R2,A
016E EF                MOV     A,R7

⌨️ 快捷键说明

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