亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 復件 os_cpu_a.s

?? ucos如何移植到單片機mega128
?? S
字號:
;*******************************************************************************
;                                   uC/OS-II
;                             The Real-Time Kernel
;
;                         ATmega103 Specific code
;                               (ICC V6.21)
;
;
; File:			OS_CPU_A.S
; By:			Ole Saether
; Modified by:	Joerg Meyer
; Port Version:	V1.00
;
;
;*******************************************************************************

;include 

;*******************************************************************************
;                 I/O PORT ADDRESSES
;*******************************************************************************


SREG    = 0x3F
SPH     = 0x3E
SPL     = 0x3D
RAMPZ   = 0x3B
TCNT0   = 0x32
TCNT2   = 0x24


;*******************************************************************************
;                MACROS
;*******************************************************************************

				; Push registers
				.macro PUSHRS
                ST      -Y,R0	
                ST      -Y,R1
                ST      -Y,R2
                ST      -Y,R3
                ST      -Y,R4
                ST      -Y,R5
                ST      -Y,R6
                ST      -Y,R7
                ST      -Y,R8
                ST      -Y,R9
                ST      -Y,R10
                ST      -Y,R11
                ST      -Y,R12
                ST      -Y,R13
                ST      -Y,R14
                ST      -Y,R15
                ST      -Y,R16
                ST      -Y,R17
                ST      -Y,R18
                ST      -Y,R19
                ST      -Y,R20
                ST      -Y,R21
                ST      -Y,R22
                ST      -Y,R23
                ST      -Y,R24
                ST      -Y,R25
                ST      -Y,R26
                ST      -Y,R27
                ST      -Y,R30
                ST      -Y,R31
                IN      R16,RAMPZ
                ST      -Y,R16
				.endmacro

				; Pop registers
                .macro POPRS
                LD      R16,Y+
                OUT     RAMPZ,R16
                LD      R31,Y+
                LD      R30,Y+
                LD      R27,Y+
                LD      R26,Y+
                LD      R25,Y+
                LD      R24,Y+
                LD      R23,Y+
                LD      R22,Y+
                LD      R21,Y+
                LD      R20,Y+
                LD      R19,Y+
                LD      R18,Y+
                LD      R17,Y+
                LD      R16,Y+
                LD      R15,Y+
                LD      R14,Y+
                LD      R13,Y+
                LD      R12,Y+
                LD      R11,Y+
                LD      R10,Y+
                LD      R9,Y+
                LD      R8,Y+
                LD      R7,Y+
                LD      R6,Y+
                LD      R5,Y+
                LD      R4,Y+
                LD      R3,Y+
                LD      R2,Y+
                LD      R1,Y+
                LD      R0,Y+
                .endmacro

				; Push stack pointer
                .macro PUSHSP
                IN      R16,SPH
                ST      -Y,R16
                IN      R16,SPL
                ST      -Y,R16
                .endmacro

				; Pop stack pointer
                .macro POPSP
                LD      R16,Y+
                OUT     SPL,R16
                LD      R16,Y+
                OUT     SPH,R16
                .endmacro

				;Push SREG
				.macro PUSHSREG
                IN      R16,SREG
                ST      -Y,R16
                .endmacro

				; Pop SREG
                .macro POPSREG
                LD      R16,Y+
                OUT     SREG,R16
				.endmacro

                .area    text(rel)

;*******************************************************************************
;               START HIGHEST PRIORITY TASK READY-TO-RUN
;
; Description : This function is called by OSStart() to start the highest
; priority task that was created by your application before calling OSStart().
;
; Note(s):
;	1) The (data)stack frame is assumed to look as follows:
;
;		OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
;										MSB of (return) stack pointer
;										Flags to load in status register
;										R31
;										R30
;										R7
;										.
;										.
;										.
;										R0  (High memory)
;
;		where the stack pointer points to the task start address.
;
;
;	2) OSStartHighRdy() MUST:
;		a) Call OSTaskSwHook() then,
;		b) Set OSRunning to TRUE,
;		c) Switch to the highest priority task.
;*******************************************************************************

_OSStartHighRdy:: 
	CALL    _OSTaskSwHook		; Invoke user defined context switch hook
	LDS     R16,_OSRunning		; Indicate that we are multitasking
	INC     R16					
	STS     _OSRunning,R16		;

	LDS     R30,_OSTCBHighRdy	; Let Z point to TCB of highest priority task
	LDS     R31,_OSTCBHighRdy+1	; ready to run
	LD      R28,Z+				; Load Y (R29:R28) pointer
	LD      R29,Z+				;

	POPSP		; restore stack pointer
	POPSREG		; restore SREG
	POPRS		; restore registers
	RET			; start task

;*******************************************************************************
;                 TASK LEVEL CONTEXT SWITCH
;
; Description : This function is called when a task makes a higher priority task
; ready-to-run.
;
; Note(s):
;	1) Upon entry,
;		OSTCBCur     points to the OS_TCB of the task to suspend
;		OSTCBHighRdy points to the OS_TCB of the task to resume
;
;	2) The stack frame of the task to suspend looks as follows:
;
;		SP	+0 --> LSB of task code address
;			+1     MSB of task code address	(High memory)
;
;	3) The saved context of the task to resume looks as follows:
;
;		OSTCBHighRdy->OSTCBStkPtr --> LSB of (return) stack pointer (Low memory)
;                                     MSB of (return) stack pointer
;                                     Flags to load in status register
;                                     R31
;                                     R30
;                                     R7
;                                     .
;                                     .
;                                     .
;                                     R0    (High memory)
;*******************************************************************************

_OSCtxSw::
		PUSHRS						; Save current task's context
		PUSHSREG
		PUSHSP

		LDS     R30,_OSTCBCur		; Z = OSTCBCur->OSTCBStkPtr
		LDS     R31,_OSTCBCur+1		;
		ST      Z+,R28				; Save Y (R29:R28) pointer
		ST      Z+,R29				;
	
		CALL    _OSTaskSwHook		; Call user defined task switch hook

		LDS     R16,_OSPrioHighRdy	; OSPrioCur = OSPrioHighRdy
		STS     _OSPrioCur,R16
	
		LDS     R30,_OSTCBHighRdy ; Let Z point to TCB of highest priority task
		LDS     R31,_OSTCBHighRdy+1	; ready to run
		STS     _OSTCBCur,R30		; OSTCBCur = OSTCBHighRdy
		STS     _OSTCBCur+1,R31 	;

		LD      R28,Z+		; Restore Y pointer
		LD      R29,Z+		;

		POPSP				; restore stack pointer
		POPSREG				; restore SREG
		POPRS				; restore registers
		RET


;*******************************************************************************
;               INTERRUPT LEVEL CONTEXT SWITCH
;
; Description : This function is called by OSIntExit() to perform a context
; switch to a task that has been made ready-to-run by an ISR.
;
; Note(s):
;	1) Upon entry,
;		OSTCBCur     points to the OS_TCB of the task to suspend
;		OSTCBHighRdy points to the OS_TCB of the task to resume
;
;	2) The stack frame of the task to suspend looks as follows:
;
;		SP	+0 --> LSB of return address of OSIntCtxSw()   (Low memory)
;			+1     MSB of return address of OSIntCtxSw()
;			+2     LSB of return address of OSIntExit()
;			+3     MSB of return address of OSIntExit()
;			+4     LSB of task code address
;			+5     MSB of task code address		(High memory)
;
;	3) The saved context of the task to resume looks as follows:
;
;		OSTCBHighRdy->OSTCBStkPtr --> 	LSB of (return) stack pointer (Low mem)
;										MSB of (return) stack pointer
;										Flags to load in status register
;										R31
;										R30
;										R7
;										.
;										.
;										.
;										R0		(High memory)
;*******************************************************************************

_OSIntCtxSw::
		IN      R30,SPL				; Z = SP
		IN      R31,SPH
	;	ADIW    R30,4	; (Uncomment if OS_CRITICAL_METHOD is 1, see OS_CPU.H)
		ADIW    R30,5				; Adjust Z to point to task return address
		ST      -Y,R31				; Save SP
		ST      -Y,R30				;
	
		LDS     R30,_OSTCBCur		; Z = OSTCBCur->OSTCBStkPtr
		LDS     R31,_OSTCBCur+1		;
		ST      Z+,R28				; Save Y pointer
		ST      Z+,R29				;

		CALL    _OSTaskSwHook		; Call user defined task switch hook

		LDS     R16,_OSPrioHighRdy	; OSPrioCur = OSPrioHighRdy
		STS     _OSPrioCur,R16	;

		LDS     R30,_OSTCBHighRdy	; Z = OSTCBHighRdy->OSTCBStkPtr
		LDS     R31,_OSTCBHighRdy+1	;
		STS     _OSTCBCur,R30		; OSTCBCur = OSTCBHighRdy
		STS     _OSTCBCur+1,R31		;

		LD      R28,Z+				; Restore Y pointer
		LD      R29,Z+				;
		POPSP						; restore stack pointer
		POPSREG						; restore SREG
		POPRS						; restore registers
		RET

;******************************************************************************
;                          SYSTEM TICK ISR
;
; Description: This function is the ISR used to notify uC/OS-II that a system
; tick has occurred.
;
;
;*******************************************************************************
; 
_OSTickISR::    
		PUSHRS				; save all registers
		IN	R16, SREG
		SBR	R16, 0x80		; bei Aufruf dieser ISR geloeschtes I-Flag setzen 
		ST	-Y, R16

		; TimerCounter aufrischen
		LDI     R16,256-(4000000/100/1024)	; Reload TC_2, 10ms bei 4MHz
		OUT     TCNT2,R16

		LDS     R16,_OSIntNesting           ; Notify uC/OS-II of ISR
		INC     R16                         ;
		STS     _OSIntNesting,R16           ;

		CALL    _OSTimeTick		; Call uC/OS-II's tick updating function
		; bearbeitet die tasktimer, wenn 0 --> deren Prio in Aufruftab stellen

		CALL    _OSIntExit		; Notify uC/OS-II about end of ISR
		; fuehrt gegebenfalls einen Context-Switch aus

		POPSREG		; restore SREG
		POPRS		; restore all registers
		RET			; Note: RET instead of RETI

;*******************************************************************************
;
;*******************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一区二区在线播放| 亚洲午夜私人影院| 国产麻豆成人精品| 久久久久久夜精品精品免费| 国产成人精品1024| 亚洲色图一区二区| 一本色道亚洲精品aⅴ| 亚洲国产精品自拍| 3d动漫精品啪啪1区2区免费| 开心九九激情九九欧美日韩精美视频电影 | 久久99国产精品免费| 久久久久久夜精品精品免费| 成人高清免费在线播放| 亚洲精品日韩专区silk| 在线播放视频一区| 国产高清不卡二三区| 136国产福利精品导航| 欧美巨大另类极品videosbest| 精品一区二区三区av| 中文字幕av一区二区三区高 | 蜜乳av一区二区三区| 久久精品免视看| 91丨porny丨蝌蚪视频| 午夜久久久久久久久| 久久一留热品黄| 一本色道久久综合亚洲91 | 8x8x8国产精品| 成人涩涩免费视频| 日韩高清国产一区在线| 久久久精品tv| 欧美日韩另类国产亚洲欧美一级| 九一九一国产精品| 亚洲精选视频免费看| 日韩三级免费观看| 91捆绑美女网站| 九九国产精品视频| 一区二区三区不卡视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲女同一区二区| 精品sm在线观看| 欧美午夜一区二区三区| 粉嫩aⅴ一区二区三区四区| 午夜精品久久久久久久| 国产精品三级久久久久三级| 欧美久久久久中文字幕| 99re这里只有精品视频首页| 国内精品久久久久影院一蜜桃| 亚洲一区精品在线| 国产精品毛片久久久久久| 日韩精品专区在线| 欧美亚洲综合久久| 99久久伊人网影院| 国产91丝袜在线播放0| 日本在线不卡一区| 亚洲国产美国国产综合一区二区| 国产精品国产三级国产aⅴ原创| 欧美大片免费久久精品三p| 91福利精品第一导航| av在线不卡观看免费观看| 国产精品一二一区| 久久精品国产在热久久| 天天综合日日夜夜精品| 亚洲综合一二三区| 久久久久久一二三区| 欧美片网站yy| 欧美三级三级三级爽爽爽| 色中色一区二区| 91在线播放网址| 99精品桃花视频在线观看| 成人黄色a**站在线观看| 激情av综合网| 国产精品亚洲成人| 国产盗摄精品一区二区三区在线| 精品一区二区国语对白| 日韩国产在线一| 日韩电影免费在线| 婷婷亚洲久悠悠色悠在线播放| 亚洲黄色免费网站| 亚洲一区二区美女| 亚洲与欧洲av电影| 亚洲1区2区3区4区| 午夜视频一区二区三区| 天堂蜜桃91精品| 日韩av网站免费在线| 免费在线观看视频一区| 久久精品国产免费| 国产在线日韩欧美| 成人综合婷婷国产精品久久蜜臀 | 成人黄色av网站在线| 97久久精品人人做人人爽50路| 91丨porny丨蝌蚪视频| 欧亚洲嫩模精品一区三区| 欧洲视频一区二区| 欧美精品久久久久久久多人混战 | 日本不卡一区二区| 韩国av一区二区三区四区| 国产 欧美在线| 91天堂素人约啪| 欧美人与禽zozo性伦| 欧美一区二区三区思思人| 精品1区2区在线观看| 国产精品乱人伦| 91丨porny丨国产| 成人视屏免费看| 色狠狠一区二区| 日韩欧美成人激情| 久久久久国产精品麻豆ai换脸 | 国产精品不卡一区| 亚洲最色的网站| 麻豆精品一二三| 99国产精品久| 91精品国产综合久久精品图片 | 中文字幕一区二区在线播放| 亚洲曰韩产成在线| 国产一区二区在线视频| 99精品久久99久久久久| 91精品国产综合久久久蜜臀图片| 国产色产综合产在线视频| 亚洲日本va在线观看| 麻豆国产精品一区二区三区| 99久久夜色精品国产网站| 日韩精品一区二区三区在线| 亚洲人亚洲人成电影网站色| 免费观看30秒视频久久| 色一情一乱一乱一91av| 久久综合九色欧美综合狠狠| 亚洲午夜久久久久久久久电影网| 国产一区二区三区电影在线观看| 欧美无砖专区一中文字| 亚洲国产岛国毛片在线| 美女网站一区二区| 在线亚洲免费视频| 久久精品亚洲麻豆av一区二区 | 在线免费观看日本一区| 欧美成人精品二区三区99精品| 一区二区三区精品在线| 国产成人高清视频| 日韩欧美国产不卡| 亚洲一二三区在线观看| 91在线精品秘密一区二区| 久久综合久色欧美综合狠狠| 日韩和欧美一区二区| 欧美在线三级电影| 国产精品激情偷乱一区二区∴| 国产呦萝稀缺另类资源| 911精品产国品一二三产区| 一区二区三区在线播| 国产精品1区2区| 26uuu亚洲综合色欧美| 青青草原综合久久大伊人精品 | 成人黄色在线视频| 国产亚洲成年网址在线观看| 看国产成人h片视频| 91精品国产色综合久久ai换脸 | 日韩精品专区在线影院重磅| 首页亚洲欧美制服丝腿| 欧美视频日韩视频在线观看| 亚洲老司机在线| 国产日韩欧美不卡在线| 亚洲最新视频在线播放| a在线欧美一区| 亚洲天天做日日做天天谢日日欢| 成人午夜在线播放| 中文字幕av一区二区三区高| 国产v综合v亚洲欧| 欧美精彩视频一区二区三区| 国产久卡久卡久卡久卡视频精品| 精品成人在线观看| 国产在线精品一区在线观看麻豆| 精品国产乱码久久久久久夜甘婷婷| 蜜桃精品在线观看| 精品粉嫩aⅴ一区二区三区四区| 狠狠色丁香久久婷婷综合_中| 久久综合九色综合97婷婷女人| 国产乱码字幕精品高清av| 中文字幕精品一区二区三区精品| 成人黄色软件下载| 一区二区免费看| 91精品国产综合久久精品| 日本成人在线一区| 久久综合成人精品亚洲另类欧美 | 成人一区二区三区视频| **欧美大码日韩| 色婷婷综合中文久久一本| 亚洲午夜电影网| 精品伦理精品一区| 高清日韩电视剧大全免费| 亚洲人成在线播放网站岛国| 欧美中文字幕久久| 免费高清成人在线| 亚洲国产成人午夜在线一区| 日本韩国一区二区三区视频| 日本vs亚洲vs韩国一区三区二区 | 成人中文字幕在线| 亚洲免费av高清| 欧美一级免费观看| 成人午夜又粗又硬又大| 亚洲午夜精品在线| 精品国产电影一区二区 | 欧美性一级生活|