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

📄 ucosii.lst

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0436 9100014A  LDS	R16,_OSPrioHighRdy
(0214) 		STS     _OSPrioCur,R16
    0438 9300014B  STS	R16,_OSPrioCur
(0215) 	
(0216) 		LDS     R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
    043A 91E0013F  LDS	R30,_OSTCBHighRdy
(0217) 		LDS     R31,_OSTCBHighRdy+1	; ready to run
    043C 91F00140  LDS	R31,_OSTCBHighRdy+1
(0218) 		STS     _OSTCBCur,R30		; OSTCBCur = OSTCBHighRdy
    043E 93E00143  STS	R30,_OSTCBCur
(0219) 		STS     _OSTCBCur+1,R31 	;
    0440 93F00144  STS	R31,_OSTCBCur+1
(0220) 
(0221) 		LD      R28,Z+		; Restore Y pointer
    0442 91C1      LD	R28,Z+
(0222) 		LD      R29,Z+		;
    0443 91D1      LD	R29,Z+
    0444 9109      LD	R16,Y+
    0445 BF0D      OUT	P3D,R16
    0446 9109      LD	R16,Y+
    0447 BF0E      OUT	P3E,R16
    0448 9109      LD	R16,Y+
    0449 BF0F      OUT	P3F,R16
    044A 91F9      LD	R31,Y+
    044B 91E9      LD	R30,Y+
    044C 91B9      LD	R27,Y+
    044D 91A9      LD	R26,Y+
    044E 9199      LD	R25,Y+
    044F 9189      LD	R24,Y+
    0450 9179      LD	R23,Y+
    0451 9169      LD	R22,Y+
    0452 9159      LD	R21,Y+
    0453 9149      LD	R20,Y+
    0454 9139      LD	R19,Y+
    0455 9129      LD	R18,Y+
    0456 9119      LD	R17,Y+
    0457 9109      LD	R16,Y+
    0458 90F9      LD	R15,Y+
    0459 90E9      LD	R14,Y+
    045A 90D9      LD	R13,Y+
    045B 90C9      LD	R12,Y+
    045C 90B9      LD	R11,Y+
    045D 90A9      LD	R10,Y+
    045E 9099      LD	R9,Y+
    045F 9089      LD	R8,Y+
    0460 9079      LD	R7,Y+
    0461 9069      LD	R6,Y+
    0462 9059      LD	R5,Y+
    0463 9049      LD	R4,Y+
    0464 9039      LD	R3,Y+
    0465 9029      LD	R2,Y+
    0466 9019      LD	R1,Y+
    0467 9009      LD	R0,Y+
(0223) 
(0224) 		POPSP				; restore stack pointer
(0225) 		POPSREG				; restore SREG
(0226) 		POPRS				; restore registers
(0227) 		RET
    0468 9508      RET
(0228) 
(0229) 
(0230) ;*******************************************************************************
(0231) ;               INTERRUPT LEVEL CONTEXT SWITCH
(0232) ;
(0233) ; Description : This function is called by OSIntExit() to perform a context
(0234) ; switch to a task that has been made ready-to-run by an ISR.
(0235) ;
(0236) ; Note(s):
(0237) ;	1) Upon entry,
(0238) ;		OSTCBCur     points to the OS_TCB of the task to suspend
(0239) ;		OSTCBHighRdy points to the OS_TCB of the task to resume
(0240) ;
(0241) ;	2) The stack frame of the task to suspend looks as follows:
(0242) ;
(0243) ;		SP	+0 --> LSB of return address of OSIntCtxSw()   (Low memory)
(0244) ;			+1     MSB of return address of OSIntCtxSw()
(0245) ;			+2     LSB of return address of OSIntExit()
(0246) ;			+3     MSB of return address of OSIntExit()
(0247) ;			+4     LSB of task code address
(0248) ;			+5     MSB of task code address		(High memory)
(0249) ;
(0250) ;	3) The saved context of the task to resume looks as follows:
(0251) ;
(0252) ;		OSTCBHighRdy->OSTCBStkPtr --> 	LSB of (return) stack pointer (Low mem)
(0253) ;										MSB of (return) stack pointer
(0254) ;										Flags to load in status register
(0255) ;										R31
(0256) ;										R30
(0257) ;										R7
(0258) ;										.
(0259) ;										.
(0260) ;										.
(0261) ;										R0		(High memory)
(0262) ;*******************************************************************************
(0263) 
(0264) _OSIntCtxSw::
(0265) 		IN      R30,SPL				; Z = SP
_OSIntCtxSw:
    0469 B7ED      IN	R30,P3D
(0266) 		IN      R31,SPH
    046A B7FE      IN	R31,P3E
(0267) 	;	ADIW    R30,4	; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
(0268) 		ADIW    R30,5				; Adjust Z to point to task return address
    046B 9635      ADIW	R30,5
(0269) 		ST      -Y,R31				; Save SP
    046C 93FA      ST	R31,-Y
(0270) 		ST      -Y,R30				;
    046D 93EA      ST	R30,-Y
(0271) 	
(0272) 		LDS     R30,_OSTCBCur		; Z = OSTCBCur->OSTCBStkPtr
    046E 91E00143  LDS	R30,_OSTCBCur
(0273) 		LDS     R31,_OSTCBCur+1		;
    0470 91F00144  LDS	R31,_OSTCBCur+1
(0274) 		ST      Z+,R28				; Save Y pointer
    0472 93C1      ST	R28,Z+
(0275) 		ST      Z+,R29				;
    0473 93D1      ST	R29,Z+
(0276) 
(0277) 		LDS     R16,_OSPrioHighRdy	; OSPrioCur = OSPrioHighRdy
    0474 9100014A  LDS	R16,_OSPrioHighRdy
(0278) 		STS     _OSPrioCur,R16	;
    0476 9300014B  STS	R16,_OSPrioCur
(0279) 
(0280) 		LDS     R30,_OSTCBHighRdy	; Z = OSTCBHighRdy->OSTCBStkPtr
    0478 91E0013F  LDS	R30,_OSTCBHighRdy
(0281) 		LDS     R31,_OSTCBHighRdy+1	;
    047A 91F00140  LDS	R31,_OSTCBHighRdy+1
(0282) 		STS     _OSTCBCur,R30		; OSTCBCur = OSTCBHighRdy
    047C 93E00143  STS	R30,_OSTCBCur
(0283) 		STS     _OSTCBCur+1,R31		;
    047E 93F00144  STS	R31,_OSTCBCur+1
(0284) 
(0285) 		LD      R28,Z+				; Restore Y pointer
    0480 91C1      LD	R28,Z+
(0286) 		LD      R29,Z+				;
    0481 91D1      LD	R29,Z+
    0482 9109      LD	R16,Y+
    0483 BF0D      OUT	P3D,R16
    0484 9109      LD	R16,Y+
    0485 BF0E      OUT	P3E,R16
    0486 9109      LD	R16,Y+
    0487 BF0F      OUT	P3F,R16
    0488 91F9      LD	R31,Y+
    0489 91E9      LD	R30,Y+
    048A 91B9      LD	R27,Y+
    048B 91A9      LD	R26,Y+
    048C 9199      LD	R25,Y+
    048D 9189      LD	R24,Y+
    048E 9179      LD	R23,Y+
    048F 9169      LD	R22,Y+
    0490 9159      LD	R21,Y+
    0491 9149      LD	R20,Y+
    0492 9139      LD	R19,Y+
    0493 9129      LD	R18,Y+
    0494 9119      LD	R17,Y+
    0495 9109      LD	R16,Y+
    0496 90F9      LD	R15,Y+
    0497 90E9      LD	R14,Y+
    0498 90D9      LD	R13,Y+
    0499 90C9      LD	R12,Y+
    049A 90B9      LD	R11,Y+
    049B 90A9      LD	R10,Y+
    049C 9099      LD	R9,Y+
    049D 9089      LD	R8,Y+
    049E 9079      LD	R7,Y+
    049F 9069      LD	R6,Y+
    04A0 9059      LD	R5,Y+
    04A1 9049      LD	R4,Y+
    04A2 9039      LD	R3,Y+
    04A3 9029      LD	R2,Y+
    04A4 9019      LD	R1,Y+
    04A5 9009      LD	R0,Y+
(0287) 		POPSP						; restore stack pointer
(0288) 		POPSREG						; restore SREG
(0289) 		POPRS						; restore registers
(0290) 		RET
    04A6 9508      RET
(0291) 
(0292) ;******************************************************************************
(0293) ;                          SYSTEM TICK ISR
(0294) ;
(0295) ; Description: This function is the ISR used to notify uC/OS-II that a system
(0296) ; tick has occurred.
(0297) ;
(0298) ;
(0299) ;*******************************************************************************
(0300) ; 
(0301) _OSTickISR::    
(0302)         NOP
_OSTickISR:
    04A7 0000      NOP
    04A8 920A      ST	R0,-Y
    04A9 921A      ST	R1,-Y
    04AA 922A      ST	R2,-Y
    04AB 923A      ST	R3,-Y
    04AC 924A      ST	R4,-Y
    04AD 925A      ST	R5,-Y
    04AE 926A      ST	R6,-Y
    04AF 927A      ST	R7,-Y
    04B0 928A      ST	R8,-Y
    04B1 929A      ST	R9,-Y
    04B2 92AA      ST	R10,-Y
    04B3 92BA      ST	R11,-Y
    04B4 92CA      ST	R12,-Y
    04B5 92DA      ST	R13,-Y
    04B6 92EA      ST	R14,-Y
    04B7 92FA      ST	R15,-Y
    04B8 930A      ST	R16,-Y
    04B9 931A      ST	R17,-Y
    04BA 932A      ST	R18,-Y
    04BB 933A      ST	R19,-Y
    04BC 934A      ST	R20,-Y
    04BD 935A      ST	R21,-Y
    04BE 936A      ST	R22,-Y
    04BF 937A      ST	R23,-Y
    04C0 938A      ST	R24,-Y
    04C1 939A      ST	R25,-Y
    04C2 93AA      ST	R26,-Y
    04C3 93BA      ST	R27,-Y
    04C4 93EA      ST	R30,-Y
    04C5 93FA      ST	R31,-Y
(0303) 		PUSHRS				; save all registers
(0304) 		IN	R16, SREG
    04C6 B70F      IN	R16,P3F
(0305) 		SBR	R16, 0x80		; bei Aufruf dieser ISR geloeschtes I-Flag setzen 
    04C7 6800      ORI	R16,0x80
(0306) 		ST	-Y, R16
    04C8 930A      ST	R16,-Y
(0307) 
(0308) 		; TimerCounter aufrischen
(0309) 		LDI     R16,6; Reload TC_2, 2ms bei 8MHz
    04C9 E006      LDI	R16,6
(0310) 		OUT     TCNT2,R16
    04CA BD04      OUT	P24,R16
(0311) 
(0312) 		LDS     R16,_OSIntNesting           ; Notify uC/OS-II of ISR
    04CB 9100014D  LDS	R16,_OSIntNesting
(0313) 		INC     R16                         ;
    04CD 9503      INC	R16
(0314) 		STS     _OSIntNesting,R16           ;
    04CE 9300014D  STS	R16,_OSIntNesting
(0315) 
(0316) 		CALL    _OSTimeTick		; Call uC/OS-II's tick updating function
    04D0 940E0375  CALL	_OSTimeTick
(0317) 		; bearbeitet die tasktimer, wenn 0 --> deren Prio in Aufruftab stellen
(0318) 
(0319) 		CALL    _OSIntExit		; Notify uC/OS-II about end of ISR
    04D2 940E01BD  CALL	_OSIntExit
    04D4 9109      LD	R16,Y+
    04D5 BF0F      OUT	P3F,R16
    04D6 91F9      LD	R31,Y+
    04D7 91E9      LD	R30,Y+
    04D8 91B9      LD	R27,Y+
    04D9 91A9      LD	R26,Y+
    04DA 9199      LD	R25,Y+
    04DB 9189      LD	R24,Y+
    04DC 9179      LD	R23,Y+
    04DD 9169      LD	R22,Y+
    04DE 9159      LD	R21,Y+
    04DF 9149      LD	R20,Y+
    04E0 9139      LD	R19,Y+
    04E1 9129      LD	R18,Y+
    04E2 9119      LD	R17,Y+
    04E3 9109      LD	R16,Y+
    04E4 90F9      LD	R15,Y+
    04E5 90E9      LD	R14,Y+
    04E6 90D9      LD	R13,Y+
    04E7 90C9      LD	R12,Y+
    04E8 90B9      LD	R11,Y+
    04E9 90A9      LD	R10,Y+
    04EA 9099      LD	R9,Y+
    04EB 9089      LD	R8,Y+
    04EC 9079      LD	R7,Y+
    04ED 9069      LD	R6,Y+
    04EE 9059      LD	R5,Y+
    04EF 9049      LD	R4,Y+
    04F0 9039      LD	R3,Y+
    04F1 9029      LD	R2,Y+
    04F2 9019      LD	R1,Y+
    04F3 9009      LD	R0,Y+
(0320) 		; fuehrt gegebenfalls einen Context-Switch aus
(0321) 
(0322) 		POPSREG		; restore SREG
(0323) 		POPRS		; restore all registers
(0324) 		RET			; Note: RET instead of RETI
    04F4 9508      RET
_OSTaskStkInit:
  stks                 --> R10
  tmp                  --> R22
  stk                  --> R20
  opt                  --> Y+8
  ptos                 --> Y+6
  pdata                --> R18
  task                 --> R16
    04F5 940E0893  CALL	push_gset3
FILE: C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\os_task.c
(0001) 
(0002) #ifndef  OS_MASTER_FILE
(0003) #include "includes.h"
(0004) #endif
(0005) 
(0006) /*$PAGE*/
(0007) /*
(0008) *********************************************************************************************************
(0009) *                                            CREATE A TASK
(0010) *
(0011) * Description: This function is used to have uC/OS-II manage the execution of a task.  Tasks can either
(0012) *              be created prior to the start of multitasking or by a running task.  A task cannot be
(0013) *              created by an ISR.
(0014) *
(0015) * Arguments  : task     is a pointer to the task's code
(0016) *
(0017) *              pdata    is a pointer to an optional data area which can be used to pass parameters to
(0018) *                       the task when the task first executes.  Where the task is concerned it thinks
(0019) *                       it was invoked and passed the argument 'pdata' as follows:
(0020) *
(0021) *                           void Task (void *pdata)
(0022) *                           {
(0023) *                               for (;;) {
(0024) *                                   Task code;
(0025) *                               }
(0026) *                           }
(0027) *
(0028) *              ptos     is a pointer to the task's top of stack.  If the configuration constant 
(0029) *                       OS_STK_GROWTH is set to 1, the stack is assumed to grow downward (i.e. from high
(0030) *                       memory to low memory).  'pstk' will thus point to the highest (valid) memory 
(0031) *                       location of the stack.  If OS_STK_GROWTH is set to 0, 'pstk' will point to the 
(0032) *                       lowest memory location of the stack and the stack will grow with increasing
(0033) *                       memory locations.
(0034) *
(0035) *              prio     is the task's priority.  A unique priority MUST be assigned to each task and the
(0036) *                       lower the number, the higher the priority.
(0037) *
(0038) * Returns    : OS_NO_ERR        if the function was successful.
(0039) *              OS_PRIO_EXIT     if the task priority already exist 
(0040) *                               (each task MUST have a unique priority).
(0041) *              O

⌨️ 快捷键说明

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