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

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

?? os_cpu_a.s

?? 基于44B0的uCOS程序
?? S
字號:

BIT_TIMER0	EQU		(0x1<<13)
I_ISPC		EQU		0x1e00024
INTMSK		EQU		0x1e0000c

;test
BIT_TIMER2	EQU		(0x1<<11)
;test

	AREA	|subr|, CODE, READONLY
	
	IMPORT	OSTCBCur
addr_OSTCBCur		DCD	OSTCBCur
	IMPORT	OSTCBHighRdy
addr_OSTCBHighRdy	DCD	OSTCBHighRdy
	IMPORT	OSPrioCur
addr_OSPrioCur		DCD	OSPrioCur
	IMPORT	OSPrioHighRdy
addr_OSPrioHighRdy	DCD	OSPrioHighRdy	
	
	IMPORT  OSRunning

	IMPORT	OSIntEnter
	IMPORT	OSIntExit
	IMPORT	OSTimeTick
	IMPORT	EInt4567Isr
	
;test
	IMPORT	TIMER2ISR2

;test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function: 	OSStartHighRdy																			;
; Purpose:		To start the task with the highest priority during OS startup							;
; Processing:	See uC/OS-II Task Level Context Switch flow chart										;
; Parameters: 	void																					;
; Outputs:  	None																					;
; Returns:  	void																					;
; Notes:		Called once during OSStart()															;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	EXPORT	OSStartHighRdy
OSStartHighRdy
	LDR		r0, =OSRunning			; OSRunning = 1
	MOV		r1, #1
	STRB	r1, [r0]
	
;	LDR		r4, addr_OSTCBCur		; Get current task TCB address
	LDR		r5, addr_OSTCBHighRdy	; Get highest priority task TCB address

	LDR		r5, [r5]				; get stack pointer
	LDR		sp, [r5]				; switch to the new stack

;	STR		r5, [r4]				; set new current task TCB address

	LDMFD	sp!, {r4}				; get new state from top of the stack
	MSR		CPSR_cxsf, r4			; CPSR should be SVC32Mode
	LDMFD	sp!, {r0-r12, lr, pc }	; start the new task

	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function: 	OS_TASK_SW 																				;
; Purpose: 		To perform a context switch from the Task Level.										;
; Processing:	See uC/OS-II Task Level Context Switch flow chart										;
; Parameters:	void																					;
; Outputs:  	None																					;
; Returns:		void																					;
; Notes:		The whole function is executed in CRITICAL state. See OSSched().						;
;																										;
; On entry, OSTCBCur and OSPrioCur hold the current TCB and priority									;
; and OSTCBHighRdy and OSPrioHighRdy contain the same for the task										;
; to be switched to.																					;
; The following code assumes that the virtual memory is directly										;
; mapped into  physical memory. If this is not true, the cache must 									;
; be flushed at context switch to avoid address aliasing.												;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	EXPORT	OSCtxSw
OSCtxSw
	STMFD	sp!, {lr}				; save pc
	STMFD	sp!, {lr}				; save lr
	STMFD	sp!, {r0-r12}			; save register file and ret address
	MRS		r4, CPSR
	STMFD	sp!, {r4}				; save current PSR
	
	LDR		r4, addr_OSTCBCur
	LDR		r5, [r4]
	STR		sp, [r5]				; store sp in preempted tasks TCB

	; OSPrioCur = OSPrioHighRdy
	LDR		r4, addr_OSPrioCur
	LDR		r5, addr_OSPrioHighRdy
	LDRB	r6, [r5]
	STRB	r6, [r4]
	
	; OSTCBCur = OSTCBHighRdy
	LDR		r4, addr_OSTCBHighRdy
	LDR		r5, addr_OSTCBCur	
	LDR		r4, [r4]
	STR		r4, [r5] 

	LDR		sp, [r4]
	LDMFD	sp!, {r4}				; YYY+
	MSR		CPSR_cxsf, r4			; YYY+
	LDMFD	sp!, {r0-r12, lr, pc}	; YYY+


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function: 	OSIntCtxSW 																				;
; Purpose: 		To perform a context switch from the Interrupt Level.									;
; Processing:	See uC/OS-II Interrupt Level Context Switch flow chart									;
; Parameters:	void																					;
; Outputs:  	None																					;
; Returns:		void																					;
; Notes:		The whole function is executed in CRITICAL state. See OSIntExit().						;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	EXPORT 	OSIntCtxSw
OSIntCtxSw
	;OSPrioCur = OSPrioHighRdy
	LDR		r6, addr_OSPrioHighRdy
	LDR		r5, addr_OSPrioCur	
	LDRB	r6, [r6]
	STRB	r6, [r5]			

	;OSTCBCur = OSTCBHighRdy
	LDR		r4, addr_OSTCBHighRdy
	LDR		r5, addr_OSTCBCur	
	LDR		r4, [r4]
	STR		r4, [r5] 

	LDR		sp, [r4]
	LDMFD 	sp!, {r4}				 ; pop new task cpsr
	MSR 	cpsr_cxsf, r4
	LDMFD 	sp!, {r0-r12,lr,pc}		 ; pop new task r0-r12,lr & pc


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function:		OSTickISR																				;
; Purpose:		Timer0 Interrupt Sever																	;
; Processing:	Call OSTimeTick																			;
; Parameters: 	void																					;
; Outputs:		None																					;
; Returns:		void																					;
; Notes:																								;					
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LINK_SAVE	DCD		0
PSR_SAVE	DCD		0
	EXPORT 	OSTickISR
OSTickISR
	STMFD	sp!, {r4}
	LDR		r4, =LINK_SAVE
	STR		lr, [r4]				 ; LINK_SAVE = lr_irq
	MRS		lr,	spsr
	STR		lr, [r4, #4]			 ; PSR_SAVE = spsr_irq
	LDMFD	sp!, {r4}
	ORR		lr, lr,	#0x80			 ; Mask irq for context switching before 
	MSR		cpsr_cxsf, lr 			 ; returning back from irq mode.

	SUB		sp, sp, #4				 ; Space for PC
	STMFD	sp!, {r0-r12, lr}
	LDR		r4, =LINK_SAVE
	LDR		lr, [r4, #0]
	SUB		lr, lr, #4				 ; lr = LINK_SAVE - 4,
	STR		lr, [sp, #(14*4)]		 ; the return address for pc.
	LDR		r4, [r4, #4]			 ; r4 = PSR_SAVE,
	STMFD	sp!, {r4}		         ; CPSR of the task

	LDR		r4, addr_OSTCBCur
	LDR		r4, [r4]
	STR		sp, [r4]				 ; OSTCBCur -> stkptr = sp

	LDR		r0, =I_ISPC
	LDR		r1, =BIT_TIMER0
	STR		r1, [r0]

	BL	OSIntEnter
	BL 	OSTimeTick
	BL	OSIntExit

	LDMFD 	sp!, {r4}                ; pop new task cpsr
	MSR 	cpsr_cxsf, r4
	LDMFD 	sp!, {r0-r12,lr,pc}      ; pop new task r0-r12,lr & pc
	
;test
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Function:		TIMER2ISR																				;
; Purpose:		Timer0 Interrupt Sever																	;
; Processing:	Call OSTimeTick																			;
; Parameters: 	void																					;
; Outputs:		None																					;
; Returns:		void																					;
; Notes:																								;					
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	EXPORT 	TIMER2ISR
TIMER2ISR
	STMFD	sp!, {r4}
	LDR		r4, =LINK_SAVE
	STR		lr, [r4]				 ; LINK_SAVE = lr_irq
	MRS		lr,	spsr
	STR		lr, [r4, #4]			 ; PSR_SAVE = spsr_irq
	LDMFD	sp!, {r4}
	ORR		lr, lr,	#0x80			 ; Mask irq for context switching before 
	MSR		cpsr_cxsf, lr 			 ; returning back from irq mode.

	SUB		sp, sp, #4				 ; Space for PC
	STMFD	sp!, {r0-r12, lr}
	LDR		r4, =LINK_SAVE
	LDR		lr, [r4, #0]
	SUB		lr, lr, #4				 ; lr = LINK_SAVE - 4,
	STR		lr, [sp, #(14*4)]		 ; the return address for pc.
	LDR		r4, [r4, #4]			 ; r4 = PSR_SAVE,
	STMFD	sp!, {r4}		         ; CPSR of the task

	LDR		r4, addr_OSTCBCur
	LDR		r4, [r4]
	STR		sp, [r4]				 ; OSTCBCur -> stkptr = sp

;	LDR		r0, =I_ISPC
;	LDR		r1, =BIT_TIMER2
;	STR		r1, [r0]

	BL	OSIntEnter
	BL 	TIMER2ISR2
	BL	OSIntExit

	LDMFD 	sp!, {r4}                ; pop new task cpsr
	MSR 	cpsr_cxsf, r4
	LDMFD 	sp!, {r0-r12,lr,pc}      ; pop new task r0-r12,lr & pc

;test





	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Functions: 	ARMDisableInt	ARMEnableInt															;
; Purpose:		Disable and enable IRQ and FIQ preserving current CPU mode.								;
; Processing:	Push the cpsr onto the stack, Disable IRQ and FIQ interrupts, Return					;
; Parameters: 	void																					;
; Outputs:  	None																					;
; Returns:  	void																					;
; Notes:																								;
;   (1) Can be called from SVC mode to protect Critical Sections. 										;
;   (2) Do not use these calls at interrupt level.														;
;   (3) Used in pairs within the same function level;													;
;   (4) Will restore interrupt state when called; i.e., if interrupts									;
;       are disabled when DisableInt is called, interrupts will still									;
;       still be disabled when the matching EnableInt is called.										;
;   (5) Uses the method described by Labrosse as "Method 2".											;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	EXPORT 	ARMDisableInt
ARMDisableInt
	MRS		r0, cpsr
	STMFD	sp!, {r0}	         	; push current PSR
	ORR		r0, r0, #0xC0
	MSR		cpsr_c, r0		 		; disable IRQ Int s
	MOV	pc, lr

	EXPORT 	ARMEnableInt
ARMEnableInt
	LDMFD	sp!, {r0}				; pop current PSR
	MSR		cpsr_c, r0				; restore original cpsr	
	MOV		pc, lr

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                   CRITICAL SECTION METHOD 3 FUNCTIONS
;
; Description: Disable/Enable interrupts by preserving the state of interrupts.  Generally speaking you
;              would store the state of the interrupt disable flag in the local variable 'cpu_sr' and then
;              disable interrupts.  'cpu_sr' is allocated in all of uC/OS-II's functions that need to 
;              disable interrupts.  You would restore the interrupt disable state by copying back 'cpu_sr'
;              into the CPU's status register.
;              OS_CPU_SR OSCPUSaveSR()
; Arguments  : none
; Returns    : OS_CPU_SR
;              OSCPURestoreSR(OS_CPU_SR cpu_sr)
; Arguments  : OS_CPU_SR
; Returns    : none
; Note(s)    : These functions are used in general like this,
;
;            void Task (void *data)
;            {
;                    #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;                          OS_CPU_SR  cpu_sr;
;                    #endif
;                         :
;                         :
;                    OS_ENTER_CRITICAL(); /* cpu_sr = OSCPUSaveSR(); */
;                         :
;                         :
;                    OS_EXIT_CRITICAL();  /* OSCPURestoreSR(cpu_sr); */
;                         :
;                         :
;            }
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	EXPORT  OSCPUSaveSR
OSCPUSaveSR
	MRS 	r0,CPSR
	ORR 	r1,r0,#0xC0
	MSR		CPSR_c,r1
	MOV		pc,lr

	EXPORT  OSCPURestoreSR
OSCPURestoreSR
	MSR		cpsr_c,r0
	MOV		pc,lr

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;																										;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
K_LINK_SAVE	DCD		0
K_PSR_SAVE	DCD		0
	EXPORT 	OSEINT4567ISR
OSEINT4567ISR
	STMFD	sp!, {r4}
	LDR		r4, =K_LINK_SAVE
	STR		lr, [r4]				 ; LINK_SAVE = lr_irq
	MRS		lr,	spsr
	STR		lr, [r4, #4]			 ; PSR_SAVE = spsr_irq
	LDMFD	sp!, {r4}
	ORR		lr, lr,	#0x80			 ; Mask irq for context switching before 
	MSR		cpsr_cxsf, lr 			 ; returning back from irq mode.

	SUB		sp, sp, #4				 ; Space for PC
	STMFD	sp!, {r0-r12, lr}
	LDR		r4, =K_LINK_SAVE
	LDR		lr, [r4, #0]
	SUB		lr, lr, #4				 ; lr = LINK_SAVE - 4,
	STR		lr, [sp, #(14*4)]		 ; the return address for pc.
	LDR		r4, [r4, #4]			 ; r4 = PSR_SAVE,
	STMFD	sp!, {r4}		         ; CPSR of the task

	LDR		r4, addr_OSTCBCur
	LDR		r4, [r4]
	STR		sp, [r4]				 ; OSTCBCur -> stkptr = sp

	BL	OSIntEnter
	BL 	EInt4567Isr
	BL	OSIntExit

	LDMFD 	sp!, {r4}                ; pop new task cpsr
	MSR 	cpsr_cxsf, r4
	LDMFD 	sp!, {r0-r12,lr,pc}      ; pop new task r0-r12,lr & pc
	
	END
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久777色| 国产一区二区伦理片| 久久精品水蜜桃av综合天堂| 欧美三级韩国三级日本一级| 99国产精品视频免费观看| 国产成人精品综合在线观看| 国产伦精品一区二区三区在线观看| 日本伊人午夜精品| 美女视频免费一区| 久久国产精品免费| 国产成人精品网址| 99re视频这里只有精品| 色综合天天做天天爱| 在线观看一区二区精品视频| 欧美视频日韩视频| 欧美成人国产一区二区| 久久久久久久久一| 综合欧美一区二区三区| 亚洲精品v日韩精品| 日韩精品一级二级 | 91视频观看免费| 99精品国产热久久91蜜凸| 色婷婷综合五月| 欧美四级电影在线观看| 欧美顶级少妇做爰| 国产日韩欧美综合一区| 中文字幕一区二区三区四区 | 777精品伊人久久久久大香线蕉| 欧美日韩国产一级二级| 久久人人爽爽爽人久久久| 国产精品福利电影一区二区三区四区| 一区二区三区免费在线观看| 日韩电影免费一区| 成人av片在线观看| 91精品在线免费| 久久久www成人免费无遮挡大片| 亚洲丝袜自拍清纯另类| 麻豆极品一区二区三区| 北条麻妃一区二区三区| 91精品国模一区二区三区| ww亚洲ww在线观看国产| 一区二区三区鲁丝不卡| 蜜桃久久久久久| 色乱码一区二区三区88| 精品国产乱码久久久久久闺蜜| 国产精品久久久久久久久晋中 | 日韩一区二区三免费高清| 国产精品色哟哟| 六月婷婷色综合| 在线视频欧美精品| 国产精品美女久久久久久| 日本免费新一区视频| 色婷婷综合久久久中文字幕| 久久精品人人做人人爽人人| 亚洲影视在线播放| 91同城在线观看| 久久这里只有精品首页| 日韩高清在线电影| 欧美日韩一区二区三区免费看| 欧美国产国产综合| 91理论电影在线观看| 久久亚洲精华国产精华液 | 国产一区二区三区四区五区美女| 欧美优质美女网站| 中文字幕一区在线观看视频| 国产乱妇无码大片在线观看| 欧美一区二区三区免费视频| 亚洲老妇xxxxxx| 色综合久久88色综合天天| 国产精品理论在线观看| 成人免费毛片嘿嘿连载视频| 日韩精品一区二区三区在线观看 | 国产精品资源站在线| 精品精品国产高清一毛片一天堂| 亚洲aⅴ怡春院| 91.com视频| 日韩精品乱码av一区二区| 欧美卡1卡2卡| 日本免费新一区视频| 91麻豆精品久久久久蜜臀| 亚洲mv在线观看| 欧美午夜片在线观看| 亚洲电影中文字幕在线观看| 欧美色精品在线视频| 一区二区三区在线免费视频| 色94色欧美sute亚洲13| 亚洲精品国产第一综合99久久 | 精品久久久久香蕉网| 日韩成人免费电影| 日韩精品资源二区在线| 丰满白嫩尤物一区二区| 久久午夜免费电影| 国产91丝袜在线观看| 综合激情成人伊人| 欧美伊人精品成人久久综合97 | 国产精品传媒入口麻豆| 91美女在线看| 偷拍与自拍一区| 日韩欧美国产1| 国产精品一区二区无线| 亚洲欧洲性图库| 欧美性大战久久久久久久| 奇米色777欧美一区二区| 久久日韩粉嫩一区二区三区| jizz一区二区| 午夜激情一区二区| 久久综合久久综合亚洲| 不卡的电影网站| 午夜欧美电影在线观看| 欧美精品一区二区三区久久久| 国产99精品在线观看| 亚洲一级在线观看| 精品1区2区在线观看| av不卡免费在线观看| 日日夜夜免费精品| 欧美国产精品久久| 欧美精品日韩一本| 国产91综合一区在线观看| 亚洲综合免费观看高清完整版在线| 欧美一区二区福利在线| 99精品热视频| 国内成人免费视频| 亚洲一区影音先锋| 国产偷国产偷亚洲高清人白洁| 色偷偷久久人人79超碰人人澡| 国产一区二区在线视频| 亚洲自拍另类综合| 国产精品久久久久久久久动漫 | 欧美成人一区二区三区在线观看 | 欧美日韩一区二区欧美激情| 国产超碰在线一区| 午夜激情一区二区三区| 一区二区三区日韩精品| 国产亚洲一区字幕| 欧美成人性战久久| 欧美日韩一区二区三区高清| 91老师片黄在线观看| 国产成人自拍在线| 老司机精品视频一区二区三区| 亚洲一区二区三区四区五区黄| 国产精品午夜在线| 久久久久国产成人精品亚洲午夜| 这里只有精品99re| 欧美日韩精品一区二区三区蜜桃 | 国产电影一区在线| 激情欧美一区二区三区在线观看| 亚洲成人自拍一区| 一区二区高清在线| 亚洲免费在线观看视频| 国产精品卡一卡二卡三| 国产日韩欧美综合一区| 久久久久久亚洲综合影院红桃| 欧美一区二区三区啪啪| 欧美一区二区三区系列电影| 欧美欧美午夜aⅴ在线观看| 91网站最新地址| 色狠狠色狠狠综合| 欧美三级一区二区| 欧美午夜一区二区| 欧美肥胖老妇做爰| 日韩欧美卡一卡二| 精品成人一区二区三区| 久久久久久久久伊人| 国产清纯白嫩初高生在线观看91| 久久精品日韩一区二区三区| 国产亚洲欧洲一区高清在线观看| 久久久久久久一区| 国产精品美女久久久久高潮| 亚洲三级电影全部在线观看高清| 一区在线播放视频| 一区二区在线观看av| 亚洲mv大片欧洲mv大片精品| 午夜精品福利一区二区蜜股av | 高潮精品一区videoshd| www.99精品| 欧美性高清videossexo| 欧美一区二区视频在线观看2022| 日韩精品一区二区三区三区免费 | 性欧美大战久久久久久久久| 亚洲午夜久久久久久久久电影院| 婷婷综合在线观看| 国产精品主播直播| 日本韩国精品在线| 欧美一级黄色大片| 日本一区二区三区久久久久久久久不| 亚洲欧洲日韩av| 日韩精品电影在线观看| 经典一区二区三区| 99re在线精品| 欧美成人aa大片| 亚洲裸体xxx| 久久草av在线| 在线看国产一区| 2020国产精品自拍| 夜夜精品浪潮av一区二区三区| 精品在线你懂的| 欧美性xxxxxxxx| 国产欧美一区二区精品性色超碰| 亚洲一区在线观看免费| 国产成人亚洲精品青草天美|