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

📄 ucosii.lst

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LST
📖 第 1 页 / 共 5 页
字号:
    03B0 8113      LDD	R17,3+Z
(0372)         OS_EXIT_CRITICAL();
    03B1 930A      ST	R16,-Y
    03B2 910F      POP	R16
    03B3 BF0F      OUT	P3F,R16
    03B4 9109      LD	R16,Y+
    03B5 01F8      MOVW	R30,R16
    03B6 8581      LDD	R24,9+Z
    03B7 308F      CPI	R24,0xF
    03B8 F009      BEQ	0x03BA
    03B9 CFC0      RJMP	0x037A
(0373)     }
(0374)     OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter           */
    03BA 930A      ST	R16,-Y
    03BB B70F      IN	R16,P3F
    03BC 94F8      BCLR	7
    03BD 930F      PUSH	R16
    03BE 9109      LD	R16,Y+
(0375)     OSTime++;
    03BF E081      LDI	R24,1
    03C0 E090      LDI	R25,0
    03C1 E0A0      LDI	R26,0
    03C2 E0B0      LDI	R27,0
    03C3 9040011B  LDS	R4,_OSTime+2
    03C5 9050011C  LDS	R5,_OSTime+3
    03C7 90200119  LDS	R2,_OSTime
    03C9 9030011A  LDS	R3,_OSTime+1
    03CB 0E28      ADD	R2,R24
    03CC 1E39      ADC	R3,R25
    03CD 1E4A      ADC	R4,R26
    03CE 1E5B      ADC	R5,R27
    03CF 9230011A  STS	R3,_OSTime+1
    03D1 92200119  STS	R2,_OSTime
    03D3 9250011C  STS	R5,_OSTime+3
    03D5 9240011B  STS	R4,_OSTime+2
(0376)     OS_EXIT_CRITICAL();
    03D7 930A      ST	R16,-Y
    03D8 910F      POP	R16
    03D9 BF0F      OUT	P3F,R16
    03DA 9109      LD	R16,Y+
(0377) }    03DB 9508      RET
FILE: C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\os_cpu_a.s
(0001) ;*******************************************************************************
(0002) ;                                   uC/OS-II
(0003) ;                             The Real-Time Kernel
(0004) ;                         ATmega16 Specific code
(0005) ; File:				  OS_CPU_A.S
(0006) ; Modified by:			  PiQiu
(0007) ; Revision:			  1.0
(0008) ;
(0009) ;
(0010) ;*******************************************************************************
(0011) 
(0012) ;include 
(0013) 
(0014) ;*******************************************************************************
(0015) ;                 I/O PORT ADDRESSES
(0016) ;*******************************************************************************
(0017) 
(0018) 
(0019) SREG    = 0x3F
(0020) SPH     = 0x3E
(0021) SPL     = 0x3D
(0022) RAMPZ   = 0x3B
(0023) TCNT0   = 0x32
(0024) TCNT2   = 0x24
(0025) 
(0026) 
(0027) ;*******************************************************************************
(0028) ;                MACROS
(0029) ;*******************************************************************************
(0030) 
(0031) 				; Push registers
(0032) 				.macro PUSHRS
(0033)                 ST      -Y,R0	
(0034)                 ST      -Y,R1
(0035)                 ST      -Y,R2
(0036)                 ST      -Y,R3
(0037)                 ST      -Y,R4
(0038)                 ST      -Y,R5
(0039)                 ST      -Y,R6
(0040)                 ST      -Y,R7
(0041)                 ST      -Y,R8
(0042)                 ST      -Y,R9
(0043)                 ST      -Y,R10
(0044)                 ST      -Y,R11
(0045)                 ST      -Y,R12
(0046)                 ST      -Y,R13
(0047)                 ST      -Y,R14
(0048)                 ST      -Y,R15
(0049)                 ST      -Y,R16
(0050)                 ST      -Y,R17
(0051)                 ST      -Y,R18
(0052)                 ST      -Y,R19
(0053)                 ST      -Y,R20
(0054)                 ST      -Y,R21
(0055)                 ST      -Y,R22
(0056)                 ST      -Y,R23
(0057)                 ST      -Y,R24
(0058)                 ST      -Y,R25
(0059)                 ST      -Y,R26
(0060)                 ST      -Y,R27
(0061)                 ST      -Y,R30
(0062)                 ST      -Y,R31
(0063) 				.endmacro
(0064) 
(0065) 				; Pop registers
(0066)                 .macro POPRS
(0067)                 LD      R31,Y+
(0068)                 LD      R30,Y+
(0069)                 LD      R27,Y+
(0070)                 LD      R26,Y+
(0071)                 LD      R25,Y+
(0072)                 LD      R24,Y+
(0073)                 LD      R23,Y+
(0074)                 LD      R22,Y+
(0075)                 LD      R21,Y+
(0076)                 LD      R20,Y+
(0077)                 LD      R19,Y+
(0078)                 LD      R18,Y+
(0079)                 LD      R17,Y+
(0080)                 LD      R16,Y+
(0081)                 LD      R15,Y+
(0082)                 LD      R14,Y+
(0083)                 LD      R13,Y+
(0084)                 LD      R12,Y+
(0085)                 LD      R11,Y+
(0086)                 LD      R10,Y+
(0087)                 LD      R9,Y+
(0088)                 LD      R8,Y+
(0089)                 LD      R7,Y+
(0090)                 LD      R6,Y+
(0091)                 LD      R5,Y+
(0092)                 LD      R4,Y+
(0093)                 LD      R3,Y+
(0094)                 LD      R2,Y+
(0095)                 LD      R1,Y+
(0096)                 LD      R0,Y+
(0097)                 .endmacro
(0098) 
(0099) 				; Push stack pointer
(0100)                 .macro PUSHSP
(0101)                 IN      R16,SPH
(0102)                 ST      -Y,R16
(0103)                 IN      R16,SPL
(0104)                 ST      -Y,R16
(0105)                 .endmacro
(0106) 
(0107) 				; Pop stack pointer
(0108)                 .macro POPSP
(0109)                 LD      R16,Y+
(0110)                 OUT     SPL,R16
(0111)                 LD      R16,Y+
(0112)                 OUT     SPH,R16
(0113)                 .endmacro
(0114) 
(0115) 				;Push SREG
(0116) 				.macro PUSHSREG
(0117)                 IN      R16,SREG
(0118)                 ST      -Y,R16
(0119)                 .endmacro
(0120) 
(0121) 				; Pop SREG
(0122)                 .macro POPSREG
(0123)                 LD      R16,Y+
(0124)                 OUT     SREG,R16
(0125) 				.endmacro
(0126) 
(0127)                 .area    text(rel)
(0128) 
(0129) ;*******************************************************************************
(0130) ;               START HIGHEST PRIORITY TASK READY-TO-RUN
(0131) ;
(0132) ; Description : This function is called by OSStart() to start the highest
(0133) ; priority task that was created by your application before calling OSStart().
(0134) ;
(0135) ; Note(s):
(0136) ;	1) The (data)stack frame is assumed to look as follows:
(0137) ;
(0138) ;		OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
(0139) ;										MSB of (return) stack pointer
(0140) ;										Flags to load in status register
(0141) ;										R31
(0142) ;										R30
(0143) ;										R7
(0144) ;										.
(0145) ;										.
(0146) ;										.
(0147) ;										R0  (High memory)
(0148) ;
(0149) ;		where the stack pointer points to the task start address.
(0150) ;
(0151) ;
(0152) ;	2) OSStartHighRdy() MUST:
(0153) ;		a) Call OSTaskSwHook() then,
(0154) ;		b) Set OSRunning to TRUE,
(0155) ;		c) Switch to the highest priority task.
(0156) ;*******************************************************************************
(0157) 
(0158) _OSStartHighRdy:: 
(0159) 	LDS     R16,_OSRunning		; Indicate that we are multitasking
_OSStartHighRdy:
    03DC 91000146  LDS	R16,_OSRunning
(0160) 	INC     R16					
    03DE 9503      INC	R16
(0161) 	STS     _OSRunning,R16		;
    03DF 93000146  STS	R16,_OSRunning
(0162) 
(0163) 	LDS     R30,_OSTCBHighRdy	; Let Z point to TCB of highest priority task
    03E1 91E0013F  LDS	R30,_OSTCBHighRdy
(0164) 	LDS     R31,_OSTCBHighRdy+1	; ready to run
    03E3 91F00140  LDS	R31,_OSTCBHighRdy+1
(0165) 	LD      R28,Z+				; Load Y (R29:R28) pointer
    03E5 91C1      LD	R28,Z+
(0166) 	LD      R29,Z+				;
    03E6 91D1      LD	R29,Z+
    03E7 9109      LD	R16,Y+
    03E8 BF0D      OUT	P3D,R16
    03E9 9109      LD	R16,Y+
    03EA BF0E      OUT	P3E,R16
    03EB 9109      LD	R16,Y+
    03EC BF0F      OUT	P3F,R16
    03ED 91F9      LD	R31,Y+
    03EE 91E9      LD	R30,Y+
    03EF 91B9      LD	R27,Y+
    03F0 91A9      LD	R26,Y+
    03F1 9199      LD	R25,Y+
    03F2 9189      LD	R24,Y+
    03F3 9179      LD	R23,Y+
    03F4 9169      LD	R22,Y+
    03F5 9159      LD	R21,Y+
    03F6 9149      LD	R20,Y+
    03F7 9139      LD	R19,Y+
    03F8 9129      LD	R18,Y+
    03F9 9119      LD	R17,Y+
    03FA 9109      LD	R16,Y+
    03FB 90F9      LD	R15,Y+
    03FC 90E9      LD	R14,Y+
    03FD 90D9      LD	R13,Y+
    03FE 90C9      LD	R12,Y+
    03FF 90B9      LD	R11,Y+
    0400 90A9      LD	R10,Y+
    0401 9099      LD	R9,Y+
    0402 9089      LD	R8,Y+
    0403 9079      LD	R7,Y+
    0404 9069      LD	R6,Y+
    0405 9059      LD	R5,Y+
    0406 9049      LD	R4,Y+
    0407 9039      LD	R3,Y+
    0408 9029      LD	R2,Y+
    0409 9019      LD	R1,Y+
    040A 9009      LD	R0,Y+
(0167) 
(0168) 	POPSP		; restore stack pointer
(0169) 	POPSREG		; restore SREG
(0170) 	POPRS		; restore registers
(0171) 	RET			; start task
    040B 9508      RET
_OSCtxSw:
    040C 920A      ST	R0,-Y
    040D 921A      ST	R1,-Y
    040E 922A      ST	R2,-Y
    040F 923A      ST	R3,-Y
    0410 924A      ST	R4,-Y
    0411 925A      ST	R5,-Y
    0412 926A      ST	R6,-Y
    0413 927A      ST	R7,-Y
    0414 928A      ST	R8,-Y
    0415 929A      ST	R9,-Y
    0416 92AA      ST	R10,-Y
    0417 92BA      ST	R11,-Y
    0418 92CA      ST	R12,-Y
    0419 92DA      ST	R13,-Y
    041A 92EA      ST	R14,-Y
    041B 92FA      ST	R15,-Y
    041C 930A      ST	R16,-Y
    041D 931A      ST	R17,-Y
    041E 932A      ST	R18,-Y
    041F 933A      ST	R19,-Y
    0420 934A      ST	R20,-Y
    0421 935A      ST	R21,-Y
    0422 936A      ST	R22,-Y
    0423 937A      ST	R23,-Y
    0424 938A      ST	R24,-Y
    0425 939A      ST	R25,-Y
    0426 93AA      ST	R26,-Y
    0427 93BA      ST	R27,-Y
    0428 93EA      ST	R30,-Y
    0429 93FA      ST	R31,-Y
    042A B70F      IN	R16,P3F
    042B 930A      ST	R16,-Y
    042C B70E      IN	R16,P3E
    042D 930A      ST	R16,-Y
    042E B70D      IN	R16,P3D
    042F 930A      ST	R16,-Y
(0172) 
(0173) ;*******************************************************************************
(0174) ;                 TASK LEVEL CONTEXT SWITCH
(0175) ;
(0176) ; Description : This function is called when a task makes a higher priority task
(0177) ; ready-to-run.
(0178) ;
(0179) ; Note(s):
(0180) ;	1) Upon entry,
(0181) ;		OSTCBCur     points to the OS_TCB of the task to suspend
(0182) ;		OSTCBHighRdy points to the OS_TCB of the task to resume
(0183) ;
(0184) ;	2) The stack frame of the task to suspend looks as follows:
(0185) ;
(0186) ;		SP	+0 --> LSB of task code address
(0187) ;			+1     MSB of task code address	(High memory)
(0188) ;
(0189) ;	3) The saved context of the task to resume looks as follows:
(0190) ;
(0191) ;		OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
(0192) ;                                     MSB of (return) stack pointer
(0193) ;                                     Flags to load in status register
(0194) ;                                     R31
(0195) ;                                     R30
(0196) ;                                     R7
(0197) ;                                     .
(0198) ;                                     .
(0199) ;                                     .
(0200) ;                                     R0    (High memory)
(0201) ;*******************************************************************************
(0202) 
(0203) _OSCtxSw::
(0204) 		PUSHRS						; Save current task's context
(0205) 		PUSHSREG
(0206) 		PUSHSP
(0207) 
(0208) 		LDS     R30,_OSTCBCur		; Z = OSTCBCur->OSTCBStkPtr
    0430 91E00143  LDS	R30,_OSTCBCur
(0209) 		LDS     R31,_OSTCBCur+1		;
    0432 91F00144  LDS	R31,_OSTCBCur+1
(0210) 		ST      Z+,R28				; Save Y (R29:R28) pointer
    0434 93C1      ST	R28,Z+
(0211) 		ST      Z+,R29				;
    0435 93D1      ST	R29,Z+
(0212) 	
(0213) 		LDS     R16,_OSPrioHighRdy	; OSPrioCur = OSPrioHighRdy

⌨️ 快捷键说明

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