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

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

?? os_cpu_a.asm

?? UcOS2.76在ATMEL AT91RM9200 ARM9上的移植代碼
?? ASM
?? 第 1 頁 / 共 2 頁
字號:
;********************************************************************************************************
;                                               uC/OS-II
;                                         The Real-Time Kernel
;
;                               (c) Copyright 1992-2005, Micrium, Weston, FL
;                                          All Rights Reserved
;
;                                           Generic ARM Port
;
; File      : OS_CPU_A.ASM
; Version   : V1.61
; By        : Jean J. Labrosse
;
; For       : ARM7 or ARM9
; Mode      : ARM or Thumb
; Toolchain : IAR's EWARM V4.11a and higher
;********************************************************************************************************

            EXTERN  OSRunning                    ; External references
            EXTERN  OSPrioCur
            EXTERN  OSPrioHighRdy
            EXTERN  OSTCBCur
            EXTERN  OSTCBHighRdy
            EXTERN  OSIntNesting
            EXTERN  OSIntExit
            EXTERN  OSTaskSwHook
            EXTERN  OS_CPU_IRQ_ISR_Handler
            EXTERN  OS_CPU_FIQ_ISR_Handler


            PUBLIC  OS_CPU_SR_Save               ; Functions declared in this file
            PUBLIC  OS_CPU_SR_Restore
            PUBLIC  OSStartHighRdy
            PUBLIC  OSCtxSw
            PUBLIC  OSIntCtxSw
            PUBLIC  OS_CPU_IRQ_ISR
            PUBLIC  OS_CPU_FIQ_ISR


NO_INT      EQU     0xC0                         ; Mask used to disable interrupts (Both FIR and IRQ)
SVC32_MODE  EQU     0x13
FIQ32_MODE  EQU     0x11
IRQ32_MODE  EQU     0x12


;*********************************************************************************************************
;                                   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.
;
; Prototypes :     OS_CPU_SR  OS_CPU_SR_Save(void);
;                  void       OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
;
;
; Note(s)    : 1) These functions are used in general like this:
;
;                 void Task (void *p_arg)
;                 {
;                 #if OS_CRITICAL_METHOD == 3          /* Allocate storage for CPU status register */
;                     OS_CPU_SR  cpu_sr;
;                 #endif
;
;                          :
;                          :
;                     OS_ENTER_CRITICAL();             /* cpu_sr = OS_CPU_SaveSR();                */
;                          :
;                          :
;                     OS_EXIT_CRITICAL();              /* OS_CPU_RestoreSR(cpu_sr);                */
;                          :
;                          :
;                 }
;
;              2) OS_CPU_SaveSR() is implemented as recommended by Atmel's application note:
;
;                    "Disabling Interrupts at Processor Level"
;*********************************************************************************************************

        RSEG CODE:CODE:NOROOT(2)
        CODE32

OS_CPU_SR_Save
        MRS     R0,CPSR                     ; Set IRQ and FIQ bits in CPSR to disable all interrupts
        ORR     R1,R0,#NO_INT
        MSR     CPSR_c,R1
        MRS     R1,CPSR                     ; Confirm that CPSR contains the proper interrupt disable flags
        AND     R1,R1,#NO_INT
        CMP     R1,#NO_INT
        BNE     OS_CPU_SR_Save              ; Not properly disabled (try again)
        BX      LR                          ; Disabled, return the original CPSR contents in R0


OS_CPU_SR_Restore
        MSR     CPSR_c,R0
        BX      LR

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

        RSEG CODE:CODE:NOROOT(2)
        CODE32

OSStartHighRdy

        LDR     R0, ??OS_TaskSwHook     ; OSTaskSwHook();
        MOV     LR, PC
        BX      R0

        MSR     CPSR_cxsf, #0xD3        ; Switch to SVC mode with IRQ and FIQ disabled

        LDR     R4, ??OS_Running        ; OSRunning = TRUE
        MOV     R5, #1
        STRB    R5, [R4]

                                        ; SWITCH TO HIGHEST PRIORITY TASK
        LDR     R4, ??OS_TCBHighRdy     ;    Get highest priority task TCB address
        LDR     R4, [R4]                ;    get stack pointer
        LDR     SP, [R4]                ;    switch to the new stack

        LDR     R4,  [SP], #4           ;    pop new task's CPSR
        MSR     SPSR_cxsf,R4
        LDMFD   SP!, {R0-R12,LR,PC}^    ;    pop new task's context


;*********************************************************************************************************
;                         PERFORM A CONTEXT SWITCH (From task level) - OSCtxSw()
;
; Note(s) : 1) OSCtxSw() is called in SYS mode with BOTH FIQ and IRQ interrupts DISABLED
;
;           2) The pseudo-code for OSCtxSw() is:
;              a) Save the current task's context onto the current task's stack
;              b) OSTCBCur->OSTCBStkPtr = SP;
;              c) OSTaskSwHook();
;              d) OSPrioCur             = OSPrioHighRdy;
;              e) OSTCBCur              = OSTCBHighRdy;
;              f) SP                    = OSTCBHighRdy->OSTCBStkPtr;
;              g) Restore the new task's context from the new task's stack
;              h) Return to new task's code
;
;           3) Upon entry:
;              OSTCBCur      points to the OS_TCB of the task to suspend
;              OSTCBHighRdy  points to the OS_TCB of the task to resume
;*********************************************************************************************************

        RSEG CODE:CODE:NOROOT(2)
        CODE32

OSCtxSw
                                        ; SAVE CURRENT TASK'S CONTEXT
        STMFD   SP!, {LR}               ;     Push return address
        STMFD   SP!, {LR}
        STMFD   SP!, {R0-R12}           ;     Push registers
        MRS     R4,  CPSR               ;     Push current CPSR
        TST     LR, #1                  ;     See if called from Thumb mode
        ORRNE   R4,  R4, #0x20          ;     If yes, Set the T-bit
        STMFD   SP!, {R4}

        LDR     R4, ??OS_TCBCur         ; OSTCBCur->OSTCBStkPtr = SP;
        LDR     R5, [R4]
        STR     SP, [R5]

        LDR     R0, ??OS_TaskSwHook     ; OSTaskSwHook();
        MOV     LR, PC
        BX      R0

        LDR     R4, ??OS_PrioCur        ; OSPrioCur = OSPrioHighRdy
        LDR     R5, ??OS_PrioHighRdy
        LDRB    R6, [R5]
        STRB    R6, [R4]

        LDR     R4, ??OS_TCBCur         ; OSTCBCur  = OSTCBHighRdy;
        LDR     R6, ??OS_TCBHighRdy
        LDR     R6, [R6]
        STR     R6, [R4]

        LDR     SP, [R6]                ; SP = OSTCBHighRdy->OSTCBStkPtr;

                                        ; RESTORE NEW TASK'S CONTEXT
        LDMFD   SP!, {R4}               ;    Pop new task's CPSR
        MSR     SPSR_cxsf, R4

        LDMFD   SP!, {R0-R12,LR,PC}^    ;    Pop new task's context


;*********************************************************************************************************
;                   PERFORM A CONTEXT SWITCH (From interrupt level) - OSIntCtxSw()
;
; Note(s) : 1) OSIntCtxSw() is called in SYS mode with BOTH FIQ and IRQ interrupts DISABLED
;
;           2) The pseudo-code for OSCtxSw() is:
;              a) OSTaskSwHook();
;              b) OSPrioCur             = OSPrioHighRdy;
;              c) OSTCBCur              = OSTCBHighRdy;
;              d) SP                    = OSTCBHighRdy->OSTCBStkPtr;
;              e) Restore the new task's context from the new task's stack
;              f) Return to new task's code
;
;           3) Upon entry:
;              OSTCBCur      points to the OS_TCB of the task to suspend
;              OSTCBHighRdy  points to the OS_TCB of the task to resume
;*********************************************************************************************************

        RSEG CODE:CODE:NOROOT(2)
        CODE32

OSIntCtxSw

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本色道久久综合精品竹菊| 欧美mv日韩mv国产网站app| 欧美视频三区在线播放| 精品福利在线导航| 亚洲一级在线观看| 成人午夜免费视频| 日韩一区二区三区高清免费看看| 国产三级一区二区| 久久69国产一区二区蜜臀| 色素色在线综合| 国产精品毛片无遮挡高清| 美女性感视频久久| 欧美巨大另类极品videosbest | 亚洲欧美日韩电影| 极品少妇xxxx精品少妇| 欧美日韩视频在线第一区| 中文字幕视频一区二区三区久| 久久激情综合网| 91.麻豆视频| 亚洲国产美女搞黄色| 99久久国产综合精品女不卡| 精品动漫一区二区三区在线观看| 首页国产丝袜综合| 欧美区视频在线观看| 一区二区高清在线| 欧美在线观看视频一区二区三区 | 日韩1区2区日韩1区2区| 一本久道久久综合中文字幕 | 性欧美疯狂xxxxbbbb| 色天天综合色天天久久| 亚洲欧美怡红院| 91免费国产视频网站| 亚洲免费在线观看视频| 91麻豆国产福利在线观看| 成人欧美一区二区三区白人 | 亚洲欧美国产毛片在线| 国产成人小视频| 中文在线一区二区| 成人性视频网站| 国产精品久久夜| 99精品久久久久久| 樱花影视一区二区| 欧美日韩国产三级| 天堂在线一区二区| 精品少妇一区二区三区在线视频| 另类中文字幕网| 久久精品人人做人人爽97| 成人av片在线观看| 亚洲一区二区在线视频| 7878成人国产在线观看| 国内精品久久久久影院色| 国产精品午夜电影| 欧美日韩一区不卡| 精品一区二区免费看| 欧美国产欧美亚州国产日韩mv天天看完整 | 91国偷自产一区二区三区成为亚洲经典 | 日韩一区二区三区精品视频| 另类小说色综合网站| 国产精品嫩草99a| 欧美日韩精品福利| 久久se精品一区精品二区| 国产精品美女久久久久高潮| 欧美日韩免费在线视频| 久久国产成人午夜av影院| 中文字幕在线免费不卡| 欧美日韩国产影片| 国产不卡在线一区| 亚洲国产综合色| 精品国产第一区二区三区观看体验| 丁香桃色午夜亚洲一区二区三区| 一区二区高清在线| 国产亚洲美州欧州综合国| 欧美在线不卡一区| 国产一二三精品| 亚洲国产精品一区二区www在线| 精品女同一区二区| 91日韩一区二区三区| 国内精品在线播放| 亚洲小少妇裸体bbw| 精品奇米国产一区二区三区| 色综合天天综合在线视频| 精品亚洲欧美一区| 一区二区日韩电影| 国产视频视频一区| 91麻豆精品国产91久久久资源速度| 国产福利电影一区二区三区| 日日夜夜精品视频免费| 亚洲你懂的在线视频| 精品欧美一区二区三区精品久久 | 国产精品白丝jk黑袜喷水| 香蕉影视欧美成人| 亚洲老司机在线| 国产亚洲女人久久久久毛片| 欧美色图片你懂的| 色综合久久久久| 99视频超级精品| 国产成a人亚洲精品| 久久国产尿小便嘘嘘| 五月婷婷综合激情| 亚洲大片免费看| 亚洲激情av在线| 亚洲精品一二三四区| 亚洲素人一区二区| 综合电影一区二区三区 | 一区二区三区欧美久久| 国产色产综合产在线视频| 精品国产亚洲一区二区三区在线观看| 欧美日韩亚洲高清一区二区| 91在线观看视频| av在线播放不卡| 白白色 亚洲乱淫| 成人app网站| 99久久综合国产精品| 成人美女在线视频| jvid福利写真一区二区三区| 粉嫩一区二区三区性色av| 国产精品18久久久久久久久| 精品一区二区三区免费观看| 精品在线播放午夜| 国产又黄又大久久| 大陆成人av片| 色成人在线视频| 欧美精选在线播放| 日韩一本二本av| 久久蜜臀精品av| 亚洲欧美一区二区视频| 亚洲激情中文1区| 青青国产91久久久久久| 国产呦精品一区二区三区网站| 国产黄色精品网站| 成人av小说网| 欧美色图免费看| 欧美成人a∨高清免费观看| 久久精品视频一区二区| 国产精品国产三级国产普通话三级| 国产精品久久久久久久浪潮网站| 亚洲欧洲99久久| 午夜精品免费在线观看| 久久超碰97中文字幕| 成人精品国产一区二区4080| 色香蕉成人二区免费| 日韩欧美一级精品久久| 国产女人18水真多18精品一级做| 日韩一区日韩二区| 麻豆精品精品国产自在97香蕉| 国产成人精品午夜视频免费| 91免费看视频| 久久综合色天天久久综合图片| 国产欧美一区二区精品仙草咪 | av电影在线观看完整版一区二区| 91美女视频网站| 欧美电视剧在线看免费| 国产精品不卡一区| 看片的网站亚洲| 94-欧美-setu| 精品乱码亚洲一区二区不卡| 国产精品久久久久精k8| 免费的成人av| 91搞黄在线观看| 久久久91精品国产一区二区三区| 亚洲一区二区视频在线| 国产福利精品一区二区| 欧美丰满一区二区免费视频| 亚洲国产成人一区二区三区| 亚洲第一精品在线| a亚洲天堂av| 26uuu国产在线精品一区二区| 亚洲综合色在线| a在线欧美一区| 久久久国产精华| 久久精品国内一区二区三区| 一本大道久久精品懂色aⅴ | 制服丝袜亚洲精品中文字幕| 欧美国产日本视频| 老司机精品视频导航| 欧美日本乱大交xxxxx| 亚洲日本一区二区三区| 国产成人无遮挡在线视频| 欧美一区二区三区小说| 亚洲精品高清视频在线观看| 成人亚洲一区二区一| 亚洲精品在线免费播放| 日韩精品国产欧美| 色综合久久天天| 中文字幕亚洲一区二区va在线| 国产一区二区成人久久免费影院| 日韩一区二区三区四区| 天堂va蜜桃一区二区三区| 在线精品视频免费观看| 国产精品成人一区二区三区夜夜夜| 国产黄色成人av| 久久精品人人做| 国产成人夜色高潮福利影视| 精品国产1区2区3区| 激情成人综合网| xvideos.蜜桃一区二区| 精品一区免费av| 久久综合九色综合欧美亚洲| 九九**精品视频免费播放| 欧美xfplay|