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

📄 pjhost.lst

📁 AVR megal128下的ucos_ii
💻 LST
📖 第 1 页 / 共 5 页
字号:
    03F4 926A      ST	R6,-Y
    03F5 927A      ST	R7,-Y
    03F6 928A      ST	R8,-Y
    03F7 929A      ST	R9,-Y
    03F8 92AA      ST	R10,-Y
    03F9 92BA      ST	R11,-Y
    03FA 92CA      ST	R12,-Y
    03FB 92DA      ST	R13,-Y
    03FC 92EA      ST	R14,-Y
    03FD 92FA      ST	R15,-Y
    03FE 930A      ST	R16,-Y
    03FF 931A      ST	R17,-Y
    0400 932A      ST	R18,-Y
    0401 933A      ST	R19,-Y
    0402 934A      ST	R20,-Y
    0403 935A      ST	R21,-Y
    0404 936A      ST	R22,-Y
    0405 937A      ST	R23,-Y
    0406 938A      ST	R24,-Y
    0407 939A      ST	R25,-Y
    0408 93AA      ST	R26,-Y
    0409 93BA      ST	R27,-Y
    040A 93EA      ST	R30,-Y
    040B 93FA      ST	R31,-Y
    040C 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
    040D 930A      ST	R16,-Y
    040E B70F      IN	R16,0x3F
(0233)                 PUSH_SREG
    040F 930A      ST	R16,-Y
    0410 B70E      IN	R16,0x3E
    0411 930A      ST	R16,-Y
    0412 B70D      IN	R16,0x3D
(0234)                 PUSH_SP
    0413 930A      ST	R16,-Y
(0235) 
(0236)                 LDS     R30,_OSTCBCur               ; Z = OSTCBCur->OSTCBStkPtr
    0414 91E00807  LDS	R30,OSTCBCur
(0237)                 LDS     R31,_OSTCBCur+1             ;
    0416 91F00808  LDS	R31,OSTCBCur+1
(0238)                 ST      Z+,R28                      ; Save Y (R29:R28) pointer
    0418 93C1      ST	R28,Z+
(0239)                 ST      Z+,R29                      ;
    0419 93D1      ST	R29,Z+
(0240) 
(0241)                 CALL    _OSTaskSwHook               ; Call user defined task switch hook
    041A 940E1225  CALL	_OSTaskSwHook
(0242) 
(0243)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    041C 91000913  LDS	R16,OSPrioHighRdy
(0244)                 STS     _OSPrioCur,R16
    041E 93000914  STS	OSPrioCur,R16
(0245) 
(0246)                 LDS     R30,_OSTCBHighRdy           ; Let Z point to TCB of highest priority task
    0420 91E00803  LDS	R30,OSTCBHighRdy
(0247)                 LDS     R31,_OSTCBHighRdy+1         ; ready to run
    0422 91F00804  LDS	R31,OSTCBHighRdy+1
(0248)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    0424 93E00807  STS	OSTCBCur,R30
(0249)                 STS     _OSTCBCur+1,R31             ;
    0426 93F00808  STS	OSTCBCur+1,R31
(0250) 
(0251)                 LD      R28,Z+                      ; Restore Y pointer
    0428 91C1      LD	R28,Z+
(0252)                 LD      R29,Z+                      ;
    0429 91D1      LD	R29,Z+
    042A 9109      LD	R16,Y+
    042B BF0D      OUT	0x3D,R16
    042C 9109      LD	R16,Y+
(0253) 
(0254)                 POP_SP                              ; Restore stack pointer
    042D BF0E      OUT	0x3E,R16
    042E 9109      LD	R16,Y+
(0255)                 POP_SREG                            ; Restore status register
    042F BF0F      OUT	0x3F,R16
    0430 9109      LD	R16,Y+
    0431 BF0B      OUT	0x3B,R16
    0432 91F9      LD	R31,Y+
    0433 91E9      LD	R30,Y+
    0434 91B9      LD	R27,Y+
    0435 91A9      LD	R26,Y+
    0436 9199      LD	R25,Y+
    0437 9189      LD	R24,Y+
    0438 9179      LD	R23,Y+
    0439 9169      LD	R22,Y+
    043A 9159      LD	R21,Y+
    043B 9149      LD	R20,Y+
    043C 9139      LD	R19,Y+
    043D 9129      LD	R18,Y+
    043E 9119      LD	R17,Y+
    043F 9109      LD	R16,Y+
    0440 90F9      LD	R15,Y+
    0441 90E9      LD	R14,Y+
    0442 90D9      LD	R13,Y+
    0443 90C9      LD	R12,Y+
    0444 90B9      LD	R11,Y+
    0445 90A9      LD	R10,Y+
    0446 9099      LD	R9,Y+
    0447 9089      LD	R8,Y+
    0448 9079      LD	R7,Y+
    0449 9069      LD	R6,Y+
    044A 9059      LD	R5,Y+
    044B 9049      LD	R4,Y+
    044C 9039      LD	R3,Y+
    044D 9029      LD	R2,Y+
    044E 9019      LD	R1,Y+
(0256)                 POP_ALL                             ; Restore all registers
    044F 9009      LD	R0,Y+
(0257) 
(0258)                 RET
    0450 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:
    0451 940E1225  CALL	_OSTaskSwHook
(0302) 
(0303)                 LDS     R16,_OSPrioHighRdy          ; OSPrioCur = OSPrioHighRdy
    0453 91000913  LDS	R16,OSPrioHighRdy
(0304)                 STS     _OSPrioCur,R16              ;
    0455 93000914  STS	OSPrioCur,R16
(0305) 
(0306)                 LDS     R30,_OSTCBHighRdy           ; Z = OSTCBHighRdy->OSTCBStkPtr
    0457 91E00803  LDS	R30,OSTCBHighRdy
(0307)                 LDS     R31,_OSTCBHighRdy+1         ;
    0459 91F00804  LDS	R31,OSTCBHighRdy+1
(0308)                 STS     _OSTCBCur,R30               ; OSTCBCur = OSTCBHighRdy
    045B 93E00807  STS	OSTCBCur,R30
(0309)                 STS     _OSTCBCur+1,R31             ;
    045D 93F00808  STS	OSTCBCur+1,R31
(0310) 
(0311)                 LD      R28,Z+                      ; Restore Y pointer
    045F 91C1      LD	R28,Z+
(0312)                 LD      R29,Z+                      ;
    0460 91D1      LD	R29,Z+
    0461 9109      LD	R16,Y+
    0462 BF0D      OUT	0x3D,R16
    0463 9109      LD	R16,Y+
(0313) 
(0314)                 POP_SP                              ; Restore stack pointer
    0464 BF0E      OUT	0x3E,R16
    0465 9109      LD	R16,Y+
(0315)                 POP_SREG                            ; Restore status register
    0466 BF0F      OUT	0x3F,R16
    0467 9109      LD	R16,Y+
    0468 BF0B      OUT	0x3B,R16
    0469 91F9      LD	R31,Y+
    046A 91E9      LD	R30,Y+
    046B 91B9      LD	R27,Y+
    046C 91A9      LD	R26,Y+
    046D 9199      LD	R25,Y+
    046E 9189      LD	R24,Y+
    046F 9179      LD	R23,Y+
    0470 9169      LD	R22,Y+
    0471 9159      LD	R21,Y+
    0472 9149      LD	R20,Y+
    0473 9139      LD	R19,Y+
    0474 9129      LD	R18,Y+
    0475 9119      LD	R17,Y+
    0476 9109      LD	R16,Y+
    0477 90F9      LD	R15,Y+
    0478 90E9      LD	R14,Y+
    0479 90D9      LD	R13,Y+
    047A 90C9      LD	R12,Y+
    047B 90B9      LD	R11,Y+
    047C 90A9      LD	R10,Y+
    047D 9099      LD	R9,Y+
    047E 9089      LD	R8,Y+
    047F 9079      LD	R7,Y+
    0480 9069      LD	R6,Y+
    0481 9059      LD	R5,Y+
    0482 9049      LD	R4,Y+
    0483 9039      LD	R3,Y+
    0484 9029      LD	R2,Y+
    0485 9019      LD	R1,Y+
(0316)                 POP_ALL                             ; Restore all registers
    0486 9009      LD	R0,Y+
(0317)                 RET
    0487 9508      RET
_OSTickISR:
    0488 920A      ST	R0,-Y
    0489 921A      ST	R1,-Y
    048A 922A      ST	R2,-Y
    048B 923A      ST	R3,-Y
    048C 924A      ST	R4,-Y
    048D 925A      ST	R5,-Y
    048E 926A      ST	R6,-Y
    048F 927A      ST	R7,-Y
    0490 928A      ST	R8,-Y
    0491 929A      ST	R9,-Y
    0492 92AA      ST	R10,-Y
    0493 92BA      ST	R11,-Y
    0494 92CA      ST	R12,-Y
    0495 92DA      ST	R13,-Y
    0496 92EA      ST	R14,-Y
    0497 92FA      ST	R15,-Y
    0498 930A      ST	R16,-Y
    0499 931A      ST	R17,-Y
    049A 932A      ST	R18,-Y
    049B 933A      ST	R19,-Y
    049C 934A      ST	R20,-Y
    049D 935A      ST	R21,-Y
    049E 936A      ST	R22,-Y
    049F 937A      ST	R23,-Y
    04A0 938A      ST	R24,-Y
    04A1 939A      ST	R25,-Y
    04A2 93AA      ST	R26,-Y
    04A3 93BA      ST	R27,-Y
    04A4 93EA      ST	R30,-Y
    04A5 93FA      ST	R31,-Y
    04A6 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
(0340) ;                      Use the POP_SREG macro to restore the SREG register
(0341) ;                      Use the POP_ALL macro to restore the remaining registers
(0342) ;               Return (DO NOT use a RETI instruction);
(0343) ;********************************************************************************************************
(0344) 
(0345) _OSTickISR::
(0346)                 PUSH_ALL                            ; Save all registers and status register
    04A7 930A      ST	R16,-Y
(0347)                 IN      R16,SREG                    ; Save the SREG but with interrupts enabled
    04A8 B70F      IN	R16,0x3F
(0348)                 SBR     R16,BIT07                    
    04A9 6800      ORI	R16,0x80
(0349)                 ST      -Y,R16
    04AA 930A      ST	R16,-Y
    04AB B70E      IN	R16,0x3E
    04AC 930A      ST	R16,-Y
    04AD B70D      IN	R16,0x3D
(0350)                 PUSH_SP                             ; Save the task's hardware stack pointer onto task's stack
    04AE 930A      ST	R16,-Y
(0351) 
(0352)                 LDS     R16,_OSIntNesting           ; Notify uC/OS-II of ISR
    04AF 91000917  LDS	R16,OSIntNesting
(0353)                 INC     R16                         ;

⌨️ 快捷键说明

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