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

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

?? os_cpu_a.s

?? UCOS 在ARM S3C 2410上的移植
?? S
字號:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
;                                          All Rights Reserved
;
; File : OS_CPU_A.ASM
; By   : Jean J. Labrosse
;********************************************************************************************************

;********************************************************************************************************
;                                               ARM Port
;
;                 Target           : ARM (Includes ARM7, ARM9)
;                 Ported by        : Michael Anburaj
;                 URL              : http://geocities.com/michaelanburaj/    Email : michaelanburaj@hotmail.com
;
;********************************************************************************************************



        AREA  UCOS_ARM, CODE, READONLY

;*********************************************************************************************************
;                                          START MULTITASKING
;                                       void OSStartHighRdy(void)
;
; Note : OSStartHighRdy() MUST:
;           a) Call OSTaskSwHook() then,
;           b) Set OSRunning to TRUE,
;           c) Switch to the highest priority task.
;*********************************************************************************************************

        IMPORT  OSTaskSwHook
        IMPORT  OSRunning
        IMPORT  OSTCBHighRdy

        EXPORT  OSStartHighRdy

OSStartHighRdy  

        bl OSTaskSwHook             ; Call user defined task switch hook

        ldr r4,=OSRunning           ; Indicate that multitasking has started
        mov r5,#1
        strb r5,[r4]

        ldr r4,=OSTCBHighRdy        ; Get highest priority task TCB address

        ldr r4,[r4]                 ; get stack pointer
        ldr sp,[r4]                 ; switch to the new stack

        ldmfd sp!,{r4}              ; pop new task's spsr
        msr SPSR_cxsf,r4
        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

;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From task level)
;                                           void OSCtxSw(void)
;
; Note(s):    Upon entry, 
;             OSTCBCur     points to the OS_TCB of the task to suspend
;             OSTCBHighRdy points to the OS_TCB of the task to resume
;
;*********************************************************************************************************

        IMPORT  OSTCBCur
        IMPORT  OSTaskSwHook
        IMPORT  OSTCBHighRdy
        IMPORT  OSPrioCur
        IMPORT  OSPrioHighRdy

        EXPORT  OSCtxSw

OSCtxSw
; Special optimised code below:
        stmfd sp!,{lr}              ; push pc (lr should be pushed in place of PC)
        stmfd sp!,{r0-r12,lr}       ; push lr & register file
        mrs r4,cpsr
        stmfd sp!,{r4}              ; push current psr
        mrs r4,spsr
        stmfd sp!,{r4}              ; push current spsr

        ; OSPrioCur = OSPrioHighRdy
        ldr r4,=OSPrioCur
        ldr r5,=OSPrioHighRdy
        ldrb r6,[r5]
        strb r6,[r4]
        
        ; Get current task TCB address
        ldr r4,=OSTCBCur
        ldr r5,[r4]
        str sp,[r5]                 ; store sp in preempted tasks's TCB

        bl OSTaskSwHook             ; call Task Switch Hook

        ; Get highest priority task TCB address
        ldr r6,=OSTCBHighRdy
        ldr r6,[r6]
        ldr sp,[r6]                 ; get new task's stack pointer

        ; OSTCBCur = OSTCBHighRdy
        str r6,[r4]                 ; set new current task TCB address

        ldmfd sp!,{r4}              ; pop new task's spsr
        msr SPSR_cxsf,r4
        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


;*********************************************************************************************************
;                                PERFORM A CONTEXT SWITCH (From an ISR)
;                                        void OSIntCtxSw(void)
;
; Note(s): This function only flags a context switch to the ISR Handler
;
;*********************************************************************************************************

        IMPORT  OSIntCtxSwFlag

        EXPORT  OSIntCtxSw

OSIntCtxSw

        ;OSIntCtxSwFlag = True
        ldr r0,=OSIntCtxSwFlag
        mov r1,#1
        str r1,[r0]
        mov pc,lr
        

;*********************************************************************************************************
;                                            IRQ HANDLER
;
;        This handles all the IRQs
;        Note: FIQ Handler should be written similar to this
;
;*********************************************************************************************************

        IMPORT  C_IRQHandler
        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}

        bl OSIntEnter
        bl C_IRQHandler
        bl OSIntExit

        ldr r0,=OSIntCtxSwFlag
        ldr r1,[r0]
        cmp r1,#1
        beq _IntCtxSw

        ldmfd sp!,{r0-r3,r12,lr}
        subs pc,lr,#4


_IntCtxSw
        mov r1,#0
        str r1,[r0]

        ldmfd sp!,{r0-r3,r12,lr}
        stmfd sp!,{r0-r3}
        mov r1,sp
        add sp,sp,#16
        sub r2,lr,#4

        mrs r3,spsr
        orr r0,r3,#NOINT
        msr spsr_c,r0

        ldr r0,=.+8
        movs pc,r0

        stmfd sp!,{r2}              ; push old task's pc
        stmfd sp!,{r4-r12,lr}       ; push old task's lr,r12-r4
        mov r4,r1                   ; Special optimised code below
        mov r5,r3
        ldmfd r4!,{r0-r3}
        stmfd sp!,{r0-r3}           ; push old task's r3-r0
        stmfd sp!,{r5}              ; push old task's psr
        mrs r4,spsr
        stmfd sp!,{r4}              ; push old task's spsr
        
        ; OSPrioCur = OSPrioHighRdy
        ldr r4,=OSPrioCur
        ldr r5,=OSPrioHighRdy
        ldrb r5,[r5]
        strb r5,[r4]
        
        ; Get current task TCB address
        ldr r4,=OSTCBCur
        ldr r5,[r4]
        str sp,[r5]                 ; store sp in preempted tasks's TCB

        bl OSTaskSwHook             ; call Task Switch Hook

        ; Get highest priority task TCB address
        ldr r6,=OSTCBHighRdy
        ldr r6,[r6]
        ldr sp,[r6]                 ; get new task's stack pointer

        ; OSTCBCur = OSTCBHighRdy
        str r6,[r4]                 ; set new current task TCB address

        ldmfd sp!,{r4}              ; pop new task's spsr
        msr SPSR_cxsf,r4
        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

;*********************************************************************************************************
;                                   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,#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一区二区三区免费野_久草精品视频
中文字幕免费一区| 欧美日韩色综合| 久久久久青草大香线综合精品| 91色九色蝌蚪| 亚洲一本大道在线| 国产精品灌醉下药二区| 亚洲成人av一区二区| 国产98色在线|日韩| 欧美一区二区三区四区视频| 国产日韩欧美一区二区三区综合| 天堂va蜜桃一区二区三区漫画版| 北条麻妃一区二区三区| 26uuu欧美| 久久激情五月激情| 99久久婷婷国产精品综合| 国产日韩欧美不卡| 九九视频精品免费| 91麻豆精品国产91| 亚洲一区二区3| 91亚洲精品久久久蜜桃| 中文无字幕一区二区三区| 久久精品二区亚洲w码| 欧美日本乱大交xxxxx| 亚洲激情图片一区| 91色在线porny| 亚洲欧美福利一区二区| 99久久亚洲一区二区三区青草| 久久精品夜色噜噜亚洲a∨ | 色悠悠久久综合| 国产日韩精品一区二区三区| 国内精品伊人久久久久av一坑| 91精品国产一区二区三区香蕉| 亚洲高清中文字幕| 欧美人妖巨大在线| 亚洲bt欧美bt精品| 7777精品伊人久久久大香线蕉 | 国产精品久久久久久久久快鸭 | 亚洲精品成人悠悠色影视| 成人性视频免费网站| 亚洲国产高清aⅴ视频| 国产91精品一区二区| 欧美国产一区二区| a级高清视频欧美日韩| 亚洲免费观看高清完整版在线观看| aaa亚洲精品| 一区二区三区四区在线| 精品1区2区3区| 美女视频一区二区三区| 精品91自产拍在线观看一区| 国产福利精品导航| 国产精品国产a级| 欧美日韩亚洲综合一区| 美国十次综合导航| 国产精品久久久久一区 | 亚洲第一搞黄网站| 日韩女优av电影| 成人综合在线观看| 伊人夜夜躁av伊人久久| 欧美美女视频在线观看| 激情文学综合网| 中文字幕色av一区二区三区| 欧洲在线/亚洲| 九色综合国产一区二区三区| 国产精品美女久久久久久久久久久| 色域天天综合网| 九九视频精品免费| 亚洲精品中文在线影院| 91精品国产色综合久久不卡电影| 国产精品88888| 一区二区三区国产精品| 2021久久国产精品不只是精品| 99re视频精品| 国产尤物一区二区| 亚洲一区视频在线观看视频| 精品粉嫩超白一线天av| 91久久精品一区二区三区| 国产一区二区视频在线播放| 亚洲国产日韩在线一区模特| 久久精品免视看| 欧美日韩成人在线| 99视频有精品| 国产乱人伦偷精品视频不卡| 亚洲高清免费视频| 国产精品进线69影院| 日韩午夜激情av| 欧美日韩你懂得| 91蜜桃视频在线| 国产福利一区二区三区在线视频| 午夜免费久久看| 亚洲精品中文字幕在线观看| 国产偷国产偷精品高清尤物| 91精品国产91久久久久久一区二区 | 欧美日韩一区不卡| 99国产欧美久久久精品| 欧美精品久久久久久久多人混战 | 欧美亚洲一区二区在线| 国产精品1024| 蜜臀久久99精品久久久久久9| 国产精品久久久久一区| 久久久国产精品麻豆| 欧美一区二区视频免费观看| 一本一道波多野结衣一区二区| 国产精品亚洲成人| 久草中文综合在线| 日本不卡中文字幕| 亚洲成人一区二区| 亚洲综合一二区| 亚洲最新在线观看| 一区二区三区四区亚洲| 亚洲另类色综合网站| 国产精品久久久一本精品| 国产精品99久久久久| 成人免费视频播放| 午夜欧美电影在线观看| 色成年激情久久综合| 偷拍自拍另类欧美| 视频一区中文字幕国产| 婷婷亚洲久悠悠色悠在线播放| 亚洲一区二区三区四区不卡| 洋洋成人永久网站入口| 亚洲综合久久av| 午夜影视日本亚洲欧洲精品| 香蕉久久夜色精品国产使用方法| 亚洲精品高清在线| 性做久久久久久免费观看欧美| 亚洲国产一区二区在线播放| 亚洲成av人片一区二区三区| 日精品一区二区三区| 蜜桃av噜噜一区二区三区小说| 青青草国产精品97视觉盛宴| 国产一区三区三区| 不卡的看片网站| 欧美伊人精品成人久久综合97 | 欧美激情一区二区三区全黄| 国产精品视频在线看| 欧美精品第一页| 欧美一级黄色录像| 欧美一二三在线| 欧美日韩国产成人在线91| 欧美一二三区在线| 久久精品欧美一区二区三区不卡 | 欧美丰满少妇xxxxx高潮对白| 91麻豆精品91久久久久久清纯 | 欧美人xxxx| 精品免费国产二区三区| 日本一区二区三区四区| 亚洲一区在线免费观看| 蜜桃av一区二区| 成人va在线观看| 欧美日韩综合一区| 精品欧美一区二区在线观看| 国产精品久久久久影视| 日韩精品国产精品| 成人av免费网站| 欧美一区二区三区免费观看视频| 久久精品综合网| 亚洲第四色夜色| 成人一区二区三区| 制服丝袜av成人在线看| 中文字幕日本乱码精品影院| 日韩精品欧美成人高清一区二区| 成人激情小说网站| 欧美一区二区三区免费大片 | 久久久国产午夜精品| 亚洲一二三四区不卡| 国产精品一区二区果冻传媒| 欧美日韩你懂的| 亚洲图片欧美激情| 国产精品一区在线观看乱码| 欧美日韩激情在线| 最新成人av在线| 国产成人免费av在线| 欧美一级片在线| 亚洲6080在线| 色呦呦一区二区三区| 国产精品美女久久久久高潮| 免费观看成人av| 精品视频一区三区九区| 中文字幕日韩一区| 成人在线综合网站| 精品动漫一区二区三区在线观看| 亚洲午夜久久久久| 色噜噜狠狠成人中文综合| 国产精品久久二区二区| 国产精品一区二区男女羞羞无遮挡| 欧美老年两性高潮| 亚洲一区二区三区国产| 蜜臀久久99精品久久久画质超高清| 成人激情小说乱人伦| 国产精品一线二线三线精华| 精品国产乱码91久久久久久网站| 亚洲欧美日韩在线不卡| 韩国在线一区二区| 日韩亚洲欧美在线| 一区二区三区鲁丝不卡| 成人天堂资源www在线| 精品精品国产高清a毛片牛牛| 亚洲综合一区二区精品导航| 91丝袜高跟美女视频| 自拍偷拍国产亚洲|