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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? os_cpu_a.asm

?? atmel9260SAM7s64在IAR下移植源程序
?? ASM
字號:
// os_cpu.asm
            EXTERN  OSRunning                    ; 外部參考
            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               ; 本文件中定義的函數(shù)
            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                         ; 用于禁止FIQ和IRQ中斷的屏蔽碼
SVC32_MODE  EQU     0x13
FIQ32_MODE  EQU     0x11
IRQ32_MODE  EQU     0x12

;*********************************************************************************************************
;                                         方式3函數(shù)的臨界部分
; 說明:通過保存中斷狀態(tài)來禁止/允許中斷。一般來說應(yīng)該將中斷禁止標志保存在變量cpu_sr中,然后禁止中斷。
;       將cpu_sr復(fù)制回CPU的狀態(tài)寄存器即可恢復(fù)中斷禁止狀態(tài)。
;
; 原型:OS_CPU_SR  OS_CPU_SR_Save(void);
;       void       OS_CPU_SR_Restore(OS_CPU_SR cpu_sr);
;
; 注意::1) 函數(shù)一般使用方法容下:
;                 void Task (void *p_arg) {
;                 #if OS_CRITICAL_METHOD == 3          // 分配CPU狀態(tài)寄存器存儲單元
;                     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()                      // 禁止中斷
;*********************************************************************************************************
        RSEG CODE:CODE:NOROOT(2)
        CODE32

OS_CPU_SR_Save
        MRS     R0,CPSR                     ; 設(shè)置CPSR中的IRQFIQ位以禁止所有中斷
        ORR     R1,R0,#NO_INT
        MSR     CPSR_c,R1
        MRS     R1,CPSR                     ; 確認CPSR中包含了合適的中斷禁止標志
        AND     R1,R1,#NO_INT
        CMP     R1,#NO_INT
        BNE     OS_CPU_SR_Save              ; 沒有恰當禁止,重試
        BX      LR                          ; 已禁止

OS_CPU_SR_Restore
        MSR     CPSR_c,R0
        BX      LR

;*********************************************************************************************************
;                                            啟動多任務(wù)
; 原型:void OSStartHighRdy(void)
;
; 注意:1) OSStartHighRdy()函數(shù)必須:
;              a) 調(diào)用 OSTaskSwHook(),
;              b) 然后將 OSRunning 設(shè)置為 TRUE,
;              c) 切換到最高優(yōu)先級任務(wù)
;*********************************************************************************************************
        RSEG CODE:CODE:NOROOT(2)
        CODE32

OSStartHighRdy
        LDR     R0, ??OS_TaskSwHook     ; OSTaskSwHook();
        MOV     LR, PC
        BX      R0
        MSR     CPSR_cxsf, #0xD3        ; 切換到管理模式,禁止 IRQ 和 FIQ
        LDR     R4, ??OS_Running        ; OSRunning = TRUE
        MOV     R5, #1
        STRB    R5, [R4]
                                        ; 切換到最高優(yōu)先級任務(wù)
        LDR     R4, ??OS_TCBHighRdy     ; 獲得最高優(yōu)先級任務(wù)的TCB地址
        LDR     R4, [R4]                ; 獲得堆棧指針
        LDR     SP, [R4]                ; 切換到新堆棧

        LDR     R4,  [SP], #4           ; 讀取SP的對應(yīng)地址的值, SP=SP+4, 彈出新任務(wù)的 CPSR
        MSR     SPSR_cxsf,R4            ; 屏蔽0-31位
        LDMFD   SP!, {R0-R12,LR,PC}^    ; 彈出新任務(wù)的上下文(context)
                                        ; 由于用戶堆棧的生長方向是向下的
                                        ; 因此在堆棧彈出時向上  FD參數(shù)用于遞減堆棧
                                        ; ^ 表示除裝載正常的多寄存器外,將SPSR拷貝到CPSR中
                                        ; ! 表示將最后的地址回寫到SP中
;*********************************************************************************************************
;                                     執(zhí)行任務(wù)切換(任務(wù)級) - OSCtxSw()
;
; 注意:1) OSCtxSw() 應(yīng)在禁止FIQ和IRQ中斷的條件下以系統(tǒng)模式調(diào)用
;
;       2) OSCtxSw() 的偽代碼如下:
;              a) 將當前任務(wù)的上下文(context)保存到當前任務(wù)的堆棧中
;              b) OSTCBCur->OSTCBStkPtr = SP;
;              c) OSTaskSwHook();
;              d) OSPrioCur             = OSPrioHighRdy;
;              e) OSTCBCur              = OSTCBHighRdy;
;              f) SP                    = OSTCBHighRdy->OSTCBStkPtr;
;              g) 從新任務(wù)的堆棧中恢復(fù)新任務(wù)的上下文(context)
;              h) 返回到新任務(wù)的代碼中
;
;           3) 入口:
;              OSTCBCur      指向要掛起任務(wù)的 OS_TCB
;              OSTCBHighRdy  指向要恢復(fù)任務(wù)的 OS_TCB
;*********************************************************************************************************
        RSEG CODE:CODE:NOROOT(2)
        CODE32
OSCtxSw
                                        ; 保存當前任務(wù)的上下文(CONTEXT)
        STMFD   SP!, {LR}               ; 當前地址壓棧
        STMFD   SP!, {LR}
        STMFD   SP!, {R0-R12}           ; 寄存器壓棧
        MRS     R4,  CPSR               ; 當前CPSR壓棧
        TST     LR, #1                  ; 測試是否從Thumb模式下調(diào)用
        ORRNE   R4,  R4, #0x20          ; 是,置1 T 標志
        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;

                                        ; 恢復(fù)新任務(wù)的上下文(CONTEXT)
        LDMFD   SP!, {R4}               ; 新任務(wù)的CPSR出棧
        MSR     SPSR_cxsf, R4

        LDMFD   SP!, {R0-R12,LR,PC}^    ; 新任務(wù)的下文(CONTEXT)出棧

;*********************************************************************************************************
;                                執(zhí)行任務(wù)切換(中斷級) - OSIntCtxSw()
;
; 注意: 1) OSIntCtxSw()  應(yīng)在禁止FIQ和IRQ中斷的條件下以系統(tǒng)模式調(diào)用
;
;        2) OSCtxSw() 的偽代碼如下:
;              a) OSTaskSwHook();
;              b) OSPrioCur             = OSPrioHighRdy;
;              c) OSTCBCur              = OSTCBHighRdy;
;              d) SP                    = OSTCBHighRdy->OSTCBStkPtr;
;              e) 從新任務(wù)的堆棧中恢復(fù)新任務(wù)的上下文(context)
;              f) 返回到新任務(wù)的代碼中
;
;           3) 入口:
;              OSTCBCur      指向要掛起任務(wù)的 OS_TCB
;              OSTCBHighRdy  指向要恢復(fù)任務(wù)的 OS_TCB
;*********************************************************************************************************
        RSEG CODE:CODE:NOROOT(2)
        CODE32
OSIntCtxSw
        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;

                                        ; 恢復(fù)新任務(wù)的上下文(CONTEXT)
        LDMFD   SP!, {R4}               ; 新任務(wù)的CPSR出棧
        MSR     SPSR_cxsf, R4

        LDMFD   SP!, {R0-R12,LR,PC}^    ; 新任務(wù)的上下文(context)出棧

;*********************************************************************************************************
;                                            IRQ 中斷服務(wù)子程序
;*********************************************************************************************************
        RSEG CODE:CODE:NOROOT(2)
        CODE32
OS_CPU_IRQ_ISR

        STMFD   SP!, {R1-R3}                   ; 工作寄存器壓入IRQ堆棧
        MOV     R1, SP                         ; 保存IRQ堆棧指針
        ADD     SP, SP,#12                     ; 調(diào)整IRQ堆棧指針
        SUB     R2, LR,#4                      ; 調(diào)整PC返回地址

        MRS     R3, SPSR                       ; 將SPSR(即中斷任務(wù)的CPSR)復(fù)制到R3
        MSR     CPSR_c, #(NO_INT | SVC32_MODE) ; 切換到管理模式

                                               ; 將任務(wù)的上下文(CONTEXT)保存到任務(wù)堆棧
        STMFD   SP!, {R2}                      ; 任務(wù)的返回地址壓棧
        STMFD   SP!, {LR}                      ; 任務(wù)的LR壓棧
        STMFD   SP!, {R4-R12}                  ; 任務(wù)的R12-R4壓棧

        LDMFD   R1!, {R4-R6}                   ; 將任務(wù)的R1-R3從IRQ堆棧移動到管理堆棧
        STMFD   SP!, {R4-R6}
        STMFD   SP!, {R0}                      ; 任務(wù)的R0壓入任務(wù)堆棧
        STMFD   SP!, {R3}                      ; 任務(wù)的CPSR(即IRQ's SPSR)壓棧

                                               ; 處理嵌套計數(shù)器
        LDR     R0, ??OS_IntNesting            ; OSIntNesting++;
        LDRB    R1, [R0]
        ADD     R1, R1,#1
        STRB    R1, [R0]

        CMP     R1, #1                         ; if (OSIntNesting == 1) {
        BNE     OS_CPU_IRQ_ISR_1
        LDR     R4, ??OS_TCBCur                ;   OSTCBCur->OSTCBStkPtr = SP
        LDR     R5, [R4]
        STR     SP, [R5]                       ; }

OS_CPU_IRQ_ISR_1
        MSR     CPSR_c, #(NO_INT | IRQ32_MODE) ; 切換到IRQ模式(使用IRQ堆棧處理中斷)

        LDR     R0, ??OS_CPU_IRQ_ISR_Handler   ; OS_CPU_IRQ_ISR_Handler();
        MOV     LR, PC
        BX      R0

        MSR     CPSR_c, #(NO_INT | SVC32_MODE) ; 切換到管理模式

        LDR     R0, ??OS_IntExit               ; OSIntExit();
        MOV     LR, PC
        BX      R0

                                               ; 恢復(fù)新任務(wù)的上下文(CONTEXT)
        LDMFD   SP!, {R4}                      ; 新任務(wù)的CPSR出棧
        MSR     SPSR_cxsf, R4

        LDMFD   SP!, {R0-R12,LR,PC}^           ; 新任務(wù)的上下文(context)出棧

;*********************************************************************************************************
;                                           FIQ 中斷服務(wù)子程序
;*********************************************************************************************************
        RSEG CODE:CODE:NOROOT(2)
        CODE32
OS_CPU_FIQ_ISR

        STMFD   SP!, {R1-R3}                   ; 工作寄存器壓入FIQ堆棧
        MOV     R1, SP                         ; 保存FIQ堆棧指針
        ADD     SP, SP,#12                     ; 調(diào)整FIQ堆棧指針
        SUB     R2, LR,#4                      ; 調(diào)整PC返回地址

        MRS     R3, SPSR                       ; 將SPSR(即中斷任務(wù)的CPSR)復(fù)制到R3
        MSR     CPSR_c, #(NO_INT | SVC32_MODE) ; 切換到管理模式

                                               ; 將任務(wù)的上下文(CONTEXT)保存到任務(wù)堆棧
        STMFD   SP!, {R2}                      ; 任務(wù)的返回地址壓棧
        STMFD   SP!, {LR}                      ; 任務(wù)的LR壓棧
        STMFD   SP!, {R4-R12}                  ; 任務(wù)的R12-R4壓棧
        LDMFD   R1!, {R4-R6}                   ; 將任務(wù)的R1-R3從IRQ堆棧移動到管理堆棧
        STMFD   SP!, {R4-R6}
        STMFD   SP!, {R0}                      ; 任務(wù)的R0壓入任務(wù)堆棧
        STMFD   SP!, {R3}                      ; 任務(wù)的CPSR(即FIQ's SPSR)壓棧

                                               ; 處理嵌套計數(shù)器
        LDR     R0, ??OS_IntNesting            ; OSIntNesting++;
        LDRB    R1, [R0]
        ADD     R1, R1,#1
        STRB    R1, [R0]

        CMP     R1, #1                         ; if (OSIntNesting == 1) {
        BNE     OS_CPU_FIQ_ISR_1
        LDR     R4, ??OS_TCBCur                ;     OSTCBCur->OSTCBStkPtr = SP
        LDR     R5, [R4]
        STR     SP, [R5]                       ; }

OS_CPU_FIQ_ISR_1
        MSR     CPSR_c, #(NO_INT | FIQ32_MODE) ; 切換到FIQ模式(使用FIQ堆棧處理中斷)
        LDR     R0, ??OS_CPU_FIQ_ISR_Handler   ; OS_CPU_FIQ_ISR_Handler();
        MOV     LR, PC
        BX      R0

        MSR     CPSR_c, #(NO_INT | SVC32_MODE) ; 切換到管理模式
        LDR     R0, ??OS_IntExit               ; OSIntExit();
        MOV     LR, PC
        BX      R0

                                               ; 恢復(fù)新任務(wù)的上下文(CONTEXT)
        LDMFD   SP!, {R4}                      ; 新任務(wù)的CPSR出棧
        MSR     SPSR_cxsf, R4
        LDMFD   SP!, {R0-R12,LR,PC}^           ; 新任務(wù)的上下文(context)出棧

;*********************************************************************************************************
;                                               變量的指針
;*********************************************************************************************************
        DATA
??OS_TaskSwHook:
        DC32    OSTaskSwHook
??OS_CPU_IRQ_ISR_Handler:
        DC32    OS_CPU_IRQ_ISR_Handler
??OS_CPU_FIQ_ISR_Handler:
        DC32    OS_CPU_FIQ_ISR_Handler
??OS_IntExit:
        DC32    OSIntExit
??OS_IntNesting:
        DC32    OSIntNesting
??OS_PrioCur:
        DC32    OSPrioCur
??OS_PrioHighRdy:
        DC32    OSPrioHighRdy
??OS_Running:
        DC32    OSRunning
??OS_TCBCur:
        DC32    OSTCBCur
??OS_TCBHighRdy:
        DC32    OSTCBHighRdy

        END

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费看网站| 国产精品1区2区3区在线观看| 日韩精品色哟哟| 美女精品一区二区| 成人小视频免费观看| 91麻豆国产精品久久| 欧美日本一区二区| 精品国内二区三区| 亚洲人一二三区| 麻豆成人综合网| eeuss鲁片一区二区三区在线观看| 欧美亚洲动漫精品| 26uuu欧美| 亚洲午夜电影网| 国内久久婷婷综合| 日本韩国一区二区三区视频| 91精品国产综合久久蜜臀 | 一区二区三区精品在线| 日韩中文字幕一区二区三区| 国产成人午夜片在线观看高清观看| 色婷婷久久久综合中文字幕| 欧美xxxxxxxx| 亚洲黄色性网站| 国内精品久久久久影院一蜜桃| www.av亚洲| 91精品久久久久久蜜臀| 日韩一区在线免费观看| 免费观看在线综合| 色综合天天天天做夜夜夜夜做| 亚洲第一搞黄网站| 成人精品视频一区二区三区尤物| 欧美肥妇free| 一区二区三区四区不卡在线 | 精品国免费一区二区三区| 一区二区三区毛片| 粉嫩13p一区二区三区| 69堂国产成人免费视频| 亚洲天堂2014| 国产精品亚洲а∨天堂免在线| 欧美日韩精品欧美日韩精品一综合| 欧美国产综合一区二区| 日本欧美加勒比视频| 91在线观看地址| 久久综合久久鬼色中文字| 日韩综合在线视频| 欧美在线高清视频| 中文字幕一区二区三区四区| 国产在线播放一区三区四| 欧美色欧美亚洲另类二区| 亚洲欧洲精品一区二区精品久久久| 狠狠久久亚洲欧美| 日韩午夜电影在线观看| 亚洲国产精品自拍| 色视频成人在线观看免| 国产精品视频免费| 国产二区国产一区在线观看| 日韩精品专区在线影院观看| 午夜精品福利久久久| 在线观看日韩av先锋影音电影院| 国产精品素人视频| 国产麻豆视频一区二区| 日韩美一区二区三区| 日韩高清不卡一区二区| 欧美日韩视频不卡| 亚洲综合另类小说| 色婷婷激情一区二区三区| 亚洲欧美在线视频| av在线不卡免费看| 国产精品乱人伦一区二区| 国产大陆亚洲精品国产| 26uuu亚洲综合色| 国产主播一区二区| 久久一日本道色综合| 狠狠色综合日日| 久久亚洲精品国产精品紫薇| 精品中文字幕一区二区| 精品少妇一区二区三区日产乱码 | 在线观看免费视频综合| 亚洲男人的天堂在线观看| 99精品一区二区| 亚洲欧洲日韩av| 一本色道综合亚洲| 亚洲一区在线观看网站| 欧美自拍丝袜亚洲| 亚洲bt欧美bt精品777| 欧美日韩国产另类不卡| 日韩高清一区在线| 亚洲二区视频在线| 9191久久久久久久久久久| 日韩成人一区二区| 日韩视频免费观看高清完整版| 久久精品国产精品亚洲红杏| 精品国产乱码91久久久久久网站| 国产一区二区三区在线观看免费视频| 2023国产精品自拍| 国产精品99久久久久久有的能看| 欧美国产激情一区二区三区蜜月| 99久久婷婷国产综合精品 | 色综合久久天天| 亚洲第一成人在线| 欧美一区二区久久久| 激情文学综合插| 中文字幕一区二区三区精华液| 色哟哟国产精品| 日韩经典中文字幕一区| 精品va天堂亚洲国产| 成人动漫精品一区二区| 亚洲国产另类精品专区| 精品粉嫩aⅴ一区二区三区四区| 大美女一区二区三区| 亚洲精品成人悠悠色影视| 在线综合视频播放| 国产精品一区二区三区99| 日韩一区日韩二区| 欧美一级专区免费大片| 懂色av一区二区三区免费看| 亚洲综合免费观看高清在线观看| 欧美成va人片在线观看| 成人黄色在线网站| 婷婷国产v国产偷v亚洲高清| 国产日韩亚洲欧美综合| 色久优优欧美色久优优| 久久精品免费观看| 亚洲视频一区二区在线观看| 欧美一区二区大片| 成人白浆超碰人人人人| 亚洲aaa精品| 国产精品福利一区二区三区| 在线播放日韩导航| av电影在线不卡| 久久99精品一区二区三区| 亚洲视频在线观看一区| 久久综合久久久久88| 欧美日韩综合不卡| 成人免费视频播放| 日本免费在线视频不卡一不卡二 | 99精品久久久久久| 日本亚洲电影天堂| 亚洲欧美区自拍先锋| 欧美精品一区二区三区高清aⅴ | 亚洲男人的天堂av| 国产日韩欧美综合在线| 欧美另类z0zxhd电影| 成人app下载| 开心九九激情九九欧美日韩精美视频电影 | 国产精品美女久久久久久久| 欧美精品成人一区二区三区四区| www.一区二区| 国内不卡的二区三区中文字幕 | 欧美亚洲愉拍一区二区| 国产91色综合久久免费分享| 免费成人小视频| 亚洲国产精品尤物yw在线观看| 亚洲欧洲精品天堂一级 | 国产精品综合二区| 日韩精品免费专区| 一区二区三区四区不卡视频| 国产精品久久久久毛片软件| 26uuu久久综合| 日韩午夜三级在线| 欧美日韩一区二区在线观看视频| av不卡免费在线观看| 国产精品一区二区果冻传媒| 日韩电影免费在线| 五月天婷婷综合| 一区二区三区四区高清精品免费观看| 中文字幕久久午夜不卡| 欧美精品一区二区三区蜜桃| 精品少妇一区二区| 日韩免费在线观看| 日韩一区二区三区免费看| 91麻豆精品国产91久久久久久久久 | 精品精品国产高清a毛片牛牛| 91精品国产综合久久国产大片 | 免费观看在线色综合| 日韩福利电影在线| 天天操天天色综合| 午夜精品一区在线观看| 亚洲小说春色综合另类电影| 伊人一区二区三区| 亚洲黄一区二区三区| 一区二区三区日本| 亚洲制服丝袜av| 亚洲在线成人精品| 亚洲小说欧美激情另类| 午夜精品久久久久久久99水蜜桃 | 欧美日本乱大交xxxxx| 欧美精品aⅴ在线视频| 欧美精选一区二区| 在线不卡中文字幕播放| 日韩天堂在线观看| 日韩精品中文字幕在线不卡尤物 | 国产精品一区二区x88av| 国产成人亚洲综合a∨猫咪| 国产1区2区3区精品美女| 成人黄色电影在线| 91麻豆国产精品久久| 精品视频在线看| 欧美一区二区三区在线电影| 日韩欧美一区电影|