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

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

?? os_cpu_a.s

?? 基于三星公司的ARM9 的2410的uccos的移植代碼
?? 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  OSTimeTick
        IMPORT  OSIntEnter
        IMPORT  OSIntExit
        IMPORT  clear_osirq

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

NOINT   EQU 0xc0

        EXPORT  UCOS_timer_ISR
UCOS_timer_ISR

        stmfd sp!,{r0-r3,r12,lr}

        bl OSIntEnter
        ;my added
        ldr r0,=OSIntNesting
        ldrb r0,[r0]
        cmp r0,#1
        bne  _nest_next
        ldr r0,=OSTCBCur
        ldr r1,[r0]
        str sp,[r1] 
_nest_next       
        bl OSTimeTick
        bl OSIntExit
        bl clear_osirq

        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一区二区三区免费野_久草精品视频
亚洲情趣在线观看| 亚洲精品va在线观看| 一本大道av伊人久久综合| 久久成人免费日本黄色| 美腿丝袜亚洲综合| 国产一区视频在线看| 久久91精品久久久久久秒播| 首页国产欧美久久| 美女久久久精品| 激情丁香综合五月| 韩国欧美国产1区| 国产精品系列在线播放| 成人午夜精品一区二区三区| jlzzjlzz国产精品久久| 色伊人久久综合中文字幕| 精品视频色一区| 欧美一卡二卡在线| 久久久91精品国产一区二区精品 | 日本大胆欧美人术艺术动态| 无码av免费一区二区三区试看| 亚洲mv在线观看| 青青草伊人久久| 国产suv精品一区二区883| 91麻豆精东视频| 欧美精品777| 国产片一区二区| 一区av在线播放| 秋霞午夜av一区二区三区| 国产盗摄一区二区三区| 91欧美激情一区二区三区成人| 欧美日韩国产高清一区二区三区| 欧美电影免费观看高清完整版在 | 久久久.com| 一区二区三区四区亚洲| 免费人成精品欧美精品| 丰满岳乱妇一区二区三区| 欧美性高清videossexo| 2欧美一区二区三区在线观看视频| 国产精品成人一区二区三区夜夜夜| 亚洲一区二区三区四区五区中文 | 中文字幕av在线一区二区三区| 亚洲精品中文在线| 国产真实乱偷精品视频免| 91久久精品国产91性色tv| 日韩欧美资源站| 综合婷婷亚洲小说| 国产一区二区三区久久悠悠色av| 91国偷自产一区二区三区成为亚洲经典 | 成人激情综合网站| 欧美女孩性生活视频| 国产精品国产三级国产专播品爱网| 男人操女人的视频在线观看欧美| 成人一区在线看| 日韩精品中文字幕一区二区三区 | av在线播放不卡| 日韩写真欧美这视频| 一区二区三区在线观看欧美| 粉嫩一区二区三区在线看| 日韩欧美美女一区二区三区| 亚洲国产精品麻豆| 色老综合老女人久久久| 国产精品国产三级国产a| 国产一区二区在线看| 精品婷婷伊人一区三区三| 亚洲欧美二区三区| 99免费精品在线| 国产欧美日韩不卡| 国产大片一区二区| 久久影视一区二区| 美国毛片一区二区三区| 欧美日本在线播放| 午夜一区二区三区视频| 欧美最新大片在线看 | 午夜婷婷国产麻豆精品| 欧美亚洲国产一区二区三区| 亚洲天堂成人在线观看| www.激情成人| 亚洲欧美怡红院| 色婷婷久久久久swag精品 | 亚洲v日本v欧美v久久精品| 91亚洲精华国产精华精华液| 亚洲色欲色欲www在线观看| 99久久免费视频.com| 中文字幕中文字幕一区二区 | 色av一区二区| 亚洲国产美国国产综合一区二区| 欧美日韩小视频| 日韩中文字幕一区二区三区| 884aa四虎影成人精品一区| 日本不卡123| 久久免费电影网| 99精品国产热久久91蜜凸| 亚洲美女区一区| 欧美日韩精品电影| 日本亚洲电影天堂| 久久久久久久久久久黄色| 国产成人精品免费一区二区| 亚洲素人一区二区| 欧美丝袜自拍制服另类| 久久精品国产久精国产| 欧美经典一区二区三区| 欧美专区亚洲专区| 麻豆精品一区二区三区| 日本一区二区视频在线| 日本韩国欧美国产| 韩国av一区二区三区| 亚洲女同ⅹxx女同tv| 欧美日韩一区高清| 国产精一品亚洲二区在线视频| 亚洲精选视频免费看| 日韩欧美二区三区| 91色porny蝌蚪| 黄色资源网久久资源365| 18成人在线观看| 欧美成人免费网站| 色域天天综合网| 激情六月婷婷久久| 亚洲大片一区二区三区| 国产三级精品三级在线专区| 欧美美女视频在线观看| 成人动漫一区二区三区| 日本在线播放一区二区三区| 国产精品乱码妇女bbbb| 欧美一级黄色大片| 99re这里只有精品视频首页| 久久99久久久欧美国产| 亚洲大片精品永久免费| 综合电影一区二区三区| 26uuu色噜噜精品一区二区| 欧美系列一区二区| 成人黄色大片在线观看| 国产一区二区三区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品国产乱码久久久久久久久 | 国产三级欧美三级| 日韩丝袜情趣美女图片| 在线观看欧美精品| 不卡的av中国片| 国产一区999| 精品一区二区三区在线播放视频| 亚洲成人动漫在线免费观看| 亚洲欧美一区二区三区国产精品| 久久久久一区二区三区四区| 精品国产乱子伦一区| 日韩一区二区三区免费看| 欧美视频在线播放| 欧美亚洲国产bt| 91免费看`日韩一区二区| 国产一区二三区| 国产精品资源网| 国产v综合v亚洲欧| 国产福利视频一区二区三区| 黑人巨大精品欧美黑白配亚洲| 秋霞午夜av一区二区三区| 日本不卡视频一二三区| 性欧美大战久久久久久久久| 亚洲成人午夜电影| 亚洲电影你懂得| 无吗不卡中文字幕| 美女性感视频久久| 黄页视频在线91| 成人激情av网| 色一区在线观看| 欧美日韩成人综合天天影院| 欧美精品电影在线播放| 欧美刺激午夜性久久久久久久 | 国产欧美日韩不卡免费| 国产精品国产三级国产三级人妇| 国产精品人妖ts系列视频| 国产精品区一区二区三| 亚洲另类中文字| 日日夜夜精品视频天天综合网| 丝袜美腿亚洲色图| 国产精品综合视频| 99久久精品情趣| 欧美色涩在线第一页| 日韩免费观看2025年上映的电影| 久久精品免视看| 亚洲综合一区在线| 美女视频一区二区| av日韩在线网站| 欧美日韩精品三区| 久久久久久久av麻豆果冻| 亚洲精品水蜜桃| 日韩精品色哟哟| 成人免费看的视频| 欧美一区二区三区思思人| 国产无遮挡一区二区三区毛片日本| 亚洲欧美日韩电影| 麻豆一区二区三区| www.欧美精品一二区| 日韩一区二区在线看片| 亚洲色欲色欲www| 九九国产精品视频| 色美美综合视频| 久久免费电影网| 天天爽夜夜爽夜夜爽精品视频| 成人av片在线观看| 精品久久久久久久久久久久久久久 | 制服丝袜亚洲网站|