test.lst

来自「将本站的UCOSFORAVR128V276版本升级到了280版」· LST 代码 · 共 1,505 行 · 第 1/5 页

LST
1,505
字号
    0161 92AA      ST	R10,-Y
    0162 92BA      ST	R11,-Y
    0163 92CA      ST	R12,-Y
    0164 92DA      ST	R13,-Y
    0165 92EA      ST	R14,-Y
    0166 92FA      ST	R15,-Y
    0167 930A      ST	R16,-Y
    0168 931A      ST	R17,-Y
    0169 932A      ST	R18,-Y
    016A 933A      ST	R19,-Y
    016B 934A      ST	R20,-Y
    016C 935A      ST	R21,-Y
    016D 936A      ST	R22,-Y
    016E 937A      ST	R23,-Y
    016F 938A      ST	R24,-Y
    0170 939A      ST	R25,-Y
    0171 93AA      ST	R26,-Y
    0172 93BA      ST	R27,-Y
    0173 93EA      ST	R30,-Y
    0174 93FA      ST	R31,-Y
    0175 B70B      IN	R16,0x3B
(0200) 
(0201) ;/*$PAGE*/.
(0202) ;********************************************************************************************************
(0203) ;                                       TASK LEVEL CONTEXT SWITCH
(0204) ;
(0205) ; Description : This function is called when a task makes a higher priority task ready-to-run.
(0206) ;
(0207) ; Note(s)     : 1) Upon entry,
(0208) ;                  OSTCBCur     points to the OS_TCB of the task to suspend
(0209) ;                  OSTCBHighRdy points to the OS_TCB of the task to resume
(0210) ;
(0211) ;               2) The stack frame of the task to suspend looks as follows:
(0212) ;
(0213) ;                                       SP+0 --> LSB of task code address
(0214) ;                                         +1     MSB of task code address                (High memory)
(0215) ;
(0216) ;               3) The saved context of the task to resume looks as follows:
(0217) ;
(0218) ;                  OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer           (Low memory)
(0219) ;                                                SPH of (return) stack pointer
(0220) ;                                                Flags to load in status register
(0221) ;                                                R31
(0222) ;                                                R30
(0223) ;                                                R27
(0224) ;                                                .
(0225) ;                                                .
(0226) ;                                                R0
(0227) ;                                                PCH
(0228) ;                                                PCL                                     (High memory)
(0229) ;********************************************************************************************************
(0230) 
(0231) _OSCtxSw::
(0232)                 PUSH_ALL                            ; Save current task's context
    0176 930A      ST	R16,-Y
    0177 B70F      IN	R16,0x3F
(0233)                 PUSH_SREG
    0178 930A      ST	R16,-Y
    0179 B70E      IN	R16,0x3E
    017A 930A      ST	R16,-Y
    017B B70D      IN	R16,0x3D
(0234)                 PUSH_SP
    017C 930A      ST	R16,-Y
(0235) 
(0236)                 LDS     R30,_OSTCBCur               ; Z = OSTCBCur->OSTCBStkPtr
    017D 91E0060E  LDS	R30,_OSTCBCur
(0237)                 LDS     R31,_OSTCBCur+1             ;
    017F 91F0060F  LDS	R31,_OSTCBCur+1
(0238)                 ST      Z+,R28                      ; Save Y (R29:R28) pointer
    0181 93C1      ST	R28,Z+
(0239)                 ST      Z+,R29                      ;
    0182 93D1      ST	R29,Z+
(0240) 
(0241)                 CALL    _OSTaskSwHook               ; Call user defined task switch hook
    0183 940E0348  CALL	_OSTaskSwHook
(0242) 
(0243)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    0185 91000719  LDS	R16,_OSPrioHighRdy
(0244)                 STS     _OSPrioCur,R16
    0187 9300071A  STS	_OSPrioCur,R16
(0245) 
(0246)                 LDS     R30,_OSTCBHighRdy           ; Let Z point to TCB of highest priority task
    0189 91E0060A  LDS	R30,_OSTCBHighRdy
(0247)                 LDS     R31,_OSTCBHighRdy+1         ; ready to run
    018B 91F0060B  LDS	R31,_OSTCBHighRdy+1
(0248)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    018D 93E0060E  STS	_OSTCBCur,R30
(0249)                 STS     _OSTCBCur+1,R31             ;
    018F 93F0060F  STS	_OSTCBCur+1,R31
(0250) 
(0251)                 LD      R28,Z+                      ; Restore Y pointer
    0191 91C1      LD	R28,Z+
(0252)                 LD      R29,Z+                      ;
    0192 91D1      LD	R29,Z+
    0193 9109      LD	R16,Y+
    0194 BF0D      OUT	0x3D,R16
    0195 9109      LD	R16,Y+
(0253) 
(0254)                 POP_SP                              ; Restore stack pointer
    0196 BF0E      OUT	0x3E,R16
    0197 9109      LD	R16,Y+
(0255)                 POP_SREG                            ; Restore status register
    0198 BF0F      OUT	0x3F,R16
    0199 9109      LD	R16,Y+
    019A BF0B      OUT	0x3B,R16
    019B 91F9      LD	R31,Y+
    019C 91E9      LD	R30,Y+
    019D 91B9      LD	R27,Y+
    019E 91A9      LD	R26,Y+
    019F 9199      LD	R25,Y+
    01A0 9189      LD	R24,Y+
    01A1 9179      LD	R23,Y+
    01A2 9169      LD	R22,Y+
    01A3 9159      LD	R21,Y+
    01A4 9149      LD	R20,Y+
    01A5 9139      LD	R19,Y+
    01A6 9129      LD	R18,Y+
    01A7 9119      LD	R17,Y+
    01A8 9109      LD	R16,Y+
    01A9 90F9      LD	R15,Y+
    01AA 90E9      LD	R14,Y+
    01AB 90D9      LD	R13,Y+
    01AC 90C9      LD	R12,Y+
    01AD 90B9      LD	R11,Y+
    01AE 90A9      LD	R10,Y+
    01AF 9099      LD	R9,Y+
    01B0 9089      LD	R8,Y+
    01B1 9079      LD	R7,Y+
    01B2 9069      LD	R6,Y+
    01B3 9059      LD	R5,Y+
    01B4 9049      LD	R4,Y+
    01B5 9039      LD	R3,Y+
    01B6 9029      LD	R2,Y+
    01B7 9019      LD	R1,Y+
(0256)                 POP_ALL                             ; Restore all registers
    01B8 9009      LD	R0,Y+
(0257) 
(0258)                 RET
    01B9 9508      RET
(0259) 
(0260) ;/*$PAGE*/.
(0261) ;*********************************************************************************************************
(0262) ;                                INTERRUPT LEVEL CONTEXT SWITCH
(0263) ;
(0264) ; Description : This function is called by OSIntExit() to perform a context switch to a task that has
(0265) ;               been made ready-to-run by an ISR.
(0266) ;
(0267) ; Note(s)     : 1) Upon entry,
(0268) ;                  OSTCBCur     points to the OS_TCB of the task to suspend
(0269) ;                  OSTCBHighRdy points to the OS_TCB of the task to resume
(0270) ;
(0271) ;               2) The stack frame of the task to suspend looks as follows:
(0272) ;
(0273) ;                  OSTCBCur->OSTCBStkPtr ------> SPL of (return) stack pointer           (Low memory)
(0274) ;                                                SPH of (return) stack pointer
(0275) ;                                                Flags to load in status register
(0276) ;                                                R31
(0277) ;                                                R30
(0278) ;                                                R27
(0279) ;                                                .
(0280) ;                                                .
(0281) ;                                                R0
(0282) ;                                                PCH
(0283) ;                                                PCL                                     (High memory)
(0284) ;
(0285) ;               3) The saved context of the task to resume looks as follows:
(0286) ;
(0287) ;                  OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer           (Low memory)
(0288) ;                                                SPH of (return) stack pointer
(0289) ;                                                Flags to load in status register
(0290) ;                                                R31
(0291) ;                                                R30
(0292) ;                                                R27
(0293) ;                                                .
(0294) ;                                                .
(0295) ;                                                R0
(0296) ;                                                PCH
(0297) ;                                                PCL                                     (High memory)
(0298) ;*********************************************************************************************************
(0299) 
(0300) _OSIntCtxSw::
(0301)                 CALL    _OSTaskSwHook               ; Call user defined task switch hook
_OSIntCtxSw:
    01BA 940E0348  CALL	_OSTaskSwHook
(0302) 
(0303)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    01BC 91000719  LDS	R16,_OSPrioHighRdy
(0304)                 STS     _OSPrioCur,R16              ;
    01BE 9300071A  STS	_OSPrioCur,R16
(0305) 
(0306)                 LDS     R30,_OSTCBHighRdy           ; Z = OSTCBHighRdy->OSTCBStkPtr
    01C0 91E0060A  LDS	R30,_OSTCBHighRdy
(0307)                 LDS     R31,_OSTCBHighRdy+1         ;
    01C2 91F0060B  LDS	R31,_OSTCBHighRdy+1
(0308)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    01C4 93E0060E  STS	_OSTCBCur,R30
(0309)                 STS     _OSTCBCur+1,R31             ;
    01C6 93F0060F  STS	_OSTCBCur+1,R31
(0310) 
(0311)                 LD      R28,Z+                      ; Restore Y pointer
    01C8 91C1      LD	R28,Z+
(0312)                 LD      R29,Z+                      ;
    01C9 91D1      LD	R29,Z+
    01CA 9109      LD	R16,Y+
    01CB BF0D      OUT	0x3D,R16
    01CC 9109      LD	R16,Y+
(0313) 
(0314)                 POP_SP                              ; Restore stack pointer
    01CD BF0E      OUT	0x3E,R16
    01CE 9109      LD	R16,Y+
(0315)                 POP_SREG                            ; Restore status register
    01CF BF0F      OUT	0x3F,R16
    01D0 9109      LD	R16,Y+
    01D1 BF0B      OUT	0x3B,R16
    01D2 91F9      LD	R31,Y+
    01D3 91E9      LD	R30,Y+
    01D4 91B9      LD	R27,Y+
    01D5 91A9      LD	R26,Y+
    01D6 9199      LD	R25,Y+
    01D7 9189      LD	R24,Y+
    01D8 9179      LD	R23,Y+
    01D9 9169      LD	R22,Y+
    01DA 9159      LD	R21,Y+
    01DB 9149      LD	R20,Y+
    01DC 9139      LD	R19,Y+
    01DD 9129      LD	R18,Y+
    01DE 9119      LD	R17,Y+
    01DF 9109      LD	R16,Y+
    01E0 90F9      LD	R15,Y+
    01E1 90E9      LD	R14,Y+
    01E2 90D9      LD	R13,Y+
    01E3 90C9      LD	R12,Y+
    01E4 90B9      LD	R11,Y+
    01E5 90A9      LD	R10,Y+
    01E6 9099      LD	R9,Y+
    01E7 9089      LD	R8,Y+
    01E8 9079      LD	R7,Y+
    01E9 9069      LD	R6,Y+
    01EA 9059      LD	R5,Y+
    01EB 9049      LD	R4,Y+
    01EC 9039      LD	R3,Y+
    01ED 9029      LD	R2,Y+
    01EE 9019      LD	R1,Y+
(0316)                 POP_ALL                             ; Restore all registers
    01EF 9009      LD	R0,Y+
(0317)                 RET
    01F0 9508      RET
_OSTickISR:
    01F1 920A      ST	R0,-Y
    01F2 921A      ST	R1,-Y
    01F3 922A      ST	R2,-Y
    01F4 923A      ST	R3,-Y
    01F5 924A      ST	R4,-Y
    01F6 925A      ST	R5,-Y
    01F7 926A      ST	R6,-Y
    01F8 927A      ST	R7,-Y
    01F9 928A      ST	R8,-Y
    01FA 929A      ST	R9,-Y
    01FB 92AA      ST	R10,-Y
    01FC 92BA      ST	R11,-Y
    01FD 92CA      ST	R12,-Y
    01FE 92DA      ST	R13,-Y
    01FF 92EA      ST	R14,-Y
    0200 92FA      ST	R15,-Y
    0201 930A      ST	R16,-Y
    0202 931A      ST	R17,-Y
    0203 932A      ST	R18,-Y
    0204 933A      ST	R19,-Y
    0205 934A      ST	R20,-Y
    0206 935A      ST	R21,-Y
    0207 936A      ST	R22,-Y
    0208 937A      ST	R23,-Y
    0209 938A      ST	R24,-Y
    020A 939A      ST	R25,-Y
    020B 93AA      ST	R26,-Y
    020C 93BA      ST	R27,-Y
    020D 93EA      ST	R30,-Y
    020E 93FA      ST	R31,-Y
    020F B70B      IN	R16,0x3B
(0318) 
(0319) ;/*$PAGE*/.
(0320) ;********************************************************************************************************
(0321) ;                                           SYSTEM TICK ISR
(0322) ;
(0323) ; Description : This function is the ISR used to notify uC/OS-II that a system tick has occurred.
(0324) ;
(0325) ;               The following C-like pseudo-code describe the operation being performed in the code below.
(0326) ;
(0327) ;               Save all registers on the current task's stack:
(0328) ;                      Use the PUSH_ALL macro
(0329) ;                      Get the SREG, set Bit #7 and save onto the task's stack using -Y addressing
(0330) ;                      Use the PUSH_SP macro to save the task's hardware stack pointer onto the current task's stack
(0331) ;               OSIntNesting++;
(0332) ;               if (OSIntNesting == 1) {
(0333) ;                  OSTCBCur->OSTCBStkPtr = SP
(0334) ;               }
(0335) ;               Clear the interrupt;                  Not needed for the timer we used.
(0336) ;               OSTimeTick();                         Notify uC/OS-II that a tick has occured
(0337) ;               OSIntExit();                          Notify uC/OS-II about end of ISR
(0338) ;               Restore all registers that were save on the current task's stack:
(0339) ;                      Use the POP_SP macro to restore the task's hardware stack pointer

⌨️ 快捷键说明

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