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 + -
显示快捷键?