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

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

?? os_cpu_a.s

?? 本源碼是用ARM9 2410開發的OLED液晶驅動開發代碼
?? 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  IsrIRQ
        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 IsrIRQ
        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一区二区三区免费野_久草精品视频
色综合久久久网| 亚洲国产一区二区视频| 亚洲一区中文在线| 国产成人精品免费在线| 欧美精品 国产精品| 亚洲欧美另类小说视频| 久久精品国产亚洲5555| 欧美日韩国产大片| 亚洲美女屁股眼交| 成人综合婷婷国产精品久久 | 成人av在线资源网| 日韩欧美国产一区二区三区| 亚洲电影第三页| av不卡在线观看| 日本一区二区视频在线观看| 极品美女销魂一区二区三区| 欧美人xxxx| 性感美女久久精品| 91美女片黄在线观看91美女| 中文字幕中文字幕中文字幕亚洲无线 | 色综合色综合色综合色综合色综合 | 亚洲国产一二三| 色综合亚洲欧洲| |精品福利一区二区三区| 国产福利91精品一区二区三区| 欧美草草影院在线视频| 蜜桃视频在线观看一区二区| 欧美精品日韩一区| 日韩成人免费电影| 7777精品伊人久久久大香线蕉经典版下载 | 91精品国产91久久综合桃花| 天天综合日日夜夜精品| 欧美日韩高清一区二区三区| 日日噜噜夜夜狠狠视频欧美人| 欧美午夜一区二区三区免费大片| 一卡二卡三卡日韩欧美| 91精品办公室少妇高潮对白| 亚洲午夜av在线| 欧美丰满高潮xxxx喷水动漫| 免费三级欧美电影| 久久久亚洲国产美女国产盗摄| 国产精品一区久久久久| 国产精品久久国产精麻豆99网站| 成人理论电影网| 一区二区国产盗摄色噜噜| 欧美视频一区二区三区四区| 日韩国产在线观看一区| 欧美videofree性高清杂交| 久久99热狠狠色一区二区| 国产日韩欧美精品在线| 99九九99九九九视频精品| 亚洲夂夂婷婷色拍ww47| 欧美一区二视频| 国产精品一区二区三区乱码| 亚洲同性gay激情无套| 欧美网站大全在线观看| 精品一区二区免费视频| 欧美激情在线免费观看| 色婷婷久久久综合中文字幕 | 成人av片在线观看| 亚洲国产一区二区三区| 日韩精品中文字幕在线一区| av在线综合网| 日韩二区三区四区| 国产精品另类一区| 欧美一区二区视频网站| 国产91富婆露脸刺激对白| 亚洲一级在线观看| 国产校园另类小说区| 色94色欧美sute亚洲线路一久 | www.日韩av| 美女网站色91| 亚洲精品一二三| 欧美白人最猛性xxxxx69交| 99视频在线精品| 精品一二三四区| 亚洲成av人片在线| 国产欧美日产一区| 日韩一区二区在线看片| 91免费在线视频观看| 久久精品国产一区二区三| 依依成人综合视频| 中文字幕巨乱亚洲| 久久综合一区二区| 欧美猛男gaygay网站| 91香蕉视频黄| 国产精品456露脸| 免费高清在线视频一区·| 亚洲精品日产精品乱码不卡| 中文无字幕一区二区三区| 欧美一区二区三区不卡| 欧美三级资源在线| 91婷婷韩国欧美一区二区| 国产精品乡下勾搭老头1| 奇米综合一区二区三区精品视频| 一区二区三国产精华液| 国产精品激情偷乱一区二区∴| 2023国产精华国产精品| 日韩视频免费观看高清在线视频| 91久久精品国产91性色tv| eeuss鲁一区二区三区| 国产99久久精品| 国产在线精品一区在线观看麻豆| 午夜免费欧美电影| 尤物视频一区二区| 亚洲激情av在线| 亚洲影视在线观看| 亚洲一区视频在线| 亚洲综合小说图片| 洋洋成人永久网站入口| 亚洲黄色小视频| 亚洲综合色成人| 亚洲国产美国国产综合一区二区| 亚洲精品免费看| 亚洲地区一二三色| 天天av天天翘天天综合网| 亚洲一级不卡视频| 天使萌一区二区三区免费观看| 亚洲成人综合在线| 日韩专区一卡二卡| 毛片基地黄久久久久久天堂| 精品一区二区国语对白| 韩国三级中文字幕hd久久精品| 国产精品综合一区二区三区| 成人黄色a**站在线观看| www.成人在线| 在线精品观看国产| 在线播放欧美女士性生活| 欧美大片一区二区| 日本一区二区视频在线| 亚洲色大成网站www久久九九| 亚洲一区日韩精品中文字幕| 日本欧美在线观看| 激情国产一区二区| 99在线精品视频| 欧美男女性生活在线直播观看| 日韩欧美激情一区| 国产精品欧美久久久久一区二区| 一区二区三区在线观看视频| 日韩成人午夜电影| 成人av电影免费在线播放| 在线影视一区二区三区| 欧美xxxxx牲另类人与| 日本一区二区免费在线观看视频 | 国产偷国产偷亚洲高清人白洁| 国产精品美女久久久久久久| 亚洲一区二区三区四区中文字幕| 蓝色福利精品导航| 99久久久精品免费观看国产蜜| 欧美日韩高清影院| 国产精品无圣光一区二区| 亚洲高清免费视频| 国产白丝精品91爽爽久久| 欧美亚洲另类激情小说| 久久久精品黄色| 亚洲二区视频在线| 国产999精品久久久久久绿帽| 欧美在线视频你懂得| 欧美xxx久久| 亚洲午夜日本在线观看| 国产真实乱子伦精品视频| 欧美日韩一区中文字幕| 中文字幕欧美激情一区| 青青草成人在线观看| 日本精品视频一区二区三区| 26uuu亚洲| 亚洲成av人片| 91在线观看视频| 久久综合av免费| 青青草国产精品97视觉盛宴 | av在线播放成人| 日韩精品一区二区三区在线| 一区二区三区影院| 成人一区二区三区中文字幕| 日韩一级黄色大片| 一级特黄大欧美久久久| 国产成人福利片| 久久亚洲春色中文字幕久久久| 视频一区视频二区中文| 91丨九色porny丨蝌蚪| 国产亚洲美州欧州综合国| 蜜臀av亚洲一区中文字幕| 欧美日韩中文字幕一区| 亚洲品质自拍视频网站| www.欧美.com| 国产精品日产欧美久久久久| 盗摄精品av一区二区三区| 精品国产一区二区国模嫣然| 日韩av网站免费在线| 欧美日韩视频在线一区二区| 亚洲永久免费av| 欧美在线不卡视频| 亚洲综合成人在线| 欧美在线你懂得| 亚洲一二三区在线观看| 欧美视频一区在线观看| 亚欧色一区w666天堂| 欧美精品一卡两卡| 免费日本视频一区| www激情久久|