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

📄 ucos.lst

📁 易于atmage128和ucos的手动机器人控制程序。
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0138) ;                     Return original value of SREG
(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:
    028E B70F      IN	R16,P3F
(0147)                 CLI                                 ; Disable interrupts
    028F 94F8      BCLR	7
(0148)                 RET                                 ; Return original SREG value in R16
    0290 9508      RET
(0149) 
(0150) 
(0151) _OS_CPU_SR_Restore::
(0152)                 OUT     SREG,R16                    ; Restore SREG
_OS_CPU_SR_Restore:
    0291 BF0F      OUT	P3F,R16
(0153)                 RET                                 ; Return
    0292 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:
    0293 940E04BA  CALL	_OSTaskSwHook
(0187)                 LDS     R16,_OSRunning              ; Indicate that we are multitasking
    0295 91000BB0  LDS	R16,_OSRunning
(0188)                 INC     R16                         ;
    0297 9503      INC	R16
(0189)                 STS     _OSRunning,R16              ;
    0298 93000BB0  STS	R16,_OSRunning
(0190) 
(0191)                 LDS     R30,_OSTCBHighRdy           ; Let Z point to TCB of highest priority task
    029A 91E00AA5  LDS	R30,_OSTCBHighRdy
(0192)                 LDS     R31,_OSTCBHighRdy+1         ; ready to run
    029C 91F00AA6  LDS	R31,_OSTCBHighRdy+1
(0193)                 LD      R28,Z+                      ; Load Y (R29:R28) pointer
    029E 91C1      LD	R28,Z+
(0194)                 LD      R29,Z+                      ;
    029F 91D1      LD	R29,Z+
    02A0 9109      LD	R16,Y+
    02A1 BF0D      OUT	P3D,R16
    02A2 9109      LD	R16,Y+
    02A3 BF0E      OUT	P3E,R16
    02A4 9109      LD	R16,Y+
    02A5 BF0F      OUT	P3F,R16
    02A6 9109      LD	R16,Y+
    02A7 BF0B      OUT	P3B,R16
    02A8 91F9      LD	R31,Y+
    02A9 91E9      LD	R30,Y+
    02AA 91B9      LD	R27,Y+
    02AB 91A9      LD	R26,Y+
    02AC 9199      LD	R25,Y+
    02AD 9189      LD	R24,Y+
    02AE 9179      LD	R23,Y+
    02AF 9169      LD	R22,Y+
    02B0 9159      LD	R21,Y+
    02B1 9149      LD	R20,Y+
    02B2 9139      LD	R19,Y+
    02B3 9129      LD	R18,Y+
    02B4 9119      LD	R17,Y+
    02B5 9109      LD	R16,Y+
    02B6 90F9      LD	R15,Y+
    02B7 90E9      LD	R14,Y+
    02B8 90D9      LD	R13,Y+
    02B9 90C9      LD	R12,Y+
    02BA 90B9      LD	R11,Y+
    02BB 90A9      LD	R10,Y+
    02BC 9099      LD	R9,Y+
    02BD 9089      LD	R8,Y+
    02BE 9079      LD	R7,Y+
    02BF 9069      LD	R6,Y+
    02C0 9059      LD	R5,Y+
    02C1 9049      LD	R4,Y+
    02C2 9039      LD	R3,Y+
    02C3 9029      LD	R2,Y+
    02C4 9019      LD	R1,Y+
    02C5 9009      LD	R0,Y+
(0195) 
(0196)                 POP_SP                              ; Restore stack pointer
(0197)                 POP_SREG                            ; Restore status register
(0198)                 POP_ALL                             ; Restore all registers
(0199)                 RET                                 ; Start task
    02C6 9508      RET
_OSCtxSw:
    02C7 920A      ST	R0,-Y
    02C8 921A      ST	R1,-Y
    02C9 922A      ST	R2,-Y
    02CA 923A      ST	R3,-Y
    02CB 924A      ST	R4,-Y
    02CC 925A      ST	R5,-Y
    02CD 926A      ST	R6,-Y
    02CE 927A      ST	R7,-Y
    02CF 928A      ST	R8,-Y
    02D0 929A      ST	R9,-Y
    02D1 92AA      ST	R10,-Y
    02D2 92BA      ST	R11,-Y
    02D3 92CA      ST	R12,-Y
    02D4 92DA      ST	R13,-Y
    02D5 92EA      ST	R14,-Y
    02D6 92FA      ST	R15,-Y
    02D7 930A      ST	R16,-Y
    02D8 931A      ST	R17,-Y
    02D9 932A      ST	R18,-Y
    02DA 933A      ST	R19,-Y
    02DB 934A      ST	R20,-Y
    02DC 935A      ST	R21,-Y
    02DD 936A      ST	R22,-Y
    02DE 937A      ST	R23,-Y
    02DF 938A      ST	R24,-Y
    02E0 939A      ST	R25,-Y
    02E1 93AA      ST	R26,-Y
    02E2 93BA      ST	R27,-Y
    02E3 93EA      ST	R30,-Y
    02E4 93FA      ST	R31,-Y
    02E5 B70B      IN	R16,P3B
    02E6 930A      ST	R16,-Y
    02E7 B70F      IN	R16,P3F
    02E8 930A      ST	R16,-Y
    02E9 B70E      IN	R16,P3E
    02EA 930A      ST	R16,-Y
    02EB B70D      IN	R16,P3D
    02EC 930A      ST	R16,-Y
(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
(0233)                 PUSH_SREG
(0234)                 PUSH_SP
(0235) 
(0236)                 LDS     R30,_OSTCBCur               ; Z = OSTCBCur->OSTCBStkPtr
    02ED 91E00AA9  LDS	R30,_OSTCBCur
(0237)                 LDS     R31,_OSTCBCur+1             ;
    02EF 91F00AAA  LDS	R31,_OSTCBCur+1
(0238)                 ST      Z+,R28                      ; Save Y (R29:R28) pointer
    02F1 93C1      ST	R28,Z+
(0239)                 ST      Z+,R29                      ;
    02F2 93D1      ST	R29,Z+
(0240) 
(0241)                 CALL    _OSTaskSwHook               ; Call user defined task switch hook
    02F3 940E04BA  CALL	_OSTaskSwHook
(0242) 
(0243)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    02F5 91000BB4  LDS	R16,_OSPrioHighRdy
(0244)                 STS     _OSPrioCur,R16
    02F7 93000BB5  STS	R16,_OSPrioCur
(0245) 
(0246)                 LDS     R30,_OSTCBHighRdy           ; Let Z point to TCB of highest priority task
    02F9 91E00AA5  LDS	R30,_OSTCBHighRdy
(0247)                 LDS     R31,_OSTCBHighRdy+1         ; ready to run
    02FB 91F00AA6  LDS	R31,_OSTCBHighRdy+1
(0248)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    02FD 93E00AA9  STS	R30,_OSTCBCur
(0249)                 STS     _OSTCBCur+1,R31             ;
    02FF 93F00AAA  STS	R31,_OSTCBCur+1
(0250) 
(0251)                 LD      R28,Z+                      ; Restore Y pointer
    0301 91C1      LD	R28,Z+
(0252)                 LD      R29,Z+                      ;
    0302 91D1      LD	R29,Z+
    0303 9109      LD	R16,Y+
    0304 BF0D      OUT	P3D,R16
    0305 9109      LD	R16,Y+
    0306 BF0E      OUT	P3E,R16
    0307 9109      LD	R16,Y+
    0308 BF0F      OUT	P3F,R16
    0309 9109      LD	R16,Y+
    030A BF0B      OUT	P3B,R16
    030B 91F9      LD	R31,Y+
    030C 91E9      LD	R30,Y+
    030D 91B9      LD	R27,Y+
    030E 91A9      LD	R26,Y+
    030F 9199      LD	R25,Y+
    0310 9189      LD	R24,Y+
    0311 9179      LD	R23,Y+
    0312 9169      LD	R22,Y+
    0313 9159      LD	R21,Y+
    0314 9149      LD	R20,Y+
    0315 9139      LD	R19,Y+
    0316 9129      LD	R18,Y+
    0317 9119      LD	R17,Y+
    0318 9109      LD	R16,Y+
    0319 90F9      LD	R15,Y+
    031A 90E9      LD	R14,Y+
    031B 90D9      LD	R13,Y+
    031C 90C9      LD	R12,Y+
    031D 90B9      LD	R11,Y+
    031E 90A9      LD	R10,Y+
    031F 9099      LD	R9,Y+
    0320 9089      LD	R8,Y+
    0321 9079      LD	R7,Y+
    0322 9069      LD	R6,Y+
    0323 9059      LD	R5,Y+
    0324 9049      LD	R4,Y+
    0325 9039      LD	R3,Y+
    0326 9029      LD	R2,Y+
    0327 9019      LD	R1,Y+
    0328 9009      LD	R0,Y+
(0253) 
(0254)                 POP_SP                              ; Restore stack pointer
(0255)                 POP_SREG                            ; Restore status register
(0256)                 POP_ALL                             ; Restore all registers
(0257) 
(0258)                 RET
    0329 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:
    032A 940E04BA  CALL	_OSTaskSwHook
(0302) 
(0303)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    032C 91000BB4  LDS	R16,_OSPrioHighRdy
(0304)                 STS     _OSPrioCur,R16              ;
    032E 93000BB5  STS	R16,_OSPrioCur
(0305) 
(0306)                 LDS     R30,_OSTCBHighRdy           ; Z = OSTCBHighRdy->OSTCBStkPtr
    0330 91E00AA5  LDS	R30,_OSTCBHighRdy
(0307)                 LDS     R31,_OSTCBHighRdy+1         ;
    0332 91F00AA6  LDS	R31,_OSTCBHighRdy+1
(0308)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    0334 93E00AA9  STS	R30,_OSTCBCur
(0309)                 STS     _OSTCBCur+1,R31             ;
    0336 93F00AAA  STS	R31,_OSTCBCur+1
(0310) 
(0311)                 LD      R28,Z+                      ; Restore Y pointer
    0338 91C1      LD	R28,Z+
(0312)                 LD      R29,Z+                      ;
    0339 91D1      LD	R29,Z+
    033A 9109      LD	R16,Y+
    033B BF0D      OUT	P3D,R16
    033C 9109      LD	R16,Y+
    033D BF0E      OUT	P3E,R16
    033E 9109      LD	R16,Y+
    033F BF0F      OUT	P3F,R16
    0340 9109      LD	R16,Y+
    0341 BF0B      OUT	P3B,R16
    0342 91F9      LD	R31,Y+
    0343 91E9      LD	R30,Y+
    0344 91B9      LD	R27,Y+
    0345 91A9      LD	R26,Y+
    0346 9199      LD	R25,Y+
    0347 9189      LD	R24,Y+
    0348 9179      LD	R23,Y+
    0349 9169      LD	R22,Y+
    034A 9159      LD	R21,Y+
    034B 9149      LD	R20,Y+
    034C 9139      LD	R19,Y+
    034D 9129      LD	R18,Y+
    034E 9119      LD	R17,Y+
    034F 9109      LD	R16,Y+
    0350 90F9      LD	R15,Y+
    0351 90E9      LD	R14,Y+
    0352 90D9      LD	R13,Y+
    0353 90C9      LD	R12,Y+
    0354 90B9      LD	R11,Y+
    0355 90A9      LD	R10,Y+
    0356 9099      LD	R9,Y+
    0357 9089      LD	R8,Y+
    0358 9079      LD	R7,Y+
    0359 9069      LD	R6,Y+
    035A 9059      LD	R5,Y+
    035B 9049      LD	R4,Y+
    035C 9039      LD	R3,Y+
    035D 9029      LD	R2,Y+
    035E 9019      LD	R1,Y+
    035F 9009      LD	R0,Y+
(0313) 
(0314)                 POP_SP                              ; Restore stack pointer
(0315)                 POP_SREG                            ; Restore status register
(0316)                 POP_ALL                             ; Restore all registers
(0317)                 RET
    0360 9508      RET
_OSTickISR:
    0361 920A      ST	R0,-Y
    0362 921A      ST	R1,-Y
    0363 922A      ST	R2,-Y
    0364 923A      ST	R3,-Y
    0365 924A      ST	R4,-Y

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -