⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ucosii.lst

📁 atmel128L
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -