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

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

?? os_cpu_a.s

?? ep7312- ad轉換的源碼
?? 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精品国产免费| 一区二区三区四区乱视频| 国产精品久久久久久久久搜平片 | 日本不卡123| a亚洲天堂av| 欧美韩国日本综合| 狠狠色丁香久久婷婷综| 欧美中文字幕一区二区三区| 中文字幕免费不卡在线| 美女网站色91| 欧美一区二区视频在线观看2022| 综合色天天鬼久久鬼色| 国产精品18久久久| 精品精品欲导航| 日本怡春院一区二区| 91福利视频久久久久| 亚洲欧洲成人av每日更新| 国产乱国产乱300精品| 精品国内片67194| 久久精品国产999大香线蕉| 欧美人妇做爰xxxⅹ性高电影| 成人免费一区二区三区在线观看| 国产iv一区二区三区| 久久久三级国产网站| 韩国av一区二区三区在线观看| 欧美日韩的一区二区| 婷婷成人综合网| 欧美精品1区2区3区| 亚洲国产一区二区视频| 欧美最新大片在线看| 亚洲精品精品亚洲| 91麻豆123| 亚洲一区二区影院| 欧美性猛交xxxxxx富婆| 亚洲国产va精品久久久不卡综合| 欧美亚洲免费在线一区| 亚洲第一成年网| 91精品国产麻豆国产自产在线| 蜜臀av性久久久久蜜臀aⅴ| 91精品国产一区二区三区| 日本视频免费一区| 精品国产a毛片| av中文字幕亚洲| 亚洲一二三四区| 欧美一级生活片| 粉嫩13p一区二区三区| ...xxx性欧美| 欧美人与禽zozo性伦| 精品一区免费av| 国产精品动漫网站| 欧美日韩高清影院| 国产在线看一区| 亚洲人午夜精品天堂一二香蕉| 欧美日免费三级在线| 久久97超碰国产精品超碰| 欧美韩日一区二区三区四区| 在线免费观看日本一区| 乱一区二区av| 亚洲另类在线制服丝袜| 日韩一区二区三区av| 成人网在线播放| 婷婷亚洲久悠悠色悠在线播放| www久久久久| 欧美伊人久久大香线蕉综合69 | 91亚洲午夜精品久久久久久| 亚洲高清免费观看| 久久综合精品国产一区二区三区| 成人av免费在线| 免费成人av资源网| 国产精品久久久久影院老司| 69堂精品视频| 99久久精品免费看国产免费软件| 日本欧美一区二区| 成人欧美一区二区三区视频网页| 欧美一级艳片视频免费观看| 91麻豆国产自产在线观看| 狠狠久久亚洲欧美| 午夜精品久久久久久久久久久 | 在线亚洲+欧美+日本专区| 精品无人区卡一卡二卡三乱码免费卡 | 久久成人久久爱| 亚洲六月丁香色婷婷综合久久| 欧美成人一区二区三区在线观看 | 欧美电视剧在线观看完整版| 在线免费观看日本一区| 成人午夜av在线| 久久99精品久久久久婷婷| 亚洲国产欧美在线| 亚洲美女免费视频| 国产精品三级电影| 欧美精品一区二区三区蜜桃| 欧美日韩久久不卡| 91蝌蚪porny成人天涯| 国产91丝袜在线18| 国产精品一区在线| 精品综合免费视频观看| 日本特黄久久久高潮 | 亚洲柠檬福利资源导航| 国产欧美日韩亚州综合| 久久精品视频一区二区| 欧美精品一区二区久久婷婷| 日韩片之四级片| 日韩欧美国产综合在线一区二区三区| 欧美亚洲国产bt| 欧美综合欧美视频| 91久久精品网| 精品视频一区 二区 三区| 欧洲一区在线电影| 色婷婷亚洲婷婷| 欧洲av在线精品| 欧美日韩中文字幕一区二区| 欧美色图免费看| 欧美日韩国产综合一区二区三区| 欧美调教femdomvk| 欧美日韩国产成人在线91| 91精品在线麻豆| 日韩色在线观看| 久久日一线二线三线suv| 国产日产欧美精品一区二区三区| 国产三级精品三级在线专区| 国产精品素人一区二区| 亚洲免费大片在线观看| 亚洲第一主播视频| 日韩精品91亚洲二区在线观看| 日本强好片久久久久久aaa| 麻豆中文一区二区| 国产精品77777竹菊影视小说| 国产99久久久国产精品潘金网站| 成人丝袜视频网| 欧美性猛片aaaaaaa做受| 91精品福利在线一区二区三区| 日韩三级.com| 国产精品不卡在线观看| 亚洲成人av在线电影| 久久99久久久久久久久久久| 国产成人a级片| 色欧美日韩亚洲| 欧美一区二区三区男人的天堂| 久久色.com| 亚洲一区二区在线视频| 九一九一国产精品| 色久综合一二码| 精品国产乱码久久久久久久久 | 国产网红主播福利一区二区| 亚洲色图另类专区| 午夜成人免费电影| 国产a区久久久| 欧美人狂配大交3d怪物一区| 国产情人综合久久777777| 一区二区三区蜜桃| 韩国一区二区视频| 在线观看国产精品网站| 久久久精品综合| 午夜精品免费在线| 不卡高清视频专区| 日韩欧美在线网站| 亚洲免费在线播放| 国产一区二区电影| 欧美嫩在线观看| 最新高清无码专区| 九色综合狠狠综合久久| 欧美日韩精品电影| 亚洲手机成人高清视频| 久久er精品视频| 欧美日韩综合不卡| 亚洲欧美日韩综合aⅴ视频| 韩国成人福利片在线播放| 欧美三级日韩三级国产三级| 中文字幕制服丝袜成人av| 久久99在线观看| 欧美欧美午夜aⅴ在线观看| 亚洲美女视频一区| 成人网在线免费视频| 久久综合久久鬼色中文字| 日韩av不卡在线观看| 色欧美乱欧美15图片| 日本一二三不卡| 国产精品夜夜嗨| 欧美mv日韩mv国产网站app| 亚洲午夜国产一区99re久久| 91亚洲精华国产精华精华液| 中文字幕乱码亚洲精品一区| 久久精品国产一区二区三区免费看| 欧美日韩视频在线一区二区| 亚洲激情欧美激情| 成av人片一区二区| 久久精品一区八戒影视| 久久66热偷产精品| 精品少妇一区二区三区免费观看| 亚洲不卡一区二区三区| 欧美视频三区在线播放| 亚洲免费看黄网站| 色婷婷精品久久二区二区蜜臀av| 中文字幕色av一区二区三区| 成人av电影在线网| 国产精品超碰97尤物18| 91女神在线视频| 亚洲国产日韩精品| 欧美人狂配大交3d怪物一区 | 欧美日韩一区二区三区不卡|