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

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

?? os_cpu_a.s

?? 建立兩個任務
?? S
字號:

 //     AREA	|subr|, CODE, READONLY

/*;/***********************************************************************
;
; 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()
;
;*********************************************************************/
	.global 	OSStartHighRdy
	.extern    OSTaskSwHook,OSTCBHighRdy,OSRunning
OSStartHighRdy:
        BL 	OSTaskSwHook            // ; Call user-defined hook function

        LDR 	r4,=OSRunning         //   ; Indicate that multitasking has started
        MOV 	r5, #1                   
        STRB 	r5, [r4]              //   ; OSRunning = true

        LDR 	r4, =OSTCBHighRdy     //   ; Get highest priority task TCB address
        LDR 	r4, [r4]              //   ; get stack pointer
        LDR 	sp, [r4]              //   ; switch to the new stack

//; next two lines removed by YJ
//;        LDMFD 	sp!, {r4}             //   ; pop new task s spsr_cxsf
//;        MSR 	spsr_cxsf, r4
        LDMFD 	sp!, {r4}              //  ; pop new task s psr
        MSR 	cpsr, r4
        LDMFD 	sp!, {r0-r12,lr,pc}    //  ; pop new task s r0-r12,lr & pc

 	
/***********************************************************************
;
; 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.
;
;*********************************************************************/
        .global 	OSCtxSw
        .extern	OSPrioCur,OSPrioHighRdy,OSTCBCur,OSTaskSwHook,OSTCBHighRdy
OSCtxSw:
        STMFD 	sp!, {lr}               // ; push pc (lr is actually be pushed in place of PC)
        STMFD 	sp!, {r0-r12,lr}       //  ; push lr & register file

        MRS 	r4, cpsr
        STMFD 	sp!, {r4}            //    ; push current psr
//; next two lines removed by YJ
   //;     MRS 	r4, spsr
    //;    STMFD 	sp!, {r4}              //  ; push current spsr_cxsf


        
        LDR 	r4, =OSTCBCur          //  ; Get current task TCB address
        LDR		r5, [r4]
        STR 	sp, [r5]               //  ; store sp in preempted tasks s TCB

_OSCtxSw:
		BL 	OSTaskSwHook                // call Task Switch Hook

        LDR 	r5, =OSTCBHighRdy      //; Get highest priority task TCB address
        LDR		r5, [r5]
        STR		r5, [r4]			//; OSTCBCur = OSTCBHighRdy
        
        LDR 	r6, =OSPrioHighRdy       
        LDRB 	r6, [r6]
        LDR 	r4, =OSPrioCur           
        STRB 	r6, [r4]			//; OSPrioCur = OSPrioHighRdy
        
        LDR 	sp, [r5]              // ; get new task s stack pointer

//;; next two lines removed by YJ
//;;        LDMFD 	sp!, {r4}                ; pop new task spsr_cxsf
//;;        MSR 	spsr_cxsf, r4

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

/*;***********************************************************************
;
; 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:
;   Sets up the stacks and registers to call the task level
;   context switch
;
;*********************************************************************/
       .global 	OSIntCtxSw
//;----------------------------------------------------------------
//; modefied by YJ
//;----------------------------------------------------------------
//; added starts --------------<<
		.extern OSTaskSwHook
OSIntCtxSw:
		BL		OSTaskSwHook
		
		LDR		r4, =OSTCBHighRdy
		LDR		r4, [r4]
		LDR		r5, =OSTCBCur
		STR		r4, [r5]			//	 ; OSTCBCur = OSTCBHighRdy

		LDR		r6, =OSPrioHighRdy
		LDRB	r6, [r6]
		LDR		r5, =OSPrioCur
		STRB	r6, [r5]			//	 ; OSPrioCur = OSPrioHighRdy

		LDR		sp, [r4]
		LDMFD 	sp!, {r4}			//	 ; pop new task cpsr
		MSR 	cpsr, r4
		LDMFD 	sp!, {r0-r12,lr,pc}	//	 ; pop new task r0-r12,lr & pc
/*; >>---------------- added ends

; removed starts ------------<<
;        IMPORT	OSIntCtxSwFlag
;OSIntCtxSw
;        LDR 	r0, =OSIntCtxSwFlag      ; OSIntCtxSwFlag = true
;        MOV 	r1, #1
;        STR 	r1, [r0]
;        
;        MOV 	pc, lr                   ; return 
; >>-------------- removed ends
;----------------------------------------------------------------
; end of modification
;----------------------------------------------------------------*/

/***********************************************************************
;
;yangye 2003-2-14
;changed this function name from OSTickISR to OSISR(it is not a TICK isr)
; Function: OSISR
;
; Purpose:
; 	   The IRQ interrupt handler
;
; Processing:
;    Saves context
;    Calls the IRQ dispatcher
;    Checks if context switch necessary
;    If not, restores context and returns from interrupt
;    If switch required, branches without link to IRQContextSwap
;       which performs context switch if interrupts not nested
;       and returns from interrupt to new context
;
; Parameters: void
;
; Outputs:  None
;
; Returns:  void
;
; Notes:
;   (1) here we use OSIntCtxSwFlag to indicate a request for int-level 
;       context switch 
;   (2) _IntCtxSw is used to perform a real switch operation
;
;*********************************************************************/	

//;----------------------------------------------------------------------
//; modified by YJ
//;----------------------------------------------------------------------
//; added starts <<------------------------------------------------------
	.global 	OSTickISR
	.extern	OSIntEnter,OSTimeTick,tick_hook,OSIntExit

LINK_SAVE: .word	0
PSR_SAVE:  .word	0

OSTickISR:
    ldmia    r13!,{r0-r8,r12,r14}
	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, 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, =OSTCBCur
	LDR		r4, [r4]
	STR		sp, [r4]			//	 ; OSTCBCur -> stkptr = sp

//;	BL  DmpStk
	BL	OSIntEnter
	BL 	OSTimeTick
	BL	tick_hook  	                 //; here do_IRQ is used to clear some virtual-hardware flags
	BL	OSIntExit
//;	BL  DmpStk

//;	LDR		r4, =OSTCBHighRdy
 //   stmdb    r13!,{r0-r8,r12,r14}

	LDMFD 	sp!, {r4}               // ; pop new task cpsr
	MSR 	cpsr, r4
	LDMFD 	sp!, {r0-r12,lr,pc}     // ; pop new task r0-r12,lr & pc
/*; --------------------------------------------------------->> added ends


; --------------------------------------------------------->> removed ends*/
	
	
/***********************************************************************
;
; 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".
;
;*********************************************************************/
        .global 	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

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


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美怡红院视频| 手机精品视频在线观看| 亚洲特黄一级片| 日日夜夜免费精品| 91麻豆swag| 精品美女一区二区| 亚洲风情在线资源站| 国产盗摄精品一区二区三区在线 | 91传媒视频在线播放| 欧美一区二区三区不卡| 亚洲免费色视频| 成人免费视频国产在线观看| 欧美一区二区三区免费大片| 亚洲一区在线免费观看| 风流少妇一区二区| 亚洲精品在线免费播放| 日韩高清在线观看| 欧美日韩中文国产| 一区二区高清视频在线观看| av一区二区三区四区| 久久老女人爱爱| 精品亚洲porn| 欧美大肚乱孕交hd孕妇| 婷婷综合在线观看| 欧美日韩一本到| 一区二区三区在线视频免费观看| 成人高清免费观看| 欧美国产日本韩| 丁香啪啪综合成人亚洲小说 | 国产成人在线看| 欧美精品一区二区三区久久久| 午夜精品福利一区二区三区蜜桃| 色94色欧美sute亚洲13| 亚洲视频一区二区免费在线观看| 成人午夜免费电影| 国产精品国产三级国产三级人妇| 国产成人精品综合在线观看 | 2024国产精品| 精品亚洲免费视频| 26uuu久久综合| 国产成人精品三级| 国产精品毛片久久久久久| 白白色亚洲国产精品| 中文字幕欧美一| 一本一道久久a久久精品综合蜜臀| 国产精品电影院| 在线国产亚洲欧美| 午夜激情一区二区| 欧美成人高清电影在线| 国产一区二区三区四区五区入口 | 久久久www成人免费毛片麻豆 | 国产在线精品不卡| 国产欧美一区二区在线| 成人午夜又粗又硬又大| 亚洲免费大片在线观看| 欧美精品乱码久久久久久| 久久精品72免费观看| 久久综合资源网| 成人av第一页| 午夜一区二区三区视频| 精品国产青草久久久久福利| 国产成人啪免费观看软件| 亚洲三级在线观看| 日韩一区二区三区四区五区六区| 国产在线精品国自产拍免费| 国产精品成人免费在线| 欧美日本高清视频在线观看| 国产一区二区免费在线| 亚洲欧美日韩电影| 日韩精品在线一区二区| aaa亚洲精品| 免费国产亚洲视频| ...xxx性欧美| 欧美不卡一区二区三区| 91在线视频免费91| 久久精品国产澳门| 亚洲青青青在线视频| 日韩欧美一二区| 色综合av在线| 国产毛片精品国产一区二区三区| 亚洲精品视频自拍| 久久夜色精品国产噜噜av| 91福利社在线观看| 国产精品中文有码| 日韩高清一区二区| 亚洲欧美一区二区在线观看| 欧美大白屁股肥臀xxxxxx| 91国偷自产一区二区三区观看 | 精久久久久久久久久久| 亚洲麻豆国产自偷在线| 精品国产第一区二区三区观看体验 | 久久精品人人做| 欧美久久婷婷综合色| gogo大胆日本视频一区| 韩国av一区二区| 日韩国产欧美在线观看| 亚洲欧美日韩一区二区三区在线观看 | 26uuu亚洲| 91精品国产综合久久精品麻豆 | 中文字幕+乱码+中文字幕一区| 欧美日韩国产高清一区| 91免费观看国产| 成人做爰69片免费看网站| 麻豆国产一区二区| 日韩精品电影在线观看| 亚洲夂夂婷婷色拍ww47| 综合自拍亚洲综合图不卡区| 国产欧美日韩久久| 国产午夜精品久久久久久久| 精品久久久久久久久久久久包黑料 | av在线不卡电影| 丰满岳乱妇一区二区三区| 激情综合网激情| 久久精品噜噜噜成人av农村| 日本欧美在线看| 午夜激情一区二区三区| 亚洲成人精品一区二区| 亚洲高清三级视频| 午夜电影一区二区| 亚洲v中文字幕| 午夜精品久久久久久| 日韩精品1区2区3区| 日韩成人一区二区| 精品一区精品二区高清| 久久91精品国产91久久小草| 精品一区免费av| 国产99久久久国产精品| 成人美女在线观看| 91小视频免费看| 欧美亚洲自拍偷拍| 91精品国产91久久久久久一区二区| 91精品婷婷国产综合久久竹菊| 欧美美女网站色| 日韩美女主播在线视频一区二区三区| 日韩写真欧美这视频| 久久久美女艺术照精彩视频福利播放| 欧美精品一区二区三区视频| 国产精品免费久久久久| 亚洲精品成a人| 奇米色777欧美一区二区| 精品一区二区三区免费视频| 国产成人精品网址| 色88888久久久久久影院按摩| 精品视频一区二区三区免费| 日韩三级在线观看| 国产欧美精品区一区二区三区| 国产精品免费网站在线观看| 亚洲一区二区不卡免费| 麻豆精品在线看| 97久久精品人人澡人人爽| 欧美日韩精品一区视频| 精品国产乱码91久久久久久网站| 国产精品欧美一区喷水| 亚洲成av人片观看| 精品一区二区三区香蕉蜜桃 | 九九视频精品免费| 不卡一区二区三区四区| 欧美人妖巨大在线| 日本一区二区三区电影| 午夜精品福利一区二区蜜股av| 国产美女一区二区| 欧美日韩黄色影视| 日韩高清不卡在线| www.亚洲激情.com| 欧美色综合网站| 久久综合色8888| 亚洲欧美色图小说| 国产成人午夜电影网| 欧美三级资源在线| 国产精品三级久久久久三级| 奇米精品一区二区三区在线观看 | 久久精品国产一区二区三| 97久久久精品综合88久久| 日韩欧美在线观看一区二区三区| 1000精品久久久久久久久| 国产一区二区三区av电影| 91精品中文字幕一区二区三区| 亚洲欧美另类在线| 国产.欧美.日韩| 欧美一区二区三区小说| 亚洲一区二区三区精品在线| 波多野结衣在线一区| 久久综合色8888| 九一九一国产精品| 日韩三级电影网址| 午夜免费久久看| 91极品美女在线| 亚洲女人的天堂| 99国产精品久久久久| 亚洲国产成人私人影院tom| 美女网站色91| 678五月天丁香亚洲综合网| 亚洲一区二区三区精品在线| 91麻豆文化传媒在线观看| 亚洲欧洲日韩女同| 国产精品综合网| 国产亚洲欧美日韩日本| 国产在线精品国自产拍免费| 亚洲精品在线免费观看视频| 久久99国产精品麻豆|