?? ucosii.lst
字號:
(0139) ;
(0140) ; void OSCPURestoreSR (OS_CPU_SR cpu_sr)
(0141) ; Set SREG to cpu_sr
(0142) ; Return
(0143) ;********************************************************************************************************
(0144)
(0145) _OS_CPU_SR_Save::
(0146) IN R16,SREG ; Get current state of interrupts disable flag
_OS_CPU_SR_Save:
0218 B70F IN R16,0x3F
(0147) CLI ; Disable interrupts
0219 94F8 BCLR 7
(0148) RET ; Return original SREG value in R16
021A 9508 RET
(0149)
(0150)
(0151) _OS_CPU_SR_Restore::
(0152) OUT SREG,R16 ; Restore SREG
_OS_CPU_SR_Restore:
021B BF0F OUT 0x3F,R16
(0153) RET ; Return
021C 9508 RET
(0154)
(0155) ;/*$PAGE*/.
(0156) ;********************************************************************************************************
(0157) ; START HIGHEST PRIORITY TASK READY-TO-RUN
(0158) ;
(0159) ; Description : This function is called by OSStart() to start the highest priority task that was created
(0160) ; by your application before calling OSStart().
(0161) ;
(0162) ; Note(s) : 1) The (data)stack frame is assumed to look as follows:
(0163) ;
(0164) ; OSTCBHighRdy->OSTCBStkPtr --> SPL of (return) stack pointer (Low memory)
(0165) ; SPH of (return) stack pointer
(0166) ; Flags to load in status register
(0167) ; R31
(0168) ; R30
(0169) ; R27
(0170) ; .
(0171) ; .
(0172) ; R0
(0173) ; PCH
(0174) ; PCL (High memory)
(0175) ;
(0176) ; where the stack pointer points to the task start address.
(0177) ;
(0178) ;
(0179) ; 2) OSStartHighRdy() MUST:
(0180) ; a) Call OSTaskSwHook() then,
(0181) ; b) Set OSRunning to TRUE,
(0182) ; c) Switch to the highest priority task.
(0183) ;********************************************************************************************************
(0184)
(0185) _OSStartHighRdy::
(0186) CALL _OSTaskSwHook ; Invoke user defined context switch hook
_OSStartHighRdy:
021D 940E0215 CALL _OSTaskSwHook
(0187) LDS R16,_OSRunning ; Indicate that we are multitasking
021F 91000311 LDS R16,_OSRunning
(0188) INC R16 ;
0221 9503 INC R16
(0189) STS _OSRunning,R16 ;
0222 93000311 STS _OSRunning,R16
(0190)
(0191) LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
0224 91E00206 LDS R30,_OSTCBHighRdy
(0192) LDS R31,_OSTCBHighRdy+1 ; ready to run
0226 91F00207 LDS R31,_OSTCBHighRdy+1
(0193) LD R28,Z+ ; Load Y (R29:R28) pointer
0228 91C1 LD R28,Z+
(0194) LD R29,Z+ ;
0229 91D1 LD R29,Z+
(0195)
(0196) POP_SP ; Restore stack pointer
022A 9109 LD R16,Y+
022B BF0D OUT 0x3D,R16
022C 9109 LD R16,Y+
022D BF0E OUT 0x3E,R16
(0197) POP_SREG ; Restore status register
022E 9109 LD R16,Y+
022F BF0F OUT 0x3F,R16
(0198) POP_ALL ; Restore all registers
0230 9109 LD R16,Y+
0231 BF0B OUT 0x3B,R16
0232 91F9 LD R31,Y+
0233 91E9 LD R30,Y+
0234 91B9 LD R27,Y+
0235 91A9 LD R26,Y+
0236 9199 LD R25,Y+
0237 9189 LD R24,Y+
0238 9179 LD R23,Y+
0239 9169 LD R22,Y+
023A 9159 LD R21,Y+
023B 9149 LD R20,Y+
023C 9139 LD R19,Y+
023D 9129 LD R18,Y+
023E 9119 LD R17,Y+
023F 9109 LD R16,Y+
0240 90F9 LD R15,Y+
0241 90E9 LD R14,Y+
0242 90D9 LD R13,Y+
0243 90C9 LD R12,Y+
0244 90B9 LD R11,Y+
0245 90A9 LD R10,Y+
0246 9099 LD R9,Y+
0247 9089 LD R8,Y+
0248 9079 LD R7,Y+
0249 9069 LD R6,Y+
024A 9059 LD R5,Y+
024B 9049 LD R4,Y+
024C 9039 LD R3,Y+
024D 9029 LD R2,Y+
024E 9019 LD R1,Y+
024F 9009 LD R0,Y+
(0199) RET ; Start task
0250 9508 RET
(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
_OSCtxSw:
0251 920A ST R0,-Y
0252 921A ST R1,-Y
0253 922A ST R2,-Y
0254 923A ST R3,-Y
0255 924A ST R4,-Y
0256 925A ST R5,-Y
0257 926A ST R6,-Y
0258 927A ST R7,-Y
0259 928A ST R8,-Y
025A 929A ST R9,-Y
025B 92AA ST R10,-Y
025C 92BA ST R11,-Y
025D 92CA ST R12,-Y
025E 92DA ST R13,-Y
025F 92EA ST R14,-Y
0260 92FA ST R15,-Y
0261 930A ST R16,-Y
0262 931A ST R17,-Y
0263 932A ST R18,-Y
0264 933A ST R19,-Y
0265 934A ST R20,-Y
0266 935A ST R21,-Y
0267 936A ST R22,-Y
0268 937A ST R23,-Y
0269 938A ST R24,-Y
026A 939A ST R25,-Y
026B 93AA ST R26,-Y
026C 93BA ST R27,-Y
026D 93EA ST R30,-Y
026E 93FA ST R31,-Y
026F B70B IN R16,0x3B
0270 930A ST R16,-Y
(0233) PUSH_SREG
0271 B70F IN R16,0x3F
0272 930A ST R16,-Y
(0234) PUSH_SP
0273 B70E IN R16,0x3E
0274 930A ST R16,-Y
0275 B70D IN R16,0x3D
0276 930A ST R16,-Y
(0235)
(0236) LDS R30,_OSTCBCur ; Z = OSTCBCur->OSTCBStkPtr
0277 91E0020A LDS R30,_OSTCBCur
(0237) LDS R31,_OSTCBCur+1 ;
0279 91F0020B LDS R31,_OSTCBCur+1
(0238) ST Z+,R28 ; Save Y (R29:R28) pointer
027B 93C1 ST R28,Z+
(0239) ST Z+,R29 ;
027C 93D1 ST R29,Z+
(0240)
(0241) CALL _OSTaskSwHook ; Call user defined task switch hook
027D 940E0215 CALL _OSTaskSwHook
(0242)
(0243) LDS R16,_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
027F 91000315 LDS R16,_OSPrioHighRdy
(0244) STS _OSPrioCur,R16
0281 93000316 STS _OSPrioCur,R16
(0245)
(0246) LDS R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
0283 91E00206 LDS R30,_OSTCBHighRdy
(0247) LDS R31,_OSTCBHighRdy+1 ; ready to run
0285 91F00207 LDS R31,_OSTCBHighRdy+1
(0248) STS _OSTCBCur,R30 ; OSTCBCur = OSTCBHighRdy
0287 93E0020A STS _OSTCBCur,R30
(0249) STS _OSTCBCur+1,R31 ;
0289 93F0020B STS _OSTCBCur+1,R31
(0250)
(0251) LD R28,Z+ ; Restore Y pointer
028B 91C1 LD R28,Z+
(0252) LD R29,Z+ ;
028C 91D1 LD R29,Z+
(0253)
(0254) POP_SP ; Restore stack pointer
028D 9109 LD R16,Y+
028E BF0D OUT 0x3D,R16
028F 9109 LD R16,Y+
0290 BF0E OUT 0x3E,R16
(0255) POP_SREG ; Restore status register
0291 9109 LD R16,Y+
0292 BF0F OUT 0x3F,R16
(0256) POP_ALL ; Restore all registers
0293 9109 LD R16,Y+
0294 BF0B OUT 0x3B,R16
0295 91F9 LD R31,Y+
0296 91E9 LD R30,Y+
0297 91B9 LD R27,Y+
0298 91A9 LD R26,Y+
0299 9199 LD R25,Y+
029A 9189 LD R24,Y+
029B 9179 LD R23,Y+
029C 9169 LD R22,Y+
029D 9159 LD R21,Y+
029E 9149 LD R20,Y+
029F 9139 LD R19,Y+
02A0 9129 LD R18,Y+
02A1 9119 LD R17,Y+
02A2 9109 LD R16,Y+
02A3 90F9 LD R15,Y+
02A4 90E9 LD R14,Y+
02A5 90D9 LD R13,Y+
02A6 90C9 LD R12,Y+
02A7 90B9 LD R11,Y+
02A8 90A9 LD R10,Y+
02A9 9099 LD R9,Y+
02AA 9089 LD R8,Y+
02AB 9079 LD R7,Y+
02AC 9069 LD R6,Y+
02AD 9059 LD R5,Y+
02AE 9049 LD R4,Y+
02AF 9039 LD R3,Y+
02B0 9029 LD R2,Y+
02B1 9019 LD R1,Y+
02B2 9009 LD R0,Y+
(0257)
(0258) RET
02B3 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:
02B4 940E0215 CALL _OSTaskSwHook
(0302)
(0303) LDS R16,_OSPrioHighRdy ; OSPrioCur = OSPrioHighRdy
02B6 91000315 LDS R16,_OSPrioHighRdy
(0304) STS _OSPrioCur,R16 ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -