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

📄 os_cpu_c.ls1

📁 uC/OS操作系统在51平台的移植代码
💻 LS1
📖 第 1 页 / 共 4 页
字号:
                     172     ; *****************************************************************************************
                             ****************
                     173     ; */
A51 MACRO ASSEMBLER  OS_CPU_C                                                             07/03/2002 08:51:27 PAGE     4

                     174     ; 
                     175     ; /* The stack variable points to the start pointer in hardware stack and is defined in OS_
                             CPU_A */
                     176     ; extern idata unsigned char Stack[1];
                     177     ; 
                     178     
----                 179             RSEG  ?PR?OS_CPU_C
0000                 180     Com0008:
0000                 181     L?0009:
                     182             USING   0
0000                 183     L?0010:
0000 120000   F      184             LCALL   ?C?CSTPTR
0003                 185     L?0011:
0003 850083   F      186             MOV     DPH,?C_XBP
0006 850082   F      187             MOV     DPL,?C_XBP+01H
0009 74FF            188             MOV     A,#0FFH
000B F5F0            189             MOV     B,A
000D 020000   F      190             LJMP    ?C?PILDXDATA
0010                 191     L?0012:
                     192             USING   0
0010 850083   F      193             MOV     DPH,?C_XBP
0013 850082   F      194             MOV     DPL,?C_XBP+01H
0016 A3              195             INC     DPTR
0017 74FF            196             MOV     A,#0FFH
0019 75F0FE          197             MOV     B,#0FEH
001C 120000   F      198             LCALL   ?C?IILDX
001F 900003          199             MOV     DPTR,#03H
0022 120000   F      200             LCALL   ?C?XBPOFF
0025 120000   F      201             LCALL   ?C?PLDXDATA
0028 AE02            202             MOV     R6,AR2
002A AF01            203             MOV     R7,AR1
002C                 204     L?0013:
002C 850083   F      205             MOV     DPH,?C_XBP
002F 850082   F      206             MOV     DPL,?C_XBP+01H
0032 22              207             RET     
0033                 208     L?0014:
                     209             USING   0
0033                 210     L?0015:
0033 90FFFD          211             MOV     DPTR,#0FFFDH
0036 120000   F      212             LCALL   ?C?ADDXBP
0039 020000   F      213             LJMP    ?C?PSTXDATA
003C                 214     L?0016:
                     215             USING   0
003C 120000   F      216             LCALL   ?C?PLDXDATA
003F EE              217             MOV     A,R6
0040 8FF0            218             MOV     B,R7
0042 020000   F      219             LJMP    ?C?ISTPTR
                     220     ; END OF Com0008
                     221     
                     222     ; OS_STK *OSTaskStkInit (void (*task)(void *pd) KCREENTRANT, void * vd, OS_STK *ptos, INT16
                             U opt) KCREENTRANT
                     223     
----                 224             RSEG  ?PR?_?OSTaskStkInit?OS_CPU_C
0000                 225     _?OSTaskStkInit:
                     226             USING   0
                     227                             ; SOURCE LINE # 62
0000 120000   F      228             LCALL   L?0014
0003 90FFFD          229             MOV     DPTR,#0FFFDH
0006 120000   F      230             LCALL   ?C?ADDXBP
                     231     ; {   
                     232     ;       INT8U * stk;
                     233     ;     opt    = opt;                           /* 'opt' is not used, prevent warning        
                                           */
                     234                             ; SOURCE LINE # 65
0009 90000C          235             MOV     DPTR,#0CH
000C 120000   F      236             LCALL   ?C?XBPOFF
A51 MACRO ASSEMBLER  OS_CPU_C                                                             07/03/2002 08:51:27 PAGE     5

000F E0              237             MOVX    A,@DPTR
0010 FE              238             MOV     R6,A
0011 A3              239             INC     DPTR
0012 E0              240             MOVX    A,@DPTR
0013 FF              241             MOV     R7,A
0014 90000C          242             MOV     DPTR,#0CH
0017 120000   F      243             LCALL   ?C?XBPOFF
001A EE              244             MOV     A,R6
001B F0              245             MOVX    @DPTR,A
001C A3              246             INC     DPTR
001D EF              247             MOV     A,R7
001E F0              248             MOVX    @DPTR,A
                     249     ;     stk    = (INT8U *) ptos;                /* Load stack pointer                        
                                           */
                     250                             ; SOURCE LINE # 66
001F 900009          251             MOV     DPTR,#09H
0022 120000   F      252             LCALL   ?C?XBPOFF
0025 120000   F      253             LCALL   ?C?PLDXDATA
0028 120000   F      254             LCALL   L?0013
002B 120000   F      255             LCALL   ?C?PSTXDATA
                     256     ; 
                     257     ;       stk                             -= sizeof(INT16U);      /* The value should be load
                             ed to PC    */
                     258                             ; SOURCE LINE # 68
                     259     ;       *(INT16U*)stk    = (INT16U) task;       /* next time when this task is running */
                     260                             ; SOURCE LINE # 69
002E 120000   F      261             LCALL   L?0012
0031 120000   F      262             LCALL   L?0016
                     263     ; 
                     264     ;       stk                             -= sizeof(INT16U);      /* The value should be load
                             ed to PC    */
                     265                             ; SOURCE LINE # 71
                     266     ;       *(INT16U*)stk    = (INT16U) task;       /* next time when this task is running */
                     267                             ; SOURCE LINE # 72
0034 120000   F      268             LCALL   L?0012
0037 120000   F      269             LCALL   L?0016
                     270     ; 
                     271     ; /* Following is the registers pushed into hardware stack */
                     272     ;       *--stk                   = 'A';                 /* ACC */
                     273                             ; SOURCE LINE # 75
003A 120000   F      274             LCALL   L?0011
003D 7441            275             MOV     A,#041H
                     276     ;       *--stk                   = 'B';                 /* B   */
                     277                             ; SOURCE LINE # 76
003F 120000   F      278             LCALL   L?0009
0042 7442            279             MOV     A,#042H
                     280     ;       *--stk                   = 'L';                 /* DPL */
                     281                             ; SOURCE LINE # 77
0044 120000   F      282             LCALL   L?0009
0047 744C            283             MOV     A,#04CH
                     284     ;       *--stk                   = 'H';                 /* DPH */
                     285                             ; SOURCE LINE # 78
0049 120000   F      286             LCALL   L?0010
004C 7448            287             MOV     A,#048H
                     288     ;       *--stk                   = PSW;                                 /* PSW */
                     289                             ; SOURCE LINE # 79
004E 120000   F      290             LCALL   L?0010
0051 E5D0            291             MOV     A,PSW
                     292     ;       *--stk                   = 0;                   /* R0  */
                     293                             ; SOURCE LINE # 80
0053 120000   F      294             LCALL   L?0010
0056 E4              295             CLR     A
0057 120000   F      296             LCALL   ?C?CSTPTR
                     297     ; 
                     298     ;       stk                             -= sizeof(void *);      /* Keil C uses R1,R2,R3 to 
                             pass the */
A51 MACRO ASSEMBLER  OS_CPU_C                                                             07/03/2002 08:51:27 PAGE     6

                     299                             ; SOURCE LINE # 82
005A 120000   F      300             LCALL   L?0013
005D A3              301             INC     DPTR
005E 74FF            302             MOV     A,#0FFH
0060 75F0FD          303             MOV     B,#0FDH
0063 120000   F      304             LCALL   ?C?IILDX
                     305     ;       *(void**)stk     = vd;                  /* arguments of functions.          */
                     306                             ; SOURCE LINE # 83
0066 900006          307             MOV     DPTR,#06H
0069 120000   F      308             LCALL   ?C?XBPOFF
006C 120000   F      309             LCALL   ?C?PLDXDATA
006F C003            310             PUSH    AR3
0071 C002            311             PUSH    AR2
0073 C001            312             PUSH    AR1
0075 120000   F      313             LCALL   L?0013
0078 120000   F      314             LCALL   ?C?PLDXDATA
007B 120000   F      315             LCALL   ?C?PSTPTR
                     316     ; 
                     317     ;       *--stk                   = 4;                   /* R4  */
                     318                             ; SOURCE LINE # 85
007E 120000   F      319             LCALL   L?0011
0081 7404            320             MOV     A,#04H
                     321     ;       *--stk                   = 5;                   /* R5  */
                     322                             ; SOURCE LINE # 86
0083 120000   F      323             LCALL   L?0010
0086 7405            324             MOV     A,#05H
                     325     ;       *--stk                   = 6;                   /* R6  */
                     326                             ; SOURCE LINE # 87
0088 120000   F      327             LCALL   L?0010
008B 7406            328             MOV     A,#06H
                     329     ;       *--stk                   = 7;                   /* R7  */
                     330                             ; SOURCE LINE # 88
008D 120000   F      331             LCALL   L?0010
0090 7407            332             MOV     A,#07H
                     333     ; 
                     334     ;     *--stk           = 0x80;                /* IE, EA is enabled  */
                     335                             ; SOURCE LINE # 90
0092 120000   F      336             LCALL   L?0010
0095 7480            337             MOV     A,#080H
0097 120000   F      338             LCALL   ?C?CSTPTR
                     339     ; /*
                     340     ;     Next is calculating the hardware stack pointer.
                     341     ; */
                     342     ;     *--stk                     = (INT8U) Stack-1    /* Initial value when main was called
                                 */
                     343                             ; SOURCE LINE # 94
009A 7400     F      344             MOV     A,#LOW (Stack)
009C 2411            345             ADD     A,#011H
009E FF              346             MOV     R7,A
009F 120000   F      347             LCALL   L?0011
00A2 EF              348             MOV     A,R7
00A3 120000   F      349             LCALL   ?C?CSTPTR
                     350     ;                          +1                   /* IE */
                     351     ;                          +8                   /* R0-R7, eight registers was saved      */
                     352     ;                        +5                   /* PSW, ACC, B, DPH, DPL, five registers */
                     353     ;                        +sizeof(INT16U)      /* The PC value to be loaded             */
                     354     ;                        +sizeof(INT16U)      /* The PC value to be loaded             */
                     355     ;                                          ;
                     356     ; 

⌨️ 快捷键说明

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