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

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

?? os_cpu_a.s

?? Micrium提供的專門針對ucos操作系統的TCP/IP協議棧 ucip
?? S
?? 第 1 頁 / 共 2 頁
字號:
@
@********************************************************************************************************
@                                               uC/OS-II
@                                         The Real-Time Kernel
@
@
@                             (c) Copyright 1992-2007, Micrium, Weston, FL
@                                          All Rights Reserved
@
@                                           Generic ARM Port
@
@ File      : OS_CPU_A.ASM
@ Version   : V1.82
@ By        : Jean J. Labrosse
@             Jean-Denis Hatier
@
@ For       : ARM7 or ARM9
@ Mode      : ARM or Thumb
@ Toolchain : GNU GCC
@********************************************************************************************************
@

@********************************************************************************************************
@                                           PUBLIC FUNCTIONS
@********************************************************************************************************
                                                                @ External references.
    .extern  OSRunning
    .extern  OSPrioCur
    .extern  OSPrioHighRdy
    .extern  OSTCBCur
    .extern  OSTCBHighRdy
    .extern  OSIntNesting
    .extern  OSIntExit
    .extern  OSTaskSwHook

                                                                @ Functions declared in this file.
    .global  OS_CPU_SR_Save
    .global  OS_CPU_SR_Restore
    .global  OSStartHighRdy
    .global  OSCtxSw
    .global  OSIntCtxSw

                                                                @ Functions related to exception handling.
    .global  OS_CPU_ARM_ExceptResetHndlr
    .global  OS_CPU_ARM_ExceptUndefInstrHndlr
    .global  OS_CPU_ARM_ExceptSwiHndlr
    .global  OS_CPU_ARM_ExceptPrefetchAbortHndlr
    .global  OS_CPU_ARM_ExceptDataAbortHndlr
    .global  OS_CPU_ARM_ExceptAddrAbortHndlr
    .global  OS_CPU_ARM_ExceptIrqHndlr
    .global  OS_CPU_ARM_ExceptFiqHndlr

    .extern  OS_CPU_ExceptHndlr


@********************************************************************************************************
@                                                EQUATES
@********************************************************************************************************

    .equ     OS_CPU_ARM_CONTROL_INT_DIS,       0xC0             @ Disable both FIQ and IRQ.
    .equ     OS_CPU_ARM_CONTROL_FIQ_DIS,       0x40             @ Disable FIQ.
    .equ     OS_CPU_ARM_CONTROL_IRQ_DIS,       0x80             @ Disable IRQ.
    .equ     OS_CPU_ARM_CONTROL_THUMB,         0x20             @ Set THUMB mode.
    .equ     OS_CPU_ARM_CONTROL_ARM,           0x00             @ Set ARM mode.

    .equ     OS_CPU_ARM_MODE_MASK,             0x1F
    .equ     OS_CPU_ARM_MODE_USR,              0x10
    .equ     OS_CPU_ARM_MODE_FIQ,              0x11
    .equ     OS_CPU_ARM_MODE_IRQ,              0x12
    .equ     OS_CPU_ARM_MODE_SVC,              0x13
    .equ     OS_CPU_ARM_MODE_ABT,              0x17
    .equ     OS_CPU_ARM_MODE_UND,              0x1B
    .equ     OS_CPU_ARM_MODE_SYS,              0x1F

    .equ     OS_CPU_ARM_EXCEPT_RESET,          0x00
    .equ     OS_CPU_ARM_EXCEPT_UNDEF_INSTR,    0x01
    .equ     OS_CPU_ARM_EXCEPT_SWI,            0x02
    .equ     OS_CPU_ARM_EXCEPT_PREFETCH_ABORT, 0x03
    .equ     OS_CPU_ARM_EXCEPT_DATA_ABORT,     0x04
    .equ     OS_CPU_ARM_EXCEPT_ADDR_ABORT,     0x05
    .equ     OS_CPU_ARM_EXCEPT_IRQ,            0x06
    .equ     OS_CPU_ARM_EXCEPT_FIQ,            0x07


@********************************************************************************************************
@                                      CODE GENERATION DIRECTIVES
@********************************************************************************************************

    .code 32



@*********************************************************************************************************
@                                  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  os_cpu_sr);
@
@
@ Note(s)    : (1) These functions are used in general like this:
@
@                 void Task (void  *p_arg)
@                 {
@                                                               /* Allocate storage for CPU status register.            */
@                 #if (OS_CRITICAL_METHOD == 3)
@                      OS_CPU_SR  os_cpu_sr;
@                 #endif
@
@                          :
@                          :
@                      OS_ENTER_CRITICAL();                     /* os_cpu_sr = OS_CPU_SR_Save();                        */
@                          :
@                          :
@                      OS_EXIT_CRITICAL();                      /* OS_CPU_SR_Restore(cpu_sr);                           */
@                          :
@                          :
@                 }
@*********************************************************************************************************

OS_CPU_SR_Save:
    MRS     R0, CPSR
    ORR     R1, R0, #OS_CPU_ARM_CONTROL_INT_DIS                 @ Set IRQ and FIQ bits in CPSR to disable all interrupts.
    MSR     CPSR_c, R1
    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.
@*********************************************************************************************************

OSStartHighRdy:

                                                                @ Change to SVC mode.
    MSR     CPSR_c, #(OS_CPU_ARM_CONTROL_INT_DIS | OS_CPU_ARM_MODE_SVC)

    LDR     R0, =OSTaskSwHook                                   @ OSTaskSwHook();
    MOV     LR, PC
    BX      R0

    LDR     R0, =OSRunning                                      @ OSRunning = TRUE;
    MOV     R1, #1
    STRB    R1, [R0]

                                                                @ SWITCH TO HIGHEST PRIORITY TASK:
    LDR     R0, =OSTCBHighRdy                                   @    Get highest priority task TCB address,
    LDR     R0, [R0]                                            @    Get stack pointer,
    LDR     SP, [R0]                                            @    Switch to the new stack,

    LDR     R0, [SP], #4                                        @    Pop new task's CPSR,
    MSR     SPSR_cxsf, R0

    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 SVC 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.
@*********************************************************************************************************

OSCtxSw:
                                                                @ SAVE CURRENT TASK'S CONTEXT:
    STMFD   SP!, {LR}                                           @     Push return address,
    STMFD   SP!, {LR}
    STMFD   SP!, {R0-R12}                                       @     Push registers,
    MRS     R0, CPSR                                            @     Push current CPSR,
    TST     LR, #1                                              @     See if called from Thumb mode,
    ORRNE   R0, R0, #OS_CPU_ARM_CONTROL_THUMB                   @     If yes, set the T-bit.
    STMFD   SP!, {R0}

    LDR     R0, =OSTCBCur                                       @ OSTCBCur->OSTCBStkPtr = SP;
    LDR     R1, [R0]
    STR     SP, [R1]

    LDR     R0, =OSTaskSwHook                                   @ OSTaskSwHook();
    MOV     LR, PC
    BX      R0

    LDR     R0, =OSPrioCur                                      @ OSPrioCur = OSPrioHighRdy;
    LDR     R1, =OSPrioHighRdy
    LDRB    R2, [R1]
    STRB    R2, [R0]

    LDR     R0, =OSTCBCur                                       @ OSTCBCur  = OSTCBHighRdy;
    LDR     R1, =OSTCBHighRdy
    LDR     R2, [R1]
    STR     R2, [R0]

    LDR     SP, [R2]                                            @ SP = OSTCBHighRdy->OSTCBStkPtr;

                                                                @ RESTORE NEW TASK'S CONTEXT:
    LDMFD   SP!, {R0}                                           @    Pop new task's CPSR,
    MSR     SPSR_cxsf, R0

    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 SVC 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.
@*********************************************************************************************************

OSIntCtxSw:
    LDR     R0, =OSTaskSwHook                                   @ OSTaskSwHook();
    MOV     LR, PC
    BX      R0

    LDR     R0, =OSPrioCur                                      @ OSPrioCur = OSPrioHighRdy;
    LDR     R1, =OSPrioHighRdy
    LDRB    R2, [R1]
    STRB    R2, [R0]

    LDR     R0, =OSTCBCur                                       @ OSTCBCur  = OSTCBHighRdy;
    LDR     R1, =OSTCBHighRdy
    LDR     R2, [R1]
    STR     R2, [R0]

    LDR     SP, [R2]                                            @ SP = OSTCBHighRdy->OSTCBStkPtr;

                                                                @ RESTORE NEW TASK'S CONTEXT:
    LDMFD   SP!, {R0}                                           @    Pop new task's CPSR,
    MSR     SPSR_cxsf, R0

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


@********************************************************************************************************
@                                        RESET EXCEPTION HANDLER

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产在线播放网站| 一个色综合网站| 夜夜揉揉日日人人青青一国产精品| 天天综合网天天综合色| 不卡av电影在线播放| 日韩一区二区麻豆国产| 亚洲伦在线观看| 国产成人小视频| 日韩一区二区三区视频| 亚洲精品国产精品乱码不99| 国产精品一级片| 日韩一区二区在线观看视频| 亚洲综合视频在线观看| av在线这里只有精品| 国产三级三级三级精品8ⅰ区| 视频一区二区欧美| 欧美日韩一级黄| 亚洲午夜成aⅴ人片| 色94色欧美sute亚洲13| 综合电影一区二区三区 | 色综合色狠狠天天综合色| 久久久久88色偷偷免费| 经典三级视频一区| 欧美高清dvd| 日本不卡的三区四区五区| 3d动漫精品啪啪一区二区竹菊| 亚洲综合一区二区| 欧洲另类一二三四区| 一区二区三区精品视频| 色噜噜狠狠一区二区三区果冻| 亚洲美女视频一区| 在线视频一区二区三区| 亚洲一区二区三区美女| 欧美日韩国产电影| 日韩黄色免费网站| 日韩一区二区三区免费观看| 老鸭窝一区二区久久精品| 欧美精品一区二区久久久| 精品一区二区三区久久久| 久久天堂av综合合色蜜桃网| 国产精品一线二线三线| 国产精品视频一区二区三区不卡| 成人动漫av在线| 亚洲精品欧美在线| 91麻豆精品国产91久久久使用方法| 免费美女久久99| 国产调教视频一区| 99国产精品久久久久久久久久| 亚洲免费视频中文字幕| 欧美性生活久久| 热久久久久久久| 国产午夜精品久久久久久免费视| 本田岬高潮一区二区三区| 一区二区三区国产豹纹内裤在线| 欧美三级日本三级少妇99| 精品一区中文字幕| 国产精品第一页第二页第三页| 欧美日韩一区三区四区| 精彩视频一区二区三区| 亚洲欧美视频一区| 日韩片之四级片| 91在线观看高清| 日韩av不卡在线观看| 国产女同性恋一区二区| 欧美视频一区二区三区在线观看 | 青青草原综合久久大伊人精品优势 | 色婷婷亚洲一区二区三区| 五月天婷婷综合| 亚洲国产高清在线| 欧美军同video69gay| 成人黄色小视频在线观看| 青青青伊人色综合久久| 亚洲美女视频在线| 精品国产百合女同互慰| 欧美在线观看18| 成人av在线一区二区三区| 日本不卡视频在线| 樱花影视一区二区| 国产日韩欧美制服另类| 欧美日韩国产经典色站一区二区三区| 国产美女精品人人做人人爽| 亚洲国产中文字幕| 国产精品国产成人国产三级| 日韩午夜中文字幕| 欧美日韩色一区| 色久综合一二码| 成人深夜福利app| 国产资源在线一区| 水蜜桃久久夜色精品一区的特点| 国产精品嫩草影院com| xnxx国产精品| 日韩三级在线免费观看| 欧美日免费三级在线| 91视频免费观看| 成人av片在线观看| 国产成人精品免费| 国产一区二区精品久久91| 日韩国产一二三区| 五月天中文字幕一区二区| 亚洲欧洲av色图| 中文字幕亚洲一区二区av在线| 国产欧美综合在线观看第十页| 日韩一区二区三| 日韩欧美高清dvd碟片| 欧美日韩美女一区二区| 日本韩国精品在线| 欧美在线视频不卡| 欧美视频日韩视频在线观看| 欧洲激情一区二区| 欧洲av在线精品| 欧美日韩三级视频| 欧美精品久久久久久久多人混战 | 久久午夜电影网| 久久欧美一区二区| 久久精品欧美一区二区三区不卡 | 亚洲国产精品久久久男人的天堂| 一区二区三区影院| 一区二区在线观看不卡| 亚洲综合精品自拍| 日韩制服丝袜先锋影音| 日本午夜一区二区| 精品中文av资源站在线观看| 国产综合成人久久大片91| 国产毛片精品视频| 成人av电影观看| 色综合久久综合网| 911国产精品| 精品国产1区2区3区| 国产精品视频在线看| 亚洲精品少妇30p| 亚洲h在线观看| 蜜桃免费网站一区二区三区| 狠狠色2019综合网| 99精品在线观看视频| 欧美影院精品一区| 日韩精品专区在线影院重磅| 欧美精品一区二区在线播放| 中文字幕免费在线观看视频一区| 国产精品成人一区二区三区夜夜夜| 亚洲精品成人a在线观看| 日本午夜精品视频在线观看 | 精久久久久久久久久久| 成人综合激情网| 欧美三级电影网站| 久久色成人在线| 一区二区三区在线看| 久久成人久久鬼色| 99久久精品免费| 日韩一区二区三区观看| 最新日韩av在线| 日本不卡的三区四区五区| 成年人午夜久久久| 欧美一区二区三区免费视频| 国产精品网站在线观看| 日韩国产欧美视频| 色综合天天做天天爱| 日韩欧美中文一区| 樱桃国产成人精品视频| 国产精品一线二线三线精华| 欧美日韩中文字幕一区二区| 日本一区二区在线不卡| 日韩在线一区二区三区| 97久久超碰国产精品| 精品久久久久久最新网址| 亚洲精品久久久蜜桃| 国产一区二区三区| 日韩一区二区三区四区| 亚洲黄色小说网站| 成人18视频在线播放| 久久先锋资源网| 日日摸夜夜添夜夜添精品视频 | 亚洲国产你懂的| 丁香桃色午夜亚洲一区二区三区| 8v天堂国产在线一区二区| 亚洲欧美日本韩国| 成人动漫在线一区| 国产日韩三级在线| 国产伦精品一区二区三区免费迷| 91精品国产全国免费观看| 亚洲精品视频在线看| 不卡av在线网| 国产精品日日摸夜夜摸av| 久久精品72免费观看| 99精品1区2区| 亚洲国产精品av| 国产成人综合在线| 久久香蕉国产线看观看99| 美女免费视频一区二区| 3751色影院一区二区三区| 亚洲福利电影网| 在线观看日产精品| 亚洲丝袜制服诱惑| 99国产精品国产精品久久| 国产精品不卡一区| caoporn国产精品| 亚洲欧美日韩国产手机在线| 不卡av免费在线观看| 亚洲视频在线观看一区| 一本大道久久a久久综合| 亚洲美女屁股眼交3|