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

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

?? os_cpu_a.s

?? NXP LPC uCOS-II port for ARM
?? S
字號:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
;                                          All Rights Reserved
;
;
;                                           ARM Specific code
;
; File : OS_CPU_A.s
; By   : N. Douglas (3rd April 2000)
;********************************************************************************************************

	AREA	OS_CPU_A, CODE, READONLY

	EXPORT	OSStartHighRdy
	EXPORT	OSCtxSw
	EXPORT	OSIntCtxSw
	EXPORT	OSTaskSw
	EXPORT	OSStackAndDisableInts
	EXPORT	OSRestoreStackedIntState

	IMPORT	OSTaskSwHook
	IMPORT	OSRunning
	IMPORT	OSTCBHighRdy
	IMPORT	OSTCBCur
	IMPORT	OSPrioHighRdy
	IMPORT	OSPrioCur

; Handy SWI definitions
OS_EnterOS	EQU	0x16

	[ 1=0
; Handy register dump macro (NEEDS NEDHAL)
	IMPORT	DbgIO_WriteF
	MACRO
	regdump		$txt, $src
	; R0=reg list (R14_usr, R13_usr, R12-R0, PC_usr, SPSR_irq), $txt=msg to print
	; corrupts R0-R5
	MOV	R4,$src
	B	%f03
1
	DCB	"$txt"
	DCB	" using task 0x%x",10,0
	ALIGN
2
	DCB	"R%d=0x%x",10,0
	ALIGN
3	ADR	R0,%b01
	LDR	R1,=OSTCBCur
	LDR	R1,[R1]
	BL	DbgIO_WriteF
	MVN	R5,#1
4	ADR	R0,%b02
	MOV	R1,R5
	LDMFD	R4!,{R2}
	BL	DbgIO_WriteF
	ADD	R5,R5,#1
	CMP	R5,#14
	BLE	%b04
	MEND
	]

;*********************************************************************************************************
;                                          START MULTITASKING
;                                       void OSStartHighRdy(void)
;
; Assumes context is saved as:
; First R14_usr, R13_usr, R12-R0
; Then PC_usr and SPSR_irq (ie; CPSR_usr)
;*********************************************************************************************************

OSStartHighRdy
	; Need to be in a privilaged mode first
	SWI	OS_EnterOS

	; Call OSTaskSwHook()
	BL	OSTaskSwHook

	; Set OSRunning to TRUE
	MOV	R0,#1
	LDR	R1,=OSRunning
	STRB	R0,[R1]
	

	; Get stack ptr for task to resume (lives in OSTCBHighRdy->OSTCBStkPtr)
	LDR	R1,=OSTCBHighRdy
	LDR	R1,[R1]
	LDR	R0,[R1,#0]				; OSTCBStkPtr is at +0
	;regdump	"Restoring context (OSStartHighRdy)", R0

	; Restore saved context & return to task
	LDMFD	R0!,{R1,R14}				; SPSR & return addr
	MSR	SPSR_all,R1
	LDMFD	R0,{R0-R14}^				; Restore USR mode regs R0-R14
	NOP
	MOVS	PC,R14					; PC=ret addr & CPSR=SPSR


;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
;*********************************************************************************************************

OSCtxSw
	STMFD	R13!,{R14}				; Stack return addr

	; Save current task context
	STMDB	R13,{R13}^				; Determine R13_usr
	LDMDB	R13,{R14}
	STMFD	R14,{R0-R14}^				; Stack USR mode regs R0-R14
	MRS	R1, SPSR
	SUB	R0,R14,#15*4
	LDMFD	R13!,{R14}
	STMFD	R0!,{R1,R14}				; Stack SPSR & return addr

	; Store stack ptr of task (lives in OSTCBCur->OSTCBStkPtr)
	LDR	R1,=OSTCBCur
	LDR	R1,[R1]
	STR	R0,[R1,#0]				; OSTCBStkPtr is at +0
	; regdump	"Saving context (OSCtxSw)", R0
	
	; Call user definable OSTaskSwHook()
	BL	OSTaskSwHook

	; Set current task to new task
	LDR	R2,=OSTCBHighRdy
	LDR	R3,=OSTCBCur
	LDR	R4,=OSPrioHighRdy
	LDR	R5,=OSPrioCur
	LDR	R0,[R2]
	LDRB	R1,[R4]
	STR	R0,[R3]
	STRB	R1,[R5]

	; Get stack ptr for task to resume (lives in OSTCBHighRdy->OSTCBStkPtr)
	LDR	R1,=OSTCBHighRdy
	LDR	R1,[R1]
	LDR	R0,[R1,#0]				; OSTCBStkPtr is at +0
	; regdump	"Restoring context (OSCtxSw)", R0

	; Restore saved context & return to task
	LDMFD	R0!,{R1,R14}				; SPSR & return addr
	MSR	SPSR_all,R1
	LDMFD	R0,{R0-R14}^				; Restore USR mode regs R0-R14
	NOP
	MOVS	PC,R14					; PC=ret addr & CPSR=SPSR


;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From an ISR)
;                                        void OSIntCtxSw(void)
;
;*********************************************************************************************************

OSIntCtxSw
	; Remove all registers on IRQ stack so far
	; This means the order in which things were called before calling this
	; In our case, this means OSIntExit, the ISR routine and then anything which
	; called the ISR (eg; a HAL like NedHAL)
	; Regs stacked WILL BE DIFFERENT DEPENDING ON COMPILER VERSION

	; Remove OSIntExit() stacked regs
	; v2.5: {r14}
	; v2.0: {r11,r12,r14,pc} 
	;ADD	R13,R13,#4		; v2.5
	ADD	R13,R13,#4*4

	; Remove ISR() stacked regs (KEEP SIMILAR)
	; v2.5: {r4,r14}
	; v2.0: {r0,r4,r11,r12,r14,pc}
	;LDMFD	R13!,{R4,R14}		; v2.5
	ADD	R13,R13,#4*6

	; Remove HAL stacked regs (KEEP SIMILAR)
	; {spsr,r0-r12,r14}
	LDMFD	R13!,{R0}
	MSR	SPSR,R0
	LDMFD	R13!,{R0-R12,R14}

	; Perform normal task swap
	B	OSCtxSw


;*********************************************************************************************************
;                                        GENERATE SOFT INTERRUPT
;                                          void OSTaskSw(void)
;
;*********************************************************************************************************

OSTaskSw
	IMPORT	NedHAL_ISR

	MOV	R2,R14
	MRS	R1,CPSR					; Take copy of current PSR
	SWI	OS_EnterOS				; enter SVC mode
	BIC	R0,R1,#0x1f
	ORR	R0,R0,#0x92				; IRQ32 + interrupts off
	MSR	CPSR_all,R0
	NOP
	MSR	SPSR_all,R1				; SPSR=old PSR
	ADD	R14,R2,#4				; R14_irq=return addr
	; Now in a state just like as if at 0x18
	B	OSCtxSw


;*********************************************************************************************************
;                                  STACK IRQ STATE AND DISABLE INTERRUPTS
;                                    void OSStackAndDisableInts(void)
;
; NOTE: Be careful calling from C code in SVC
;*********************************************************************************************************

OSStackAndDisableInts
	; Corrupts R0-R2 (okay during APCS use)
	MOV	R2,R14					; remember r14 (might be usr, irq, svc etc)
	SWI	OS_EnterOS				; enter SVC mode
	MRS	R0,SPSR					; disable interrupts in the SPSR
	ORR	R1,R0,#(1<<7)
	MSR	SPSR_all,R1
	STMFD	R13!,{R0}				; stack the old SPSR on SVC stack
	MOVS	PC,R2					; CPSR=SPSR & PC=ret addr


;*********************************************************************************************************
;                                  STACK IRQ STATE AND DISABLE INTERRUPTS
;                                    void OSRestoreStackedIntState(void)
;
; NOTE: Be careful calling from C code in SVC
;*********************************************************************************************************

OSRestoreStackedIntState
	; Corrupts R0,R1 (okay during APCS use)
	MOV	R1,R14					; remember r14
	SWI	OS_EnterOS				; enter SVC mode
	LDMFD	R13!,{R0}				; load the old SPSR off SVC stack
	MSR	SPSR_all,R0				; SPSR=what it did before
	MOVS	PC,R1					; CPSR=SPSR & PC=ret addr



	END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲另类国产综合| 亚洲综合网站在线观看| 884aa四虎影成人精品一区| 成人黄色网址在线观看| 国模大尺度一区二区三区| 午夜精品视频一区| 91国偷自产一区二区开放时间| 国产精品久久久久久久裸模| 欧美猛男gaygay网站| 丝袜亚洲另类丝袜在线| 91精品国产乱码久久蜜臀| 理论片日本一区| 精品处破学生在线二十三| 国产成人av电影在线| 日韩高清在线电影| 成人av在线播放网址| 欧美年轻男男videosbes| 精品久久久三级丝袜| 一区二区成人在线视频| 国产精品一区二区黑丝| 欧美在线一二三四区| 久久无码av三级| 亚洲一区国产视频| 成人动漫视频在线| 美腿丝袜在线亚洲一区| 日韩成人dvd| 视频一区免费在线观看| 亚洲自拍都市欧美小说| 中文字幕欧美日本乱码一线二线| 欧美一级欧美三级| 欧美电影免费观看高清完整版在线| 欧美理论在线播放| 欧美日韩和欧美的一区二区| 欧美日韩一区二区在线观看| 色哟哟精品一区| 91蜜桃免费观看视频| 一本久久a久久精品亚洲| 色8久久精品久久久久久蜜| 欧美性色黄大片手机版| 欧美日免费三级在线| 91麻豆精品国产91久久久久久| 欧美电影影音先锋| 欧美精品一区二区久久久| 国产视频一区在线播放| 中文字幕在线免费不卡| 一区二区高清视频在线观看| 六月丁香婷婷久久| 风间由美一区二区三区在线观看 | 日本一区二区三区电影| 中文字幕av不卡| 亚洲一区精品在线| 国产成人午夜电影网| 在线影视一区二区三区| 欧美一级黄色大片| 国产精品久99| 国产精品888| 国产日韩精品一区二区三区在线| 美女任你摸久久| 欧美视频日韩视频在线观看| 一区二区三区高清在线| 国产69精品一区二区亚洲孕妇| 日韩精品一区二区在线| 日本亚洲免费观看| 欧美久久久影院| 日本va欧美va欧美va精品| 欧美日韩国产欧美日美国产精品| 亚洲精品五月天| 色婷婷久久一区二区三区麻豆| 中文字幕av一区二区三区| av电影在线观看一区| 国产精品久久久久婷婷二区次| 国产aⅴ精品一区二区三区色成熟| 久久欧美一区二区| av一区二区三区| 亚洲精品乱码久久久久久黑人 | 亚洲一区在线电影| 91在线视频播放| 亚洲国产精品一区二区尤物区| 欧美三级三级三级| 老司机精品视频在线| 中文字幕第一区| 欧美日韩二区三区| 国产一区在线看| 中文字幕在线观看不卡视频| 欧美午夜精品一区二区蜜桃| 国产一区二区三区不卡在线观看 | 国产精品影视网| 亚洲免费观看高清在线观看| 91精品国产综合久久久久久久久久| 日本伊人色综合网| 一区二区三区中文字幕在线观看| 91精品国产免费久久综合| 国产不卡在线一区| 精品亚洲国产成人av制服丝袜| 国产精品久线观看视频| 91精品国产综合久久久久久 | 宅男在线国产精品| 欧美午夜电影网| 欧美日韩一区中文字幕| 欧美色视频一区| 7777精品伊人久久久大香线蕉 | 欧美午夜不卡视频| 亚洲va天堂va国产va久| 亚洲激情中文1区| 亚洲永久免费av| 日韩电影在线看| 久久国产日韩欧美精品| 久久国产免费看| 97精品电影院| 男女激情视频一区| 色欧美片视频在线观看| 美女在线视频一区| 亚洲精品一卡二卡| 一区二区在线看| 亚洲3atv精品一区二区三区| 五月天欧美精品| 美女视频一区二区三区| 国产精品538一区二区在线| www.欧美.com| 欧美日韩中文字幕一区二区| 在线不卡免费欧美| 久久精品一区四区| 亚洲欧美日韩在线播放| 久久精品二区亚洲w码| 国产1区2区3区精品美女| 欧洲一区二区三区免费视频| 日韩免费视频一区二区| 亚洲日本丝袜连裤袜办公室| 日日嗨av一区二区三区四区| 成人综合激情网| 欧美精品 国产精品| 亚洲国产经典视频| 日韩精品免费专区| 色综合欧美在线视频区| 中文字幕一区二区三区在线不卡 | 日韩影院免费视频| 久久综合国产精品| 91精品免费在线| 欧美日韩国产一二三| 成人免费va视频| 欧美在线视频全部完| 在线亚洲免费视频| 欧美美女一区二区| 欧美精彩视频一区二区三区| 亚洲女性喷水在线观看一区| 国产精品久久久久精k8 | 丝袜a∨在线一区二区三区不卡| 亚洲免费在线观看| 婷婷综合在线观看| 午夜精品爽啪视频| 日韩一区在线播放| 亚洲激情校园春色| 久久99蜜桃精品| 欧美精品三级日韩久久| 粉嫩嫩av羞羞动漫久久久| 亚洲综合一区二区三区| 欧美tk丨vk视频| www.99精品| 波多野结衣的一区二区三区| 97精品电影院| 精品国产乱子伦一区| 日韩一区二区高清| 91精品国产福利在线观看| 午夜欧美一区二区三区在线播放| 欧美专区日韩专区| 男人的天堂久久精品| 日韩精品一区二区三区swag| 国产伦精品一区二区三区在线观看 | 亚洲欧美日韩在线不卡| 欧美三区免费完整视频在线观看| 五月激情丁香一区二区三区| 日韩午夜精品视频| aaa欧美色吧激情视频| 亚洲成人综合视频| 久久免费视频色| 91精品91久久久中77777| 裸体在线国模精品偷拍| 国产精品国产精品国产专区不片| 欧美日韩综合在线免费观看| 国产真实乱对白精彩久久| 国产精品你懂的在线欣赏| 51久久夜色精品国产麻豆| 国产99精品国产| 青青草国产成人99久久| 亚洲天堂成人在线观看| 国产凹凸在线观看一区二区 | 欧美精品一区二区蜜臀亚洲| 日韩和欧美一区二区| 日韩写真欧美这视频| 精彩视频一区二区三区| 久久精品一区二区三区av| 风流少妇一区二区| 一区二区免费在线播放| 欧美午夜片在线观看| 成人精品高清在线| 亚洲成人精品一区| 欧美日韩不卡一区| 亚洲国产日韩精品| 欧美精品在线一区二区三区| 亚洲午夜精品一区二区三区他趣|