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

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

?? os_cpu_a.s

?? ARM7TDMI軟件模擬器
?? S
字號:
;/****************************************************
; $Workfile:   os_cpu_a.S   for SkyEye simulator    $
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Email:   lmcs00;mails.tsinghua.edu.cn            $
; $Date: 2003/02/19 02:42:22 $
;****************************************************/
;/****************************************************
; $Workfile:   os_cpu_a.S   for SkyEye simulator    $
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Email:   chenyu;hpclab.cs.tsinghua.edu.cn        $
; $Email:   lmcs00;mails.tsinghua.edu.cn            $
; $Date: 2003/02/19 02:42:22 $
;****************************************************/
;/***************************************************
; $Workfile:   os_cpu_a.S   for SkyEye simulator    $
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Email:   chenyu;hpclab.cs.tsinghua.edu.cn        $
; $Email:   lmcs00;mails.tsinghua.edu.cn            $
; $Date: 2003/02/19 02:42:22 $
;****************************************************/
;/***************************************************
; $Workfile:   Os_cpu_a.s  $
; $Revision: 1.1.1.1 $
; $Author: skyeye $
; $Date: 2003/02/19 02:42:22 $
; **************************************************/

;/***************************************************
; 代碼基本上基于uCOS-II 在skyeye ARM 系統上的移植 
; 并依照<<uC/OS-II 嵌入式實時操作系統>>規整代碼并注釋
; 
;	李強(mail2li in C51BBS)
;		mail2li@21cn.com or mail2li@163.com
;				03.11.28
; **************************************************/

;;**************************************************************
;;ucosII for simuCPU,you can only free use it for personal study purpose!
;;www.MShowTec.com for more information.
;;lmjx,Email:limiao@yeah.com,All Right Reserved.
;;**************************************************************

;/*
;**ucosII for simuCPU,you can only free use it for personal study purpose!
;**www.MShowTec.com for more information.
;**lmjx,Email:limiao@yeah.com,All Right Reserved.
;**/

;/********************************************************************/
        AREA	OSCPUASM, 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()
;
;*********************************************************************/
	EXPORT 	OSStartHighRdy
	IMPORT	OSTaskSwHook
	IMPORT  OSTCBHighRdy 
	IMPORT  OSRunning
OSStartHighRdy
;1. 調用OSTaskSwHook();
        BL 	OSTaskSwHook             ; Call user-defined hook function

;2.	Get the stack pointer of the task to resume: sp = OSTCBHighRdy->OSTCBStkPtr;
        LDR 	r4, =OSTCBHighRdy        ; Get highest priority task TCB address
        LDR 	r4, [r4]                 ; get stack pointer
        LDR 	sp, [r4]                 ; switch to the new stack

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

;4.5. Restore all processor registers from the new task stack	and return 

       ; LDMFD 	sp!, {r4}                ; pop new task s psr
       ; MSR 	cpsr_cxsf, 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:
;   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
	EXPORT 	OS_TASK_SW
	IMPORT	OSPrioCur
	IMPORT	OSPrioHighRdy
	IMPORT	OSTCBCur
	IMPORT	OSTaskSwHook
	IMPORT	OSTCBHighRdy

OS_TASK_SW
OSCtxSw
;1.	保存當前處理器寄存器;	<<<
		STMFD 	sp!, {lr}				; push pc 實際上push lr 是為了在pop的時候 直接獲得新pc值
		STMFD 	sp!, {r0-r12,lr}		; push lr & register file
		
		
		;MRS 	r4, cpsr
		;STMFD 	sp!, {r4}				; push current psr
		; move by LQ
;		MRS 	r4, spsr						
;		STMFD 	sp!, {r4}				; push current spsr
		; end of move by LQ
		

_OSCtxSw
;2.	將當前任務的堆棧指針保存到當前任務的OS_TCB中:OSTCBCur->OSTCBStkPtr = sp;
		LDR 	r4, =OSTCBCur		    ; Get current task TCB address
		LDR 	r5, [r4]
		STR 	sp, [r5]				 ; store sp in preempted tasks s TCB

;3.	調用用戶定義的OSTaskSwHook();
		BL 	OSTaskSwHook		     ; call Task Switch Hook

;4.	OSTCBCur  = OSTCBHighRdy;
		LDR		r4, =OSTCBHighRdy
		LDR		r4, [r4]
		LDR		r5, =OSTCBCur
		STR		r4, [r5]				 ; OSTCBCur = OSTCBHighRdy

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

;6.	得到需要恢復的任務的堆棧指針: sp = OSTCBHighRdy->OSTCBStkPtr;
		LDR 	r6, =OSTCBHighRdy		; Get highest priority task TCB address
		LDR 	r6, [r6]
		LDR 	sp, [r6]				; get new task s stack pointer
		

;7.8.將寄存器從新任務的堆棧中恢復出來(切換現場并return);
		; move by LQ
;		LDMFD 	sp!, {r4}				; pop new task spsr
;		MSR 	spsr_cxsf, r4
		; end of move, by LQ
		;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 of OSCtxSw

;/***********************************************************************
;
; 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
;
;*********************************************************************/
        EXPORT 	OSIntCtxSw

;/*
* SAVED_LR_IRQ,SAVED_LR_USR 兩變量是用來轉存不同mode(irq,user)下arm的lr值的 
* 因為無法使用sp傳遞 有要保護寄存器 所以地址范圍只能在0x7fff范圍類 這樣就無法
* 使用data空間 所以移植的時候 必須注意這部分代碼必須放在可以讀寫的SRAM/SDRAM中
;*/

SAVED_LR_IRQ	DCD   0
SAVED_LR_USR	DCD   0
		
OSIntCtxSw        
;0. 調整OSIntCtxSw被OSIntExit調用后產生的堆棧告別 
		ADD		sp,sp,#0xC		; !!! 警告 這部分數值和編譯器很有關 這種方式也不是最好的

_OSIntCtxSw
;0. 修復ARM從IRQ模式切換為USER模式帶來的sp和lr的自動改變 希望有人能提出更好的方法 pls tell me
	    ;LDMFD 	sp!, {r4}               ; pop spsr_irq
		;MSR 	spsr_cxsf, r4
		LDMFD	sp!, {r0-r12, lr}       ; pop r0,r1,...

		STR		lr, SAVED_LR_IRQ         ; save lr_irq to SAVED_LR_IRQ
		ADDS	pc, pc, #0x4          	 ; force change cpsr to mode before irq

		STR     lr, SAVED_LR_USR         ; save lr_svc to SAVED_LR_SVC
		LDR		lr, SAVED_LR_IRQ         ; get lr_irq (where does the irq happend or the return of pc after irq)
		STMFD 	sp!, {lr}                ; push future task pc (lr_irq should be pushed in place of PC)
		LDR		lr, SAVED_LR_USR         ; get lr_svc value saved in SAVED_LR_SVC

        STMFD 	sp!, {r0-r12,lr}         ; push lr & r0-r12 register file
        ;MRS 	r4, cpsr
        ;STMFD 	sp!, {r4}                ; push current psr
        b		_OSCtxSw

;/***********************************************************************
;base on sky version :yangye 2003-2-14 -> OSISR
;
; Function OSISR
;	
; READ FIRST:
;	be GBA bios has a irq mode handler as flow:
;	1>	push {r0-r3,r12,lr}
;	2>	call *(0x3008000-4)(void)
;	3>	pop  {r0-r3,r12,lr}
;	4>	reti 						;SPSR->CPSR
;	so I had to resume register file at first in my OSISR 
;	and then force leave irq_mode
;
; Parameters void
;
; Outputs  None
;
; Returns  void
;
; Notes
;	GBA bios use the func-pointer that save in 0x3008000-4 
;	So I save the OSISR pointer in the space in boot.s
;	the isr-func-table also useful and OSTICKIRQ is IRQ_TIMER3
;
;*********************************************************************/;
		EXPORT	OSISR
		IMPORT	OSIntEnter
		IMPORT	InterruptHandler_IRQ
		IMPORT	OSIntExit
OSISR
;1. 保存處理器寄存器;
	SUB		lr, lr, #4				; lr-4 to push
	STMFD	sp!, {r0-r12, lr}       ; push r0-r12 register file and lr( pc return address )
    MRS 	r4, spsr
	STMFD 	sp!, {r4}               ; push current spsr_irq ( =cpsr_svc )
	
;2. 調用OSIntEnter() 告訴OS有中斷發生
	BL	OSIntEnter

;3. 處理中斷任務 本移植中將進入irq.c的14個中斷服務函數 其中TICK源TIMER3 需要額外多執行OSTimeTick()函數
	

	BL	InterruptHandler_IRQ                   

;4. 調用OSIntExit() 告訴OS中斷完成 并且如果有必要將切換任務
	BL	OSIntExit
	

;5. 恢復處理器寄存器 & reti
	LDMFD 	sp!, {r4}                ; get cpsr_svc from stack
	MSR     spsr_cxsf, r4            ; prepare spsr to return svc mode
	LDMFD	sp!, {r0-r12, pc}^       ; reti it make spsr --> cpsr


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

;/*
;
; 對GBA將REG_IME寫○也可以停止全局中斷 不過代碼長度和關閉CPSR的中斷位相等
;
;*/
	EXPORT 	ARMDisableInt

ARMDisableInt

	
	MRS	r0, cpsr
	;STMFD	sp!, {r0}	         ; push current PSR
	ORR	r0, r0, #0x80
	MSR	cpsr_cxsf, r0		 ; disable IRQ Int s

	MOV	pc, lr

    ;------------------------------------------------------------------------
	EXPORT 	ARMEnableInt

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


	MRS	r0, cpsr
	BIC 	r0, r0, #0x80
	BIC 	r0, r0, #0x40
	MSR	cpsr_cxsf, r0

	MOV	pc, lr
    ;------------------------------------------------------------------------


	
	END	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品网址| 亚洲影院在线观看| 亚洲精品网站在线观看| 亚洲国产精品一区二区久久恐怖片| 亚洲18色成人| 国产又黄又大久久| 91在线国产福利| 欧美一卡二卡在线| 最新欧美精品一区二区三区| 亚洲第一搞黄网站| 国产盗摄一区二区| 欧美剧情电影在线观看完整版免费励志电影 | 一本一道久久a久久精品| 欧美日韩aaa| 日本一二三不卡| 亚洲自拍偷拍麻豆| 国产精品一区2区| 欧美日韩在线直播| 国产精品免费看片| 青青草91视频| 色老汉av一区二区三区| 久久奇米777| 婷婷夜色潮精品综合在线| 国产suv精品一区二区三区| 91久久精品一区二区三| 久久综合av免费| 亚洲最大成人网4388xx| 成人欧美一区二区三区白人| 奇米四色…亚洲| 日本国产一区二区| 欧美精品一区男女天堂| 久久久一区二区三区| 香蕉久久夜色精品国产使用方法 | 在线视频国产一区| 久久久久久久网| 亚洲自拍偷拍图区| 99免费精品在线观看| 欧美一级爆毛片| 亚洲国产精品久久久久婷婷884 | 久久综合九色综合97婷婷女人 | 亚洲韩国一区二区三区| 国产酒店精品激情| 91精品国产综合久久香蕉麻豆| 国产婷婷色一区二区三区四区| 一区二区三区日韩欧美| 丁香婷婷深情五月亚洲| 91精品国产手机| 亚洲精品午夜久久久| 国产精品香蕉一区二区三区| 欧美一级片在线| 亚洲激情一二三区| 成人黄色电影在线 | 精品一区二区三区免费| 欧美中文字幕不卡| 亚洲精品成人精品456| 精品一区二区三区在线播放| 日韩一区二区三区在线| 曰韩精品一区二区| 91亚洲国产成人精品一区二三| 久久一区二区三区四区| 日韩国产精品91| 欧美性xxxxxxxx| 国产精品久久久久一区二区三区 | 欧美在线看片a免费观看| 自拍偷拍亚洲综合| 国产91精品在线观看| 久久久久久免费毛片精品| 日韩av午夜在线观看| 在线播放国产精品二区一二区四区| 亚洲欧美自拍偷拍| 91碰在线视频| 国产精品国产三级国产aⅴ原创 | 国产精品美女视频| 国产麻豆精品在线观看| 久久久精品日韩欧美| 久久国产精品99精品国产| 日韩片之四级片| 奇米777欧美一区二区| 日本精品视频一区二区三区| 亚洲精品欧美在线| 94-欧美-setu| 玉米视频成人免费看| 成人激情免费电影网址| 亚洲人成小说网站色在线| 成人免费观看av| 一区二区中文视频| 不卡av电影在线播放| 亚洲色图.com| 色婷婷久久综合| 亚洲成av人片在线观看无码| 欧美日韩另类一区| 蜜臀a∨国产成人精品| 日韩欧美高清一区| 亚洲精品美国一| 欧美视频中文字幕| 天天综合日日夜夜精品| 欧美tk—视频vk| 国产成人h网站| 怡红院av一区二区三区| 欧美性一二三区| 青青草成人在线观看| 精品国产乱码久久久久久老虎 | 精品视频一区 二区 三区| 日韩 欧美一区二区三区| 91麻豆精品国产91久久久久| 日本欧美韩国一区三区| 精品国产三级电影在线观看| 国产凹凸在线观看一区二区| 日韩理论电影院| 欧美色综合久久| 免费观看成人鲁鲁鲁鲁鲁视频| 国产三级一区二区三区| av电影天堂一区二区在线 | 欧美猛男男办公室激情| 久久精品国产一区二区三| 亚洲国产精品激情在线观看| 99国产精品国产精品毛片| 视频一区二区三区在线| 久久综合色天天久久综合图片| 色综合天天综合网天天狠天天| 亚洲在线视频一区| 久久综合色婷婷| 91女人视频在线观看| 久久精品久久久精品美女| 中文欧美字幕免费| 欧美一区二区视频网站| 国产盗摄一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 久久综合色天天久久综合图片| 91蜜桃在线观看| 蜜桃一区二区三区在线| 一区二区三区日韩欧美| 欧美xfplay| 欧美三级中文字| 狠狠色2019综合网| 亚洲国产精品人人做人人爽| 精品久久久久久久久久久院品网 | 99精品视频在线免费观看| 爽好多水快深点欧美视频| 久久久久久久国产精品影院| 91亚洲精品一区二区乱码| 美女性感视频久久| 亚洲免费av网站| 欧美va亚洲va| 欧美优质美女网站| 丁香啪啪综合成人亚洲小说 | 风间由美一区二区av101| 日本欧美一区二区| 亚洲欧美在线视频| 欧美激情一二三区| 在线电影国产精品| 欧美在线免费视屏| 岛国一区二区在线观看| 国产资源在线一区| 午夜免费久久看| 国产精品久久久久久亚洲伦| 日韩精品在线一区二区| 在线视频亚洲一区| 波多野结衣中文一区| 久久精品国产精品亚洲精品 | 99re热视频精品| 蜜臀av性久久久久蜜臀aⅴ| 亚洲不卡av一区二区三区| 久久精品无码一区二区三区| 欧美成人激情免费网| 一本到不卡精品视频在线观看| 成人av网站免费观看| 国产精品白丝在线| 中文字幕av一区二区三区高 | 欧美激情一区二区三区全黄| 欧美电影免费观看高清完整版| 国产91在线|亚洲| 国产91高潮流白浆在线麻豆| 天天亚洲美女在线视频| 性做久久久久久久久| 亚洲一区中文在线| 亚洲人成小说网站色在线| 亚洲欧洲综合另类| 国产精品久久精品日日| 中文av一区二区| 国产欧美一区二区在线| 中文字幕乱码一区二区免费| 久久久久久9999| 亚洲国产电影在线观看| 久久久精品人体av艺术| 日本一区二区成人| 国产欧美日韩不卡| 亚洲欧美中日韩| 国产精品美女久久久久久久网站| 欧美精彩视频一区二区三区| 欧美大胆人体bbbb| 久久精品网站免费观看| 日韩精品专区在线影院重磅| 日韩一区二区三区视频在线 | 国产一区二区三区在线看麻豆| 日产国产高清一区二区三区| 日韩中文字幕区一区有砖一区 | 狠狠色狠狠色合久久伊人| 国内精品久久久久影院色 | 中文字幕乱码一区二区免费|