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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_cpu_a.s

?? S3C2410A的UCOS內(nèi)核,可以供ARM初學初學者使用
?? S
字號:
;/*
;************************************************************************************************************
;*            			(c) Copyright ARM Limited 1999.  All rights reserved. 
;*
;*                              		ARM 專用代碼
;*
;* 文件名稱: os_cpu_a.s
;*
;* 文件說明: 該模塊中的函數(shù)說明
;*
;*	void OSIntCtxSw						 中斷中的任務(wù)切換
;*	void OSCtxSw						 任務(wù)切換
;*	void OSCPUSaveSR					 保存中斷前的寄存器狀態(tài)  
;*	void OSCPURestoreSR					 中斷完成后,恢復中斷前的狀態(tài) 
;*	void OSStartHighRdy			 		 啟動最高優(yōu)先級任務(wù) 
;************************************************************************************************************
;*/

;/**********************************異常模式下的向量定義****************************************/

SwiV		EQU		0x08
IrqV		EQU		0x18
FiqV		EQU		0x1c
NoInt       EQU     0xc0
SVC32Mode	EQU		0x13
IRQ32Mode	EQU		0x12
FIQ32Mode	EQU		0x11

OSEnterSWI	EQU		0x00

        AREA	|subr|, CODE, READONLY
;/*
;*********************************************************************************************************
;                                          啟動多任務(wù)
;                                       void OSStartHighRdy(void)
;
; 注釋 : OSStartHighRdy() 函數(shù)必須:
;           a) 在 OSTaskSwHook() 之后調(diào)用,
;           b) 設(shè)定 OSRunning 為真,
;           c) 切換到最高優(yōu)先級.
;*********************************************************************************************************
;*/               
        IMPORT  OSTCBCur       
        IMPORT  OSTaskSwHook
        IMPORT  OSRunning
        IMPORT  OSTCBHighRdy

        EXPORT  OSStartHighRdy

OSStartHighRdy                                                               ;// 尋找最高級任務(wù)開始

        bl OSTaskSwHook             				                         ;// 調(diào)用用戶定義的任務(wù)鉤子函數(shù)

        ldr r4,=OSRunning           				                                   ;//設(shè)定多任務(wù)開始標志
        mov r5,#1
        strb r5,[r4]
        
        ldr r4,=OSTCBCur
        ldr r5,=OSTCBHighRdy        				                       ;// 得到最高優(yōu)先級任務(wù)的 TCB 地址

        ldr r5,[r5]                 				                                    ;// 得到任務(wù)堆棧指針
        ldr sp,[r5]  
        
        str r5,[r4]									                      ;// 把得到的TCB地址指針給當前的TCB
        
        ;// 切換到新任務(wù)
        ldmfd sp!,{r4}              				                                     ;// 彈出新任務(wù)的SPSR
        msr SPSR_cxsf,r4							                                   ;// 寫入當前狀態(tài)寄存器
        ldmfd sp!,{r4}              				                                     ;// 彈出新任務(wù)的 psr
        msr CPSR_cxsf,r4							                                   ;// 寫入當前狀態(tài)寄存器
        ldmfd sp!,{r0-r12,lr,pc}    				                          ;// 彈出新任務(wù)的 r0-r12,lr & pc
        
;/*
;***********************************************************************************************************
;                                        執(zhí)行任務(wù)切換 (任務(wù)級)
;                                           void OSCtxSw(void)
;
; 注釋 :    OSTCBCur       指向掛起的任務(wù)的OS_TCB 
;           OSTCBHighRdy   指向恢復的任務(wù)的OS_TCB
;
;************************************************************************************************************
;*/

        IMPORT  OSTCBCur
        IMPORT  OSTaskSwHook
        IMPORT  OSTCBHighRdy
        IMPORT  OSPrioCur
        IMPORT  OSPrioHighRdy

        EXPORT  OSCtxSw

OSCtxSw                                                                        ;// 任務(wù)切換
													
        stmfd sp!,{lr}              				                           ;// 壓入PC (lr 應(yīng)代替 PC被壓入)
        stmfd sp!,{r0-r12,lr}       				                               ;// 壓入 lr & register file
        mrs r4,cpsr
        stmfd sp!,{r4}              				                                              ;// 壓入CPSR
        mrs r4,spsr
        stmfd sp!,{r4}              				                                             ;// 壓入 spsr

        ;// OSPrioCur = OSPrioHighRdy
        ldr r4,=OSPrioCur
        ldr r5,=OSPrioHighRdy
        ldrb r6,[r5]
        strb r6,[r4]
        
        ;// 得到當前的TCB的地址
        ldr r4,=OSTCBCur
        ldr r5,[r4]
        str sp,[r5]                 				            ;// 在任務(wù)TCB中的存放當前任務(wù)控制塊的棧底指針

        bl OSTaskSwHook             				                                   ;// 調(diào)用任務(wù)的鉤子函數(shù)

        ;// 得到最高優(yōu)先級TCB的地址
        ldr r6,=OSTCBHighRdy
        ldr r6,[r6]
        ldr sp,[r6]                 				                             ;// 得到新任務(wù)的堆棧棧底指針

        ;// OSTCBCur = OSTCBHighRdy
        str r6,[r4]                 				                                  ;// 設(shè)定新任務(wù)TCB的地址

        ldmfd sp!,{r4}              				                                    ;// 彈出新任務(wù)的 spsr
        msr SPSR_cxsf,r4
        ldmfd sp!,{r4}              				                                     ;// 彈出新任務(wù)的 psr
        msr CPSR_cxsf,r4
        ldmfd sp!,{r0-r12,lr,pc}    				                          ;// 彈出新任務(wù)的 r0-r12,lr & pc

;/*
;************************************************************************************************************
;                                       執(zhí)行任務(wù)切換 (中斷級)
;                                        void OSIntCtxSw(void)
;
; 注釋 : 該函數(shù)針對中斷服務(wù)子程序Handler僅設(shè)定標志為真。 
;
;************************************************************************************************************
;*/
        IMPORT  OSIntCtxSwFlag

        EXPORT  OSIntCtxSw

OSIntCtxSw

        ldr r0,=OSIntCtxSwFlag
        mov r1,#1
        str r1,[r0]
        mov pc,lr
        
;/*
;************************************************************************************************************
;                                            IRQ HANDLER
;
;        該段處理所有的 IRQs
;        注意: FIQ Handler 段應(yīng)該近似此段編程
;
;************************************************************************************************************
;*/
        IMPORT  C_IRQHandler    					                                        ;//target.c中定義  
        IMPORT  OSIntEnter      					
        IMPORT  OSIntExit       					

        IMPORT  OSIntCtxSwFlag
        IMPORT  OSTCBCur
        IMPORT  OSTaskSwHook
        IMPORT  OSTCBHighRdy
        IMPORT  OSPrioCur
        IMPORT  OSPrioHighRdy

NOINT   EQU 	0xc0

        EXPORT  UCOS_IRQHandler

UCOS_IRQHandler

        stmfd sp!,{r0-r3,r12,lr}     ;// 保存CPU寄存器內(nèi)容,進入IRQ后,CPSR 為1,禁止IRQ

        bl OSIntEnter                ;// 內(nèi)核進入ISR函數(shù)
        bl C_IRQHandler
        bl OSIntExit                 ;// 內(nèi)核退出ISR函數(shù)時,如果需要切換到更高優(yōu)先級中去,該函數(shù)在OSIntCtxSw()中,
									 ;// 使OSIntCtxSwFlag為1。
        ldr r0,=OSIntCtxSwFlag
        ldr r1,[r0]
        cmp r1,#1
        beq _IntCtxSw                 ;// 判斷是否在中斷中發(fā)生任務(wù)切換?

        ldmfd sp!,{r0-r3,r12,lr}      ;// 否,則恢復CPU寄存器內(nèi)容
        subs pc,lr,#4				  ;// 從IRQ中返回


_IntCtxSw							  ;// 是, 則發(fā)生中斷級任務(wù)切換
        mov r1,#0
        str r1,[r0]					  ;// 清OSIntCtxSwFlag,使它為1

        ldmfd sp!,{r0-r3,r12,lr}	  ;//清IRQ中斷堆棧
        stmfd sp!,{r0-r3}			  ;//將要使用R0,R1,R2,R3為暫時寄存器
        
        mov r1,sp					  ;// 保存IRQ的中斷堆棧指針
        add sp,sp,#16				  ;// 回到IRQ的堆棧棧頂
        sub r2,lr,#4				  ;// 保存PC的返回地址
        mrs r3,spsr					  ;// 保存被中斷的任務(wù)的SPSR
        
        orr r0,r3,#NOINT              ;//當返回到SVC或SYS模式下,禁止中斷
        msr spsr_c,r0

        ldr r0,=.+8
        movs pc,r0                    ;//返回到SVC或SYS模式,禁止中斷,即把spsr_c裝入了cpsr中

        stmfd sp!,{r2}                ;//此時的SP為SVC或SYS的堆棧指針, 壓入被中斷的任務(wù)的 pc
        stmfd sp!,{r4-r12,lr}         ;// 壓入被中斷的任務(wù)的 lr,r12-r4
        
        mov r4,r1                     ;//保存IRQ的中斷堆棧指針到R4                  				
        mov r5,r3					  ;//保存被中斷的任務(wù)的SPSR到R5
        
        ldmfd r4!,{r0-r3}             ;//從IRQ的中斷堆棧中彈出被中斷的任務(wù)的 r3-r0 到CPU的寄存器中
        stmfd sp!,{r0-r3}             ;// 壓入被中斷的任務(wù)的 r3-r0 到SVC或SYS模式的堆棧中
        stmfd sp!,{r5}                ;// 壓入被中斷的任務(wù)的 Cpsr
        
        mrs r4,spsr
        stmfd sp!,{r4}                ;// 壓入被中斷的任務(wù)的 spsr 系統(tǒng)模式下,沒有spsr
        
        ;// OSPrioCur = OSPrioHighRdy
        ldr r4,=OSPrioCur
        ldr r5,=OSPrioHighRdy
        ldrb r5,[r5]
        strb r5,[r4]
        
        ;// 得到當前的TCB的地址
        ldr r4,=OSTCBCur
        ldr r5,[r4]
        str sp,[r5]                 				               ;// 在任務(wù)TCB中的存放當前任務(wù)控制塊的指針

        bl OSTaskSwHook             				                                  ;// 調(diào)用任務(wù)的鉤子函數(shù)

        ;// 得到最高優(yōu)先級TCB的地址
        ldr r6,=OSTCBHighRdy
        ldr r6,[r6]
        ldr sp,[r6]                 				                                 ;// 得到新任務(wù)的堆棧指針

        ;// OSTCBCur = OSTCBHighRdy
        str r6,[r4]                 				                                  ;// 設(shè)定新任務(wù)TCB的地址

        ldmfd sp!,{r4}              				                                    ;// 彈出新任務(wù)的 spsr
        msr SPSR_cxsf,r4
       
        ldmfd sp!,{r4}              				                                    ;// 彈出新任務(wù)的 cpsr
        msr CPSR_cxsf,r4

        ldmfd sp!,{r0-r12,lr,pc}    				                          ;// 彈出新任務(wù)的 r0-r12,lr & pc
;/*
;************************************************************************************************************
;                                   臨界段代碼的實現(xiàn)方式3
;
; 函數(shù)描述 : 通過預設(shè)定中斷的狀態(tài)來開關(guān)中斷。在局部變量'cpu_sr'中保存中斷標志,之后關(guān)閉中斷。 'cpu_sr' 分配
;            給所有需要關(guān)中斷的 uC/OS-II'的函數(shù)。通過把'cpu_sr' 復制到CPU的狀態(tài)寄存器中來恢復關(guān)中斷前的狀態(tài)。
;
;            OS_CPU_SR OSCPUSaveSR()
; 輸入?yún)?shù) : 無
;
; 返回值   : OS_CPU_SR
;
;            OSCPURestoreSR(OS_CPU_SR cpu_sr)
; 輸入?yún)?shù) : OS_CPU_SR
;
; 返回值   : 無
;
; 注釋     : 該函數(shù)使用如下
;
;            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,#NOINT
        msr CPSR_c,r1
        mov pc,lr


        EXPORT  OSCPURestoreSR
        
OSCPURestoreSR
        msr CPSR_c,r0
        mov pc,lr

        END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频观看一区| 国产一区二区在线视频| 不卡的av电影| 久久久久成人黄色影片| 日韩精品久久久久久| 欧美日韩久久一区| 亚洲曰韩产成在线| 色综合欧美在线| 亚洲女人小视频在线观看| 成人一区在线观看| 国产精品入口麻豆九色| 国产成人午夜片在线观看高清观看| 欧美丰满高潮xxxx喷水动漫| 视频一区二区欧美| 色哟哟在线观看一区二区三区| 国产精品久久免费看| 成人午夜私人影院| 椎名由奈av一区二区三区| 北条麻妃国产九九精品视频| 国产精品久久久久久久久久久免费看 | aaa国产一区| 亚洲少妇屁股交4| 在线影视一区二区三区| 香蕉乱码成人久久天堂爱免费| 欧美在线制服丝袜| 午夜一区二区三区视频| 在线影视一区二区三区| 亚洲成av人片观看| 日韩欧美国产系列| 国产高清精品在线| 中文字幕一区二区三区在线不卡 | **网站欧美大片在线观看| 91蜜桃免费观看视频| 中文字幕一区二区三区四区 | 成a人片亚洲日本久久| 综合婷婷亚洲小说| 99久久亚洲一区二区三区青草| 亚洲狠狠丁香婷婷综合久久久| 91麻豆精品秘密| 日韩不卡在线观看日韩不卡视频| 欧美一区二区三区白人| 国产福利精品一区| 亚洲国产精品影院| 久久香蕉国产线看观看99| 成人在线视频一区| 日韩国产精品久久久| 久久欧美一区二区| 欧美自拍偷拍一区| 国产精品一区二区在线观看网站 | 日本成人在线电影网| 欧美激情综合在线| 制服丝袜成人动漫| 97精品视频在线观看自产线路二| 午夜在线成人av| 精品日韩一区二区三区免费视频| 91在线观看成人| 麻豆精品在线视频| 国产精品三级在线观看| 日韩欧美视频一区| 日本精品免费观看高清观看| 日本不卡一二三| 洋洋av久久久久久久一区| 2023国产精华国产精品| 欧美午夜精品一区二区三区| 岛国av在线一区| 日韩高清在线观看| 亚洲欧美日韩国产综合在线| 91精品国产综合久久精品性色| av欧美精品.com| 国产原创一区二区三区| 日韩影院免费视频| 亚洲尤物视频在线| 亚洲欧洲日韩综合一区二区| 日韩美女一区二区三区| 欧美日韩和欧美的一区二区| 97久久精品人人做人人爽| 国产精品一区在线观看你懂的| 日本成人在线不卡视频| 一区二区三区免费网站| 中文字幕亚洲电影| 国产拍欧美日韩视频二区| 亚洲精品一区二区三区福利| 欧美一区二区三级| 制服丝袜国产精品| 欧美日韩性生活| 91激情五月电影| 一本色道**综合亚洲精品蜜桃冫| 高清国产一区二区| 国产精品亚洲专一区二区三区| 美女视频第一区二区三区免费观看网站| 洋洋成人永久网站入口| 一区二区成人在线视频| 亚洲欧美中日韩| 国产精品护士白丝一区av| 欧美韩国日本不卡| 日本一区二区三区dvd视频在线| 欧美性猛片aaaaaaa做受| 在线视频国产一区| 欧洲精品一区二区| 欧美丝袜丝交足nylons| 欧美三级在线视频| 欧美伊人精品成人久久综合97 | 日韩黄色在线观看| 日本亚洲一区二区| 另类的小说在线视频另类成人小视频在线| 午夜精品一区二区三区三上悠亚| 午夜精品在线视频一区| 亚洲大片一区二区三区| 免费三级欧美电影| 国产一区二区视频在线| 色婷婷av久久久久久久| 色婷婷久久综合| 在线亚洲人成电影网站色www| 欧美一a一片一级一片| 51精品视频一区二区三区| 欧美放荡的少妇| 国产日韩欧美激情| 午夜精品福利一区二区三区蜜桃| 国产精品66部| 欧美精品在欧美一区二区少妇| 久久综合成人精品亚洲另类欧美 | 日精品一区二区| youjizz久久| 欧美一区中文字幕| 亚洲丝袜另类动漫二区| 久久国内精品视频| 欧美影视一区在线| 国产精品免费看片| 久久电影国产免费久久电影| 色综合久久久久综合99| 国产色产综合产在线视频| 亚洲成人tv网| 成人精品免费网站| 精品久久人人做人人爽| 亚洲一区二区三区精品在线| 国产成人免费在线观看不卡| 91精品国产黑色紧身裤美女| 亚洲欧美怡红院| 国产精品一卡二| 日韩欧美一区二区免费| 午夜视频在线观看一区二区| 成人福利在线看| 国产亚洲综合在线| 蜜芽一区二区三区| 欧美影视一区二区三区| 亚洲精品乱码久久久久久久久| 国产成a人亚洲| 久久综合色8888| 午夜激情综合网| 欧美在线观看18| 亚洲黄色小视频| 色婷婷综合激情| 夜夜精品视频一区二区| 色婷婷久久一区二区三区麻豆| 亚洲欧洲精品一区二区三区不卡| 国产成人综合网站| 欧美激情在线看| 成人免费视频app| 亚洲国产精品成人久久综合一区| 国产精品主播直播| 国产日韩综合av| 丁香网亚洲国际| 欧美经典三级视频一区二区三区| 国产高清在线精品| 国产三级精品在线| 成人一区在线看| 中文字幕一区二区三区不卡在线| 成年人网站91| 亚洲免费观看高清完整| 欧洲精品视频在线观看| 性做久久久久久免费观看欧美| 欧美日韩高清在线| 日本vs亚洲vs韩国一区三区二区| 91精品国产欧美一区二区18| 日本亚洲视频在线| 26uuu色噜噜精品一区| 国模一区二区三区白浆| 国产人成亚洲第一网站在线播放| 成人久久视频在线观看| 亚洲精品你懂的| 正在播放一区二区| 国产真实乱对白精彩久久| 欧美极品aⅴ影院| 91高清视频免费看| 蜜桃av一区二区在线观看 | 欧美日韩精品一区二区天天拍小说| 亚洲成av人影院| 久久嫩草精品久久久精品一| jiyouzz国产精品久久| 亚洲国产美国国产综合一区二区| 欧美久久久久免费| 国产福利精品一区二区| 一区二区三区成人| 日韩色视频在线观看| 成人免费毛片aaaaa**| 亚洲国产成人va在线观看天堂| 日韩精品一区二区三区视频在线观看 | 午夜精品aaa| 久久久电影一区二区三区| 色悠久久久久综合欧美99|