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

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

?? os_cpu_a.s

?? ucos 移植實驗成功把ucos移植到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麻豆精品国产91久久久| 麻豆精品在线视频| 中文字幕中文字幕一区| 精品日韩在线观看| 欧美va在线播放| 精品免费99久久| 国产亚洲1区2区3区| 国产农村妇女精品| 国产女人aaa级久久久级 | 久久不见久久见中文字幕免费| 午夜精品久久久久久久99樱桃| 亚洲国产一区二区在线播放| 午夜精品一区二区三区电影天堂| 亚洲成人午夜电影| 久久国产精品露脸对白| 国产一区二区三区精品视频| 丁香激情综合国产| 91视频免费播放| 欧美日韩中文精品| 欧美成人乱码一区二区三区| 久久九九99视频| 国产精品国产三级国产有无不卡| 亚洲另类在线视频| 日韩电影一区二区三区四区| 久草在线在线精品观看| 成人激情免费网站| 欧美日韩精品专区| 久久久精品tv| 亚洲一区在线观看免费观看电影高清| 全部av―极品视觉盛宴亚洲| 国产成人av一区二区三区在线| 99精品热视频| 日韩免费在线观看| 亚洲男人的天堂av| 久久99久久精品| 色综合夜色一区| 精品国产伦一区二区三区观看体验 | 免费成人av资源网| 成人国产免费视频| 正在播放一区二区| 日韩久久一区二区| 麻豆精品视频在线观看视频| 91网站最新地址| 欧美精品一区二区三区视频| 一区二区三区不卡在线观看| 国产精品一二三四| 欧美另类videos死尸| 亚洲欧洲国产日韩| 韩国精品在线观看| 欧美巨大另类极品videosbest | 亚洲四区在线观看| 久久99精品国产.久久久久| 99这里都是精品| 精品写真视频在线观看| av欧美精品.com| 欧美久久久久久蜜桃| 欧美精品一区二区久久婷婷| 亚洲在线视频一区| 懂色中文一区二区在线播放| 日韩一二三区不卡| 亚洲欧美一区二区三区国产精品| 丝袜a∨在线一区二区三区不卡| 成人综合婷婷国产精品久久蜜臀 | 91国偷自产一区二区三区成为亚洲经典 | 色94色欧美sute亚洲线路二| 精品久久久久久久久久久久久久久 | 国产成人精品午夜视频免费| 欧美剧情片在线观看| 亚洲人快播电影网| 99久久精品费精品国产一区二区| 久久久精品免费网站| 国内欧美视频一区二区| 欧美不卡在线视频| 免费成人性网站| 欧美一区二区观看视频| 日韩精品电影一区亚洲| 555www色欧美视频| 视频一区二区国产| 日韩欧美一二三区| 美女精品一区二区| 久久婷婷一区二区三区| 国产精品一品二品| 国产欧美精品在线观看| 成人av网站在线观看免费| 国产精品欧美精品| 91在线码无精品| 亚洲另类春色校园小说| 欧美亚洲动漫另类| 午夜精品在线看| 精品欧美乱码久久久久久| 韩国午夜理伦三级不卡影院| 亚洲国产精品传媒在线观看| av网站免费线看精品| 亚洲综合色网站| 91精品国产综合久久久久久久久久 | 亚洲一区在线视频| 日韩视频免费观看高清完整版 | 91在线免费播放| 亚洲香蕉伊在人在线观| 欧美一区二区免费视频| 国产一区二区免费看| 国产精品成人在线观看| 在线观看日韩国产| 日本视频在线一区| 久久综合网色—综合色88| 成人免费毛片嘿嘿连载视频| 夜夜揉揉日日人人青青一国产精品| 欧美性色综合网| 国产在线精品视频| 一区二区在线免费观看| 日韩精品最新网址| 91亚洲国产成人精品一区二区三| 亚洲第一二三四区| 国产网站一区二区三区| 欧美丝袜丝交足nylons图片| 国产精品综合av一区二区国产馆| 亚洲免费观看高清在线观看| 日韩免费看网站| 亚洲综合在线免费观看| 欧美成人猛片aaaaaaa| 91福利国产精品| 国产盗摄一区二区| 日韩成人免费在线| 亚洲免费在线视频一区 二区| 欧美一级日韩免费不卡| 色综合天天做天天爱| 国产在线不卡一区| 日韩高清一级片| 亚洲乱码国产乱码精品精小说| 亚洲精品一线二线三线| 欧美日韩综合在线免费观看| 成人国产精品免费网站| 黄页视频在线91| 日韩福利电影在线| 曰韩精品一区二区| 中文字幕一区二区日韩精品绯色| 精品国产1区二区| 欧美一区二区三区在线观看视频| 色噜噜狠狠色综合中国| 成人涩涩免费视频| 国产91综合网| 国产精品一二三在| 国产精品亚洲人在线观看| 九色综合国产一区二区三区| 日韩二区在线观看| 丝袜国产日韩另类美女| 五月激情综合婷婷| 亚洲综合激情小说| 一区二区三区在线观看网站| 最新久久zyz资源站| 国产精品麻豆欧美日韩ww| 久久久久97国产精华液好用吗| 日韩一区二区精品| 日韩一级二级三级| 日韩精品一区二区三区在线播放| 91精品国产手机| 日韩欧美资源站| 精品久久久久久久一区二区蜜臀| 2024国产精品视频| 国产欧美日韩精品一区| 国产精品日韩成人| 亚洲精品久久嫩草网站秘色| 一区二区三区.www| 亚洲成人av一区二区| 丝袜a∨在线一区二区三区不卡| 日韩黄色免费电影| 黑人巨大精品欧美黑白配亚洲| 国产精品1024久久| 99re这里都是精品| 欧美三级中文字| 日韩欧美一卡二卡| 国产三级三级三级精品8ⅰ区| 欧美高清在线一区| 一区二区三区久久| 日韩激情一区二区| 国产精品亚洲一区二区三区在线 | 欧美日韩精品电影| 欧美videofree性高清杂交| 国产视频一区不卡| 亚洲丰满少妇videoshd| 麻豆精品视频在线观看免费| 国产成人免费视频一区| 色国产综合视频| 日韩美女一区二区三区| 国产精品女主播在线观看| 亚洲自拍另类综合| 国产资源精品在线观看| 91热门视频在线观看| 欧美一区二区三区男人的天堂| 久久久久一区二区三区四区| 亚洲欧美另类在线| 另类调教123区| 一本到不卡精品视频在线观看| 日韩欧美不卡在线观看视频| 国产精品视频第一区| 日韩精品电影在线| 色婷婷精品大视频在线蜜桃视频| 精品国产亚洲一区二区三区在线观看 | 国产一区二区中文字幕| 在线观看三级视频欧美|