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