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

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

?? os_cpu_a.s

?? 沒有開發板也可以學ARM。ucos-ii與ZLG-GUI的GBA移植
?? S
字號:
;/********************************************************************************************************/
;/* 文件       os_cpu_a.s
;/* 作者       焦進星
;/* 時間       2008年1月29日
;/* 描述       ucosii 2.85 在GBA上與CPU有關的移植代碼
;/* QQ         376637405
;/* E_mail     wyoujtg@163.com  
;/*            用VisualBoyAdvance 模擬器仿真
;/********************************************************************************************************/


;//模式與標志定義
ARM_MODE_USER           EQU     0x10
ARM_MODE_FIQ            EQU     0x11
ARM_MODE_IRQ            EQU     0x12
ARM_MODE_SVC            EQU     0x13
ARM_MODE_ABORT          EQU     0x17
ARM_MODE_UNDEF          EQU     0x1B
ARM_MODE_SYS            EQU     0x1F

I_BIT                   EQU     0x80
F_BIT                   EQU     0x40
T_BIT                   EQU     0x20

		EXTERN  OSRunning                    ;//聲名輸入
		EXTERN  OSPrioCur
		EXTERN  OSPrioHighRdy
		EXTERN  OSTCBCur
		EXTERN  OSTCBHighRdy
		EXTERN  OSIntNesting
		EXTERN  OSIntExit

		EXPORT  OS_CPU_SR_Save               ;//聲名輸出
		EXPORT  OS_CPU_SR_Restore
		EXPORT  OSStartHighRdy
		EXPORT  OSCtxSw
		EXPORT  OSIntCtxSw		             

;/*******************************************************************************************************/
;/*                                   第三種臨界處理方式                                                */
;/*******************************************************************************************************/
			AREA    |.text|, CODE, READONLY
			CODE32

OS_CPU_SR_Save
        MRS     R0,CPSR                     ;//保存CPSR到R0并禁止IRQ和FIQ中斷
        ORR     R1,R0,#(I_BIT | F_BIT)
        MSR     CPSR_c,R1
        BX      LR                         

OS_CPU_SR_Restore                           ;//將R0恢復到CPSR
        MSR     CPSR_c,R0
        BX      LR

;/********************************************************************************************************/
;/*                                  void OSStartHighRdy(void)                                           */  
;/*                                  進入最高級就緒任務                                                  */
;/********************************************************************************************************/
			AREA    |.text|, CODE, READONLY
			CODE32

OSStartHighRdy

        MSR     CPSR_c, #(I_BIT | F_BIT| ARM_MODE_SYS)	;//進入系統模式并禁止IRQ和FIQ中斷 

        LDR     R4, OS_Running          ;//設定多任務開始標志
        MOV     R5, #1
        STRB    R5, [R4]
                              ; 
        LDR     R4, OS_TCBHighRdy       ;//得到最高優先級任務的TCB地址
        LDR     R6, [R4]                ;//得到該任務堆棧指針
        
        LDR     R4, [R6]                ;//R4(SP) = OSTCBHighRdy->OSTCBStkPtr
        MOV     SP, R4
                                        ;//恢復新任務上下文
        LDMFD   SP!, {R4}               
        MSR     CPSR_c, R4              ;//恢復新任務CPSR 
        LDMFD   SP!, {R0-R12,LR,PC}     ;//恢復新任務上下文
 
;/********************************************************************************************************/
;/*                         void OSCtxSw(void)                                                           */
;/*                         任務級任務切換函數                                                           */
;/********************************************************************************************************/
			AREA    |.text|, CODE, READONLY
			CODE32
OSCtxSw                                 ;//保存任務上下文
        STMFD   SP!, {LR}               ;//保存返回地址(LR代替PC)
        STMFD   SP!, {R0-R12, LR}       ;//保存寄存器
        MRS     R4,  CPSR               ;//保存CPSR
        STMFD   SP!, {R4}

OSCtxSw1
        LDR     R4, OS_TCBCur           ;//OSTCBCur->OSTCBStkPtr = SP
        LDR     R5, [R4]
        STR     SP, [R5]

        LDR     R4, OS_PrioCur          ;//OSPrioCur = OSPrioHighRdy
        LDR     R5, OS_PrioHighRdy
        LDRB    R6, [R5]
        STRB    R6, [R4]

        LDR     R4, OS_TCBCur           ;//OSTCBCur  = OSTCBHighRdy
        LDR     R6, OS_TCBHighRdy
        LDR     R6, [R6]
        STR     R6, [R4]

OSCtxSw2
        LDR     R4, [R6]                ;//R4(SP) = OSTCBHighRdy->OSTCBStkPtr
        MOV     SP, R4
                                        ;//恢復新任務上下文
        LDMFD   SP!, {R4}               
        MSR     CPSR_c, R4              ;//恢復新任務CPSR 
        LDMFD   SP!, {R0-R12,LR,PC}     ;//恢復新任務上下文

;/********************************************************************************************************/
;/*                         void OSIntCtxSw(void)                                                        */
;/*                         中斷級任務切換函數                                                           */
;/********************************************************************************************************/
			AREA    |.text|, CODE, READONLY
			CODE32
OSIntCtxSw
;/********************************************************************
; IRQ STACK <LOW> R4 R14 | SPSR R0 R1 R2 R3 R11 R12 LR(PC) <HIGH>
;********************************************************************/

		ADD		SP, SP, #(0+8)*4		;//因不在IRQ模式保存上下文,先調整IRQ模式堆棧指針
										
		SUB		R0, SP, #3*4			

		MSR     CPSR_c, #(I_BIT | F_BIT | ARM_MODE_SYS)	;// 進入系統模式

        ;//作堆棧轉換
		LDMIA	R0,  {R1-R3}			;// R11,R12,LR(PC)=>R1,R2,R3
		SUB		R0,  R0, #5*4			;// Moving (SPSR, R3-R0)
		STMFD	SP!, {R3}				;// R3(PC)=>[SP]
		STMFD	SP!, {R1-R2, LR}		;// R1(R11),R2(R12),LR=>[SP]
		STMFD	SP!, {R4-R10}			;// R4-R10=>[SP]

		LDMIA	R0,  {R4-R8}			;// SPSR,R0-R3=>R4-R8
		STMFD	SP!, {R4-R8}			;// R4(SPSR),R5-R8(R0-R3)=>[SP]
		
		B		OSCtxSw1		        ;//恢復新任務上下文

;/**********************************************************************************************************/
;/*				                       中斷向量                                                            */
;/**********************************************************************************************************/
    IMPORT     IntrTable                    ;//聲名輸入
    EXPORT     intr_main                    ;//聲名輸出
    
    AREA    |.text|, CODE, READONLY
    CODE32
intr_main

		SUB		LR, LR, #4			        ;//調整和保存 LR_irq 在IRQ 堆棧

		STMFD	SP!, {R0-R3, R11, R12, LR}	;//保存用到的寄存器和LR到IRQ堆棧
									        ;//保存R11是為了用其暫存LR_svc						        
									        						        
		MRS		R14, SPSR		            ;//保存SPSR
		STMFD	SP!, {R14}

	   	LDR		R11, =OSIntNesting	        ;//OSIntNesting++,跟蹤中斷嵌套
		LDRB	R12, [R11]
		ADD		R12, R12,#1
		STRB	R12, [R11]
					             					             	             			            						             
        mov     r3, #0x4000000           ;// REG_BASE
        ldr     r2, [r3,#0x200]!         ;// Read REG_IE
        and     r1, r2, r2, lsr #16      ;// r1 = IE & IF
        ldr     r2, =IntrTable

        ands    r0, r1, #1               ;// V-Blank Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #2               ;// H-Blank Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #4               ;// V Counter Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #8               ;// Timer 0 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x10            ;// Timer 1 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x20            ;// Timer 2 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x40            ;// Timer 3 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x80            ;// Serial Communication Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x100           ;// DMA0 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x200           ;// DMA1 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x400           ;// DMA2 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x800           ;// DMA3 Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x1000          ;// Key Interrupt
        bne     jump_intr
        add     r2, r2, #4
        ands    r0, r1, #0x2000          ;// Cart Interrupt

jump_intr
        strh    r0, [r3, #2]             ;// IF Clear
        ldr     r0, [r2]                 ;// Jump to user IRQ process
        
        MSR		CPSR_c, #ARM_MODE_SVC		;//進入SVC模式 開IRQ和FIQ中斷
		MOV		R11, LR				        ;//R11<-LR_svc,暫存LR_svc
        
       	MOV  	LR, PC	    		        ;//中斷服務例程返回用
       	 
        BX      r0                          ;//執行中斷服務例程
        
		MOV		LR, R11					    ;//恢復LR
		
		MSR		CPSR_c, #(I_BIT | F_BIT | ARM_MODE_IRQ)	;//進入IRQ模式 禁止IRQ和FIQ中斷
		
		BL		OSIntExit		                        ;//調用中斷退出處理 OSIntExit()

		LDR		R0, =OSPrioCur		                    ;//if (OSPrioCur != OSPrioHighRdy) 需要調度
		LDR		R1, =OSPrioHighRdy
		LDRB	R0, [R0]
		LDRB	R1, [R1]
		CMP		R0, R1
		BNE		OSIntCtxSw			                    ;//執行中斷任務切換OSIntCtxSw()

		LDMFD	SP!, {R14}			                    ;//恢復SPSR_irq from從IRQ堆棧
		MSR		SPSR_cxsf, R14

		LDMFD	SP!, {R0-R3, R11, R12, PC}^	            ;//恢復調整后的LR_irq,直接恢復PC返回,執行原子操作恢復新任務CPSR 
		
;/********************************************************************************************************/
;/*                                     指針變量                                                         */
;/********************************************************************************************************/
OS_IntExit
        DCD    OSIntExit

OS_IntNesting
        DCD    OSIntNesting

OS_PrioCur
        DCD    OSPrioCur

OS_PrioHighRdy
        DCD    OSPrioHighRdy

OS_Running
        DCD    OSRunning

OS_TCBCur
        DCD    OSTCBCur

OS_TCBHighRdy
        DCD    OSTCBHighRdy

        END
;/********************************************************************************************************/
;/*                                      結束文件                                                        */
;/********************************************************************************************************/        

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美另类图片小说| 国产精品美女视频| 在线观看91视频| 成人三级伦理片| 国产999精品久久久久久绿帽| 精品一区二区av| 精品亚洲国内自在自线福利| 蜜臀a∨国产成人精品| 青草av.久久免费一区| 免费欧美在线视频| 久久成人麻豆午夜电影| 精品在线你懂的| 国产精一品亚洲二区在线视频| 国产一区二区在线观看免费 | 男男gaygay亚洲| 日韩电影免费在线| 麻豆免费精品视频| 狠狠色丁香婷婷综合| 国产一区二区免费视频| 国产一区二区三区精品视频| 国产乱子伦视频一区二区三区| 国产精品自在在线| 99久久免费精品| 欧美日韩在线三区| av综合在线播放| 精品视频在线视频| 欧美xxxxx牲另类人与| 2021久久国产精品不只是精品| 久久久电影一区二区三区| 国产精品二三区| 亚洲福利电影网| 国产在线一区二区| 高清在线不卡av| 欧美午夜免费电影| 欧美大白屁股肥臀xxxxxx| 国产片一区二区| 亚洲一区成人在线| 精品一区二区三区在线观看国产| 国产精品99久久久久久久女警| aa级大片欧美| 777xxx欧美| 亚洲国产精品av| 亚洲国产欧美另类丝袜| 麻豆精品久久精品色综合| 成人激情小说乱人伦| 欧美专区日韩专区| 精品日韩欧美一区二区| 亚洲欧洲国产日本综合| 午夜精品久久久久久久蜜桃app| 九一九一国产精品| 色综合一个色综合亚洲| 日韩你懂的在线观看| 国产精品福利一区| 激情五月播播久久久精品| www.亚洲国产| 日韩欧美成人激情| 亚洲激情网站免费观看| 国产综合久久久久久鬼色| 91免费在线播放| 337p日本欧洲亚洲大胆色噜噜| 亚洲女同ⅹxx女同tv| 激情图片小说一区| 欧美日韩一区二区三区不卡| 国产欧美日韩卡一| 日韩黄色免费电影| av电影天堂一区二区在线| 欧美电影免费观看高清完整版在| 中文字幕在线观看不卡视频| 久久国产三级精品| 欧美日韩久久一区| 综合久久久久久| 国产精品一二三区| 日韩一区国产二区欧美三区| 亚洲欧美日韩一区| 国产成人免费在线| 日韩免费视频一区二区| 亚洲午夜国产一区99re久久| 成人午夜av电影| 久久亚洲一级片| 午夜欧美电影在线观看| 91啪亚洲精品| 国产精品久久久久久久蜜臀 | 国产成人精品亚洲777人妖| 欧美精品精品一区| 亚洲一区在线看| 91小视频在线免费看| 国产亚洲美州欧州综合国 | 欧美日韩精品免费| 亚洲美腿欧美偷拍| 成+人+亚洲+综合天堂| 精品对白一区国产伦| 日韩av网站在线观看| 欧美日韩日日摸| 亚洲一区二区三区四区在线| 99久久国产综合精品麻豆| 久久九九久久九九| 国产九色精品成人porny| 精品国产一区二区三区忘忧草| 日本一区中文字幕| 欧美嫩在线观看| 婷婷六月综合亚洲| 宅男在线国产精品| 奇米精品一区二区三区在线观看 | 久久久久久久久岛国免费| 另类小说欧美激情| 日韩欧美色综合| 国产资源在线一区| 久久色中文字幕| 国产不卡一区视频| 国产精品网友自拍| 91日韩在线专区| 亚洲综合久久av| 欧美日韩中文一区| 日韩福利视频网| 欧美大尺度电影在线| 精品一区二区三区视频在线观看| 精品对白一区国产伦| 国产91丝袜在线播放九色| 国产精品久久久久aaaa| 91蜜桃婷婷狠狠久久综合9色| 亚洲精选视频在线| 欧美三级蜜桃2在线观看| 亚洲成av人**亚洲成av**| 91精品国产91久久久久久一区二区| 日产欧产美韩系列久久99| 欧美大片日本大片免费观看| 国产一区999| 国产精品久久久久久久久免费相片| 99热这里都是精品| 亚洲国产wwwccc36天堂| 欧美久久婷婷综合色| 久久国产福利国产秒拍| 久久久久久久综合色一本| 成人av网站免费| 亚洲一区二区精品3399| 日韩精品一区二区三区三区免费| 国产精品香蕉一区二区三区| 国产精品国产馆在线真实露脸 | 26uuu亚洲| 91蜜桃在线免费视频| 日韩制服丝袜av| 精品99一区二区三区| 波多野结衣一区二区三区| 亚洲一卡二卡三卡四卡 | 麻豆中文一区二区| 国产精品免费aⅴ片在线观看| 色婷婷av一区二区三区大白胸 | 日韩午夜三级在线| 懂色av一区二区在线播放| 亚洲在线中文字幕| 久久看人人爽人人| 91福利精品第一导航| 久久99九九99精品| 亚洲视频在线一区| 91精品国产色综合久久ai换脸 | 国产乱国产乱300精品| 亚洲精品高清在线观看| 欧美变态口味重另类| 色悠久久久久综合欧美99| 韩国理伦片一区二区三区在线播放| 亚洲私人黄色宅男| 欧美不卡一区二区三区四区| 99国产欧美另类久久久精品| 亚洲va韩国va欧美va| 中文字幕二三区不卡| 欧美一级专区免费大片| 99久久伊人久久99| 久久成人18免费观看| 最新热久久免费视频| 2017欧美狠狠色| 欧美日韩国产一区| 99久免费精品视频在线观看| 激情综合色播激情啊| 午夜天堂影视香蕉久久| 亚洲欧美一区二区三区极速播放| 欧美大片在线观看一区| 99久久久久免费精品国产 | 欧美日韩夫妻久久| 99久久99久久精品国产片果冻| 美女视频第一区二区三区免费观看网站 | 国产精品一区二区久久精品爱涩 | 亚洲v中文字幕| 国产精品乱码一区二三区小蝌蚪| 欧美成人一区二区三区片免费| 欧洲一区二区av| 91在线国产观看| 丁香五精品蜜臀久久久久99网站| 日本午夜精品一区二区三区电影 | 日本高清不卡一区| 成人福利电影精品一区二区在线观看 | 视频一区二区欧美| 一区二区三区蜜桃| 成人欧美一区二区三区| 久久精品亚洲国产奇米99| 91精品国产高清一区二区三区蜜臀| 在线一区二区观看| 97久久精品人人做人人爽| 国产ts人妖一区二区| 国产在线视频一区二区| 美女一区二区视频|