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

📄 os_cpu_a.lst

📁 uc/os在c167上的移植代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
0074 9810          151                   MOV     R1,[R0+]                    ; Restore DPP3
0076 F6F106FE      152                   MOV     DPP3,R1                     ;
007A 9810          153                   MOV     R1,[R0+]                    ; Restore CP
007C F6F110FE      154                   MOV     CP,R1                       ;
0080 CC00          155                   NOP
0082 98F0          156                   MOV     R15,[R0+]                   ; Restore R15
0084 98E0          157                   MOV     R14,[R0+]                   ; Restore R14
0086 98D0          158                   MOV     R13,[R0+]                   ; Restore R13
0088 98C0          159                   MOV     R12,[R0+]                   ; Restore R12
008A 98B0          160                   MOV     R11,[R0+]                   ; Restore R11
008C 98A0          161                   MOV     R10,[R0+]                   ; Restore R10
008E 9890          162                   MOV     R9,[R0+]                    ; Restore R9
0090 9880          163                   MOV     R8,[R0+]                    ; Restore R8
0092 9870          164                   MOV     R7,[R0+]                    ; Restore R7
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc.                       Date: Dec  5 2000  Time: 10:02:43  Page:   4
os_cpu_a

 LOC CODE        LINE   SOURCELINE

0094 9860          165                   MOV     R6,[R0+]                    ; Restore R6
0096 9850          166                   MOV     R5,[R0+]                    ; Restore R5
0098 9840          167                   MOV     R4,[R0+]                    ; Restore R4
009A 9830          168                   MOV     R3,[R0+]                    ; Restore R3
009C 9820          169                   MOV     R2,[R0+]                    ; Restore R2
009E 9810          170                   MOV     R1,[R0+]                    ; Restore R1; Restore context.
                   171   
00A0 BF88          172                   BSET    IEN                         ; Enable interrupts
00A2 DB00          173                   RETS                                ; Execute Task
                   174   
                   175   _OSStartHighRdy ENDP
                   176   UCOS_C16X       ENDS
                   177   
                   178   
                   179   ;********************************************************************************************************
                   180   ;                                 PERFORM A CONTEXT SWITCH (From task level)
                   181   ;                                            void OSCtxSw(void)
                   182   ;
                   183   ; Note(s): 1) Upon entry,
                   184   ;             OSTCBCur     points to the OS_TCB of the task to suspend
                   185   ;             OSTCBHighRdy points to the OS_TCB of the task to resume
                   186   ;
                   187   ;          2) The system stack frame of the task to suspend looks as follows:
                   188   ;                                                SYSTEM STACK AREA
                   189   ;                                     SP -> +00  OFFSET  of task to suspend    (Low memory)
                   190   ;                                           +02  SEGMENT of task to suspend
                   191   ;                                           +04  PSW     of task to suspend    (High memory)
                   192   ;
                   193   ;          3) The user stack frame of the task to resume looks as follows:
                   194   ;
                   195   ;                                                TASK STACK AREA                              (High Memory)
                   196   ;                                           +12  TASK DATA PARAMETER PAGE pointer of task
                   197   ;                                           +10  TASK DATA PARAMETER OFFSET pointer of task
                   198   ;                                           +0E  SEGMENT of task code address
                   199   ;                                           +0C  OFFSET  of task code address
                   200   ;                                           +0A  USER STACK OFFSET POINTER (R0) of task
                   201   ;                                           +08  USER STACK PAGE POINTER (DPP1) of task
                   202   ;                                           +06  PSW flags of task
                   203   ;                                           +04  OFFSET  of task return address
                   204   ;                                            02  SEGMENT of task return address
                   205   ;             OSTCBHighRdy->OSTCBStkPtr -->   0
                   206   ;                                           -02  R[1 ..15] General Purpose registers of task
                   207   ;                                           -20  CP     Context pointer of task
                   208   ;                                           -22  DPP3   Data page pointer 3 of task
                   209   ;                                           -24  DPP2   Data page pointer 2 of task
                   210   ;                                           -26  DPP0   Data page pointer 0 of task
                   211   ;                                           -28  MDC    Multiply/Divide Control of task
                   212   ;                                           -2A  MDH    Multiply/Divide High register of task
                   213   ;                                           -2C  MDL    Multiply/Divide Low register of task  (Low Memory)
                   214   ;********************************************************************************************************
                   215   
                   216   UCOS_C16X       SECTION CODE
                   217   _OSCtxSw        PROC    TASK  UCOS_OSCtxSw  INTNO=50h
                   218   
00A4 BE88          219                   BCLR    IEN                         ; Disable interrupts
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc.                       Date: Dec  5 2000  Time: 10:02:43  Page:   5
os_cpu_a

 LOC CODE        LINE   SOURCELINE

                   220   
                   221                   ; Total execution time : xx states.
00A6 8810          222                   MOV     [-R0],R1                    ; Save R1
00A8 8820          223                   MOV     [-R0],R2                    ; Save R2
00AA 8830          224                   MOV     [-R0],R3                    ; Save R3
00AC 8840          225                   MOV     [-R0],R4                    ; Save R4
00AE 8850          226                   MOV     [-R0],R5                    ; Save R5
00B0 8860          227                   MOV     [-R0],R6                    ; Save R6
00B2 8870          228                   MOV     [-R0],R7                    ; Save R7
00B4 8880          229                   MOV     [-R0],R8                    ; Save R8
00B6 8890          230                   MOV     [-R0],R9                    ; Save R9
00B8 88A0          231                   MOV     [-R0],R10                   ; Save R10
00BA 88B0          232                   MOV     [-R0],R11                   ; Save R11
00BC 88C0          233                   MOV     [-R0],R12                   ; Save R12
00BE 88D0          234                   MOV     [-R0],R13                   ; Save R13
00C0 88E0          235                   MOV     [-R0],R14                   ; Save R14
00C2 88F0          236                   MOV     [-R0],R15                   ; Save R15
                   237   
00C4 F2F410FE      238                   MOV     R4,CP                       ; Get Context Pointer (CP)
00C8 8840          239                   MOV     [-R0],R4                    ; Put it on the user stack
00CA F2F406FE      240                   MOV     R4,DPP3                     ; Get Data Page Pointer 3 (DPP3)
00CE 8840          241                   MOV     [-R0],R4                    ; Put it on the user stack
00D0 F2F404FE      242                   MOV     R4,DPP2                     ; Get Data Page Pointer 2 (DPP2)
00D4 8840          243                   MOV     [-R0],R4                    ; Put it on the user stack
00D6 F2F400FE      244                   MOV     R4,DPP0                     ; Get Data Page Pointer 0 (DPP0)
00DA 8840          245                   MOV     [-R0],R4                    ; Put it on the user stack
00DC F2F40EFF      246                   MOV     R4,MDC                      ; Get Multiply/Divide Control (MDC)
00E0 8840          247                   MOV     [-R0],R4                    ; Put it on the user stack
00E2 F2F40CFE      248                   MOV     R4,MDH                      ; Get Multiply/Divide High (MDH)
00E6 8840          249                   MOV     [-R0],R4                    ; Put it on the user stack
00E8 F2F40EFE      250                   MOV     R4,MDL                      ; Get Multiply/Divide Low (MDL)
00EC 8840          251                   MOV     [-R0],R4                    ; Put it on the user stack; Save Register Context
                   252                                                       
00EE D7500000  R   253                   EXTP    #PAG _OSTCBCur,#02h         ; pStack = OSTCBCur->OSTCBStkPtr
00F2 F2F80000 2R   254                   MOV     R8,POF (_OSTCBCur)          ; pStack = R9:R8
00F6 F2F90000 1R   255                   MOV     R9,POF (_OSTCBCur+2)
00FA DC59          256                   EXTP    R9,#02h
00FC 9868     2    257                   MOV     R6,[R8+]
00FE A878     1    258                   MOV     R7,[R8]
                   259                                                       
0100 F2F512FE      260                   MOV     R5,SP                       ; Get Task Return Address
0104 D4350400      261                   MOV     R3,[R5+#04h]                ; Get "current" PSW  =(SP + 2)
0108 D4150200      262                   MOV     R1,[R5+#02h]                ; Get "current" CSP  =(SP + 1)
010C A825          263                   MOV     R2,[R5]                     ; Get "current" IP   =(SP + 0)
010E F2F402FE      264                   MOV     R4,DPP1                     ; Get "current" DPP1
                   265   
                   266                                                       
0112 DC57          267                   EXTP    R7,#02h                     ; Save this task's interrupt context on user stack
0114 C4160200 2    268                   MOV     [R6+#02H],R1                ;     Task CSP
0118 C4260400 1    269                   MOV     [R6+#04H],R2                ;     Task IP
011C DC67          270                   EXTP    R7,#03h
011E C4360600 3    271                   MOV     [R6+#06H],R3                ;     Task STATUS
0122 C4460800 2    272                   MOV     [R6+#08H],R4                ;     Task DPP1
0126 C4060A00 1    273                   MOV     [R6+#0AH],R0                ;     Task R0
                   274   
C166/ST10 assembler v6.0 r2 SN00082920-083 (c) 1998 TASKING, Inc.                       Date: Dec  5 2000  Time: 10:02:43  Page:   6
os_cpu_a

 LOC CODE        LINE   SOURCELINE

012A E6F90000  R   275                   MOV     R9,#SOF _ADDR01             ; Call user defined task switch hook
012E 8890          276                   MOV     [-R0],R9
0130 E6F90000  R   277                   MOV     R9,#SEG _ADDR01
0134 8890          278                   MOV     [-R0],R9
0136 FA000000  R   279                   JMPS   SEG( _OSTaskSwHook),SOF( _OSTaskSwHook)
013A               280   _ADDR01:
013A D7500000  R   281                   EXTP    #PAG _OSTCBHighRdy,#02h     ; Get the stack pointer of the task to resume
013E F2F80000 2R   282                   MOV     R8,POF _OSTCBHighRdy        ; OSTCBCur = OSTCBHighRdy
0142 F2F90000 1R   283                   MOV     R9,POF (_OSTCBHighRdy+2)
0146 D7500000  R   284                   EXTP    #PAG _OSTCBCur,#02h
014A F6F80000 2R   285                   MOV     POF (_OSTCBCur),R8
014E F6F90000 1R   286                   MOV     POF (_OSTCBCur+2),R9
                   287                                                       
0152 D7400000  R   288                   EXTP    #PAG _OSPrioHighRdy,#01h    ;  OSPrioCur = OSPrioHighRdy;
0156 F3F20000 1R   289                   MOVB    RL1,POF _OSPrioHighRdy
015A D7400000  R   290                   EXTP    #PAG _OSPrioCur,#01h
015E F7F20000 1R   291                   MOVB    POF _OSPrioCur,RL1
                   292                                                       
0162 DC59          293                   EXTP    R9,#02h                     ; R7:R6 = OSTCBHighRdy->OSTCBStkPtr
0164 9868     2    294                   MOV     R6,[R8+]
0166 A878     1    295                   MOV     R7,[R8]
                   296                                                       
0168 DC57          297                   EXTP    R7,#02h                     ; Load this task's interrupt context on the system stac
                         k
016A D4160200 2    298                   MOV     R1,[R6+#02h]                ;     Get Task CSP
016E D4260400 1    299                   MOV     R2,[R6+#04h]                ;     Get Task IP
0172 DC67          300                   EXTP    R7,#03h

⌨️ 快捷键说明

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