test.lst

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

LST
1,505
字号
    015D 92AA      ST	R10,-Y
    015E 92BA      ST	R11,-Y
    015F 92CA      ST	R12,-Y
    0160 92DA      ST	R13,-Y
    0161 92EA      ST	R14,-Y
    0162 92FA      ST	R15,-Y
    0163 930A      ST	R16,-Y
    0164 931A      ST	R17,-Y
    0165 932A      ST	R18,-Y
    0166 933A      ST	R19,-Y
    0167 934A      ST	R20,-Y
    0168 935A      ST	R21,-Y
    0169 936A      ST	R22,-Y
    016A 937A      ST	R23,-Y
    016B 938A      ST	R24,-Y
    016C 939A      ST	R25,-Y
    016D 93AA      ST	R26,-Y
    016E 93BA      ST	R27,-Y
    016F 93EA      ST	R30,-Y
    0170 93FA      ST	R31,-Y
    0171 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
    0172 930A      ST	R16,-Y
    0173 B70F      IN	R16,0x3F
(0233)                 PUSH_SREG
    0174 930A      ST	R16,-Y
    0175 B70E      IN	R16,0x3E
    0176 930A      ST	R16,-Y
    0177 B70D      IN	R16,0x3D
(0234)                 PUSH_SP
    0178 930A      ST	R16,-Y
(0235) 
(0236)                 LDS     R30,_OSTCBCur               ; Z = OSTCBCur->OSTCBStkPtr
    0179 91E0059F  LDS	R30,_OSTCBCur
(0237)                 LDS     R31,_OSTCBCur+1             ;
    017B 91F005A0  LDS	R31,_OSTCBCur+1
(0238)                 ST      Z+,R28                      ; Save Y (R29:R28) pointer
    017D 93C1      ST	R28,Z+
(0239)                 ST      Z+,R29                      ;
    017E 93D1      ST	R29,Z+
(0240) 
(0241)                 CALL    _OSTaskSwHook               ; Call user defined task switch hook
    017F 940E0344  CALL	_OSTaskSwHook
(0242) 
(0243)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    0181 910006AA  LDS	R16,_OSPrioHighRdy
(0244)                 STS     _OSPrioCur,R16
    0183 930006AB  STS	_OSPrioCur,R16
(0245) 
(0246)                 LDS     R30,_OSTCBHighRdy           ; Let Z point to TCB of highest priority task
    0185 91E0059B  LDS	R30,_OSTCBHighRdy
(0247)                 LDS     R31,_OSTCBHighRdy+1         ; ready to run
    0187 91F0059C  LDS	R31,_OSTCBHighRdy+1
(0248)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    0189 93E0059F  STS	_OSTCBCur,R30
(0249)                 STS     _OSTCBCur+1,R31             ;
    018B 93F005A0  STS	_OSTCBCur+1,R31
(0250) 
(0251)                 LD      R28,Z+                      ; Restore Y pointer
    018D 91C1      LD	R28,Z+
(0252)                 LD      R29,Z+                      ;
    018E 91D1      LD	R29,Z+
    018F 9109      LD	R16,Y+
    0190 BF0D      OUT	0x3D,R16
    0191 9109      LD	R16,Y+
(0253) 
(0254)                 POP_SP                              ; Restore stack pointer
    0192 BF0E      OUT	0x3E,R16
    0193 9109      LD	R16,Y+
(0255)                 POP_SREG                            ; Restore status register
    0194 BF0F      OUT	0x3F,R16
    0195 9109      LD	R16,Y+
    0196 BF0B      OUT	0x3B,R16
    0197 91F9      LD	R31,Y+
    0198 91E9      LD	R30,Y+
    0199 91B9      LD	R27,Y+
    019A 91A9      LD	R26,Y+
    019B 9199      LD	R25,Y+
    019C 9189      LD	R24,Y+
    019D 9179      LD	R23,Y+
    019E 9169      LD	R22,Y+
    019F 9159      LD	R21,Y+
    01A0 9149      LD	R20,Y+
    01A1 9139      LD	R19,Y+
    01A2 9129      LD	R18,Y+
    01A3 9119      LD	R17,Y+
    01A4 9109      LD	R16,Y+
    01A5 90F9      LD	R15,Y+
    01A6 90E9      LD	R14,Y+
    01A7 90D9      LD	R13,Y+
    01A8 90C9      LD	R12,Y+
    01A9 90B9      LD	R11,Y+
    01AA 90A9      LD	R10,Y+
    01AB 9099      LD	R9,Y+
    01AC 9089      LD	R8,Y+
    01AD 9079      LD	R7,Y+
    01AE 9069      LD	R6,Y+
    01AF 9059      LD	R5,Y+
    01B0 9049      LD	R4,Y+
    01B1 9039      LD	R3,Y+
    01B2 9029      LD	R2,Y+
    01B3 9019      LD	R1,Y+
(0256)                 POP_ALL                             ; Restore all registers
    01B4 9009      LD	R0,Y+
(0257) 
(0258)                 RET
    01B5 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:
    01B6 940E0344  CALL	_OSTaskSwHook
(0302) 
(0303)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    01B8 910006AA  LDS	R16,_OSPrioHighRdy
(0304)                 STS     _OSPrioCur,R16              ;
    01BA 930006AB  STS	_OSPrioCur,R16
(0305) 
(0306)                 LDS     R30,_OSTCBHighRdy           ; Z = OSTCBHighRdy->OSTCBStkPtr
    01BC 91E0059B  LDS	R30,_OSTCBHighRdy
(0307)                 LDS     R31,_OSTCBHighRdy+1         ;
    01BE 91F0059C  LDS	R31,_OSTCBHighRdy+1
(0308)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    01C0 93E0059F  STS	_OSTCBCur,R30
(0309)                 STS     _OSTCBCur+1,R31             ;
    01C2 93F005A0  STS	_OSTCBCur+1,R31
(0310) 
(0311)                 LD      R28,Z+                      ; Restore Y pointer
    01C4 91C1      LD	R28,Z+
(0312)                 LD      R29,Z+                      ;
    01C5 91D1      LD	R29,Z+
    01C6 9109      LD	R16,Y+
    01C7 BF0D      OUT	0x3D,R16
    01C8 9109      LD	R16,Y+
(0313) 
(0314)                 POP_SP                              ; Restore stack pointer
    01C9 BF0E      OUT	0x3E,R16
    01CA 9109      LD	R16,Y+
(0315)                 POP_SREG                            ; Restore status register
    01CB BF0F      OUT	0x3F,R16
    01CC 9109      LD	R16,Y+
    01CD BF0B      OUT	0x3B,R16
    01CE 91F9      LD	R31,Y+
    01CF 91E9      LD	R30,Y+
    01D0 91B9      LD	R27,Y+
    01D1 91A9      LD	R26,Y+
    01D2 9199      LD	R25,Y+
    01D3 9189      LD	R24,Y+
    01D4 9179      LD	R23,Y+
    01D5 9169      LD	R22,Y+
    01D6 9159      LD	R21,Y+
    01D7 9149      LD	R20,Y+
    01D8 9139      LD	R19,Y+
    01D9 9129      LD	R18,Y+
    01DA 9119      LD	R17,Y+
    01DB 9109      LD	R16,Y+
    01DC 90F9      LD	R15,Y+
    01DD 90E9      LD	R14,Y+
    01DE 90D9      LD	R13,Y+
    01DF 90C9      LD	R12,Y+
    01E0 90B9      LD	R11,Y+
    01E1 90A9      LD	R10,Y+
    01E2 9099      LD	R9,Y+
    01E3 9089      LD	R8,Y+
    01E4 9079      LD	R7,Y+
    01E5 9069      LD	R6,Y+
    01E6 9059      LD	R5,Y+
    01E7 9049      LD	R4,Y+
    01E8 9039      LD	R3,Y+
    01E9 9029      LD	R2,Y+
    01EA 9019      LD	R1,Y+
(0316)                 POP_ALL                             ; Restore all registers
    01EB 9009      LD	R0,Y+
(0317)                 RET
    01EC 9508      RET
_OSTickISR:
    01ED 920A      ST	R0,-Y
    01EE 921A      ST	R1,-Y
    01EF 922A      ST	R2,-Y
    01F0 923A      ST	R3,-Y
    01F1 924A      ST	R4,-Y
    01F2 925A      ST	R5,-Y
    01F3 926A      ST	R6,-Y
    01F4 927A      ST	R7,-Y
    01F5 928A      ST	R8,-Y
    01F6 929A      ST	R9,-Y
    01F7 92AA      ST	R10,-Y
    01F8 92BA      ST	R11,-Y
    01F9 92CA      ST	R12,-Y
    01FA 92DA      ST	R13,-Y
    01FB 92EA      ST	R14,-Y
    01FC 92FA      ST	R15,-Y
    01FD 930A      ST	R16,-Y
    01FE 931A      ST	R17,-Y
    01FF 932A      ST	R18,-Y
    0200 933A      ST	R19,-Y
    0201 934A      ST	R20,-Y
    0202 935A      ST	R21,-Y
    0203 936A      ST	R22,-Y
    0204 937A      ST	R23,-Y
    0205 938A      ST	R24,-Y
    0206 939A      ST	R25,-Y
    0207 93AA      ST	R26,-Y
    0208 93BA      ST	R27,-Y
    0209 93EA      ST	R30,-Y
    020A 93FA      ST	R31,-Y
    020B 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 + -
显示快捷键?