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

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

?? os_cpu_a.asm

?? ucos注解版 內容大都是從邵貝貝和網上摘取的 有參考價值
?? ASM
?? 第 1 頁 / 共 3 頁
字號:
;                                           AX
;                                           OFFSET  of task code address
;                                           SEGMENT of task code address
;                                           Flags to load in PSW             (High memory)
;*********************************************************************************************************

_OSIntCtxSw PROC   FAR
;
            CALL   FAR PTR _OSTaskSwHook           ; Call user defined task switch hook;OSIntCtxSw()做的第1件事是,調用可
;由用戶定義的任務接口函數OSTaskSwHook()。注意:當調用OSTaskSwHook()時,OSTCBCur指向當前任務的任務控制塊OS_TCB,而
;OSTCBHighRdy指向新任務的任務控制塊OS_TCB。這樣可以從OSTaskSwHook()中訪問這2個任務的任務控制塊OS_TCB中的任何一個。
;同樣,如果不想使用OSTaskSwHook(),則可以注釋掉這條語句。這樣在任務切換時,可以節省幾個時鐘周期。
;
            MOV    AX, SEG _OSTCBCur               ; Reload DS in case it was altered報警
            MOV    DS, AX                          ;
;
            MOV    AX, WORD PTR DS:_OSTCBHighRdy+2 ; OSTCBCur = OSTCBHighRdy當從OSTaskSwHook()返回時,OSTCBHighRdy復制給
;OSTCBCur,這是因為此時新任務應該是當前任務。            
            MOV    DX, WORD PTR DS:_OSTCBHighRdy   ;
            MOV    WORD PTR DS:_OSTCBCur+2, AX     ;
            MOV    WORD PTR DS:_OSTCBCur, DX       ;
;
            MOV    AL, BYTE PTR DS:_OSPrioHighRdy  ; OSPrioCur = OSPrioHighRdy;OSPrioHighRdy也復制給OSPrioCur,這也是因為
;此時新任務應該是當前任務。            
            MOV    BYTE PTR DS:_OSPrioCur, AL
;
            LES    BX, DWORD PTR DS:_OSTCBHighRdy  ; SS:SP = OSTCBHighRdy->OSTCBStkPtr;至此,OSCtxSw()應該把新任務的運行
;環境裝入到處理器的寄存器中。這是通過從新任務的任務控制塊OS_TCB中獲取寄存器SS和寄存器SP的值來實現的。
            MOV    SS, ES:[BX+2]                   ;
            MOV    SP, ES:[BX]                     ;
;
            POP    DS                              ; Load new task's context從堆棧中彈出和恢復CPU的其余寄存器。
            POP    ES                              ;
            POPA                                   ;
;
            IRET                                   ; Return to new task執行IRET指令,設置新任務的程序計數器和狀態字。執行
;了這一指令后,處理器恢復執行新任務。注意:在執行OSIntCtxSw()時,中斷是關掉的;在執行用戶定義的OSTaskSwHook()接口函數時,
;中斷也是關掉的。
;
_OSIntCtxSw ENDP

            PAGE                                   ; /*$PAGE*/
;*********************************************************************************************************
;                                            HANDLE TICK ISR
;
; Description: This function is called 199.99 times per second or, 11 times faster than the normal DOS
;              tick rate of 18.20648 Hz.  Thus every 11th time, the normal DOS tick handler is called.
;              This is called chaining.  10 times out of 11, however, the interrupt controller on the PC
;              must be cleared to allow for the next interrupt.
在OS_CPU.H,時鐘節拍頻率中已經提到實時操作系統的時鐘節拍頻率應為10~100Hz。在PC中,時鐘節拍由硬件定時器產生,硬件定時器會中
斷CPU,間隔是54.93ms(18.206 48HZ)。筆者將時鐘節拍頻率設為200HZ。PC機時鐘節拍的中斷向量為0x08,UCOS將此向量截取,使之指向UC
OS的時鐘節拍中斷服務子程序OSTickISR(),而原先的中斷向量保存在中斷向量129(0x81)中(參見PC.C文件中的PC_DOSSaveReturn()函數)。
為滿足DOS的需要,原先的中斷服務還是每隔54.93ms(實際上還要短些)調用1次。在UCOS中,當調用OSStart()啟動多任務環境后,時鐘中斷
的作用是非常重要的但是PC環境下,啟動UCOS之前就已經有時鐘中斷發生了。實際上希望在UCOS初始化完成之后,再發生時鐘中斷,調用
OSTickISR()。為了防止中斷服務子程序ISR在UCOS準備好之前調用OSTickISR(),需要作以下的工作:
Main()
調用OSInit()初始化UCOS;
調用PC_DOSSaveReturn()見PC.C
調用PC_VectSet把OSCtxSw放在向量0x80處;
建立至少1個應用任務
調用OSStart(),以運行多任務。
第一個任務要作的工作有:
把OSTickISR()的起始地址放在向量0x08處
時鐘節拍從18.206 48HZ改變為200HZ。
PC上時鐘處理很巧妙,
;
; Arguments  : none
;
; Returns    : none
;
; Note(s)    : The following C-like pseudo-code describe the operation being performed in the code below.
;
;              Save all registers on the current task's stack;如同所有UCOS的中斷服務子程序一樣,所有的寄存器須保存在當前
任務的堆棧中。
;              OSIntNesting++;當進入中斷服務子程序ISR時,須告訴UCOS,進入中斷服務子程序了。可以通過OSIntEnter()實現,或以
直接給中斷嵌套OSIntNesting加1的方式實現。直接給OSIntNesting加1會更快一些。OSIntEnter()實現,或以直接給中斷嵌套層數
OSIntNesting加1的方式實現。直接給OSIntNesting加1會更快一些。OSIntEnter()會檢查OSIntNesting是否超過了255,這樣,中斷嵌套會更
安全些
;              if (OSIntNesting == 1) {
;                 OSTCBCur->OSTCBStkPtr = SS:SP;如果中斷服務子程序是中斷的第一層,即沒有中斷嵌套,則需要把堆棧指針保存在
當前任務的任務控制塊OS_TCB中。
;              }
;              OSTickDOSCtr--;
;              if (OSTickDOSCtr == 0) {
;                  OSTickDOSCtr = 11; 計數器OSTickDOSCtr減一,當OSTickDOSCtr為0時,調用DOS的時鐘節拍處理函數。這種情況每隔
54.93ms發生一次
;                  INT 81H;               Chain into DOS every 54.925 mS
;                                         (Interrupt will be cleared by DOS)清中斷
;              } else {
;                  Send EOI to PIC;       Clear tick interrupt by sending an End-Of-Interrupt to the 8259
;                                         PIC (Priority Interrupt Controller)
11次中有10次,中斷優先級控制器PIC會收到一個清除中斷的指令。注意:當調用DOS的時鐘節拍處理函數時,這一操作不是必須的,因為
DOS的時鐘節拍處理函數直接清除中斷源。
;              }
;              OSTimeTick();              Notify uC/OS-II that a tick has occured;OSTickISR()調用OSTimeTick(),這樣UCOS就
給所有延遲任務的等待時間以及有時限的等待某事件發生的任務的等待時間的節拍參數減1.
;              OSIntExit();               Notify uC/OS-II about end of ISR當所有中斷服務子程序完成時,調用OSIntExit()。如
果中斷服務子程序(或者其他嵌套的中斷服務子程序)使一個更高優先級的任務進入了就緒態,并且當前中斷服務子程序已經脫離了中斷嵌套
,那么OSIntExit()不再返回OSTickISR()。OSIntCtxSw()恢復新任務的所有寄存器,并執行一個IRET指令。如果中斷服務子程序沒有脫離
中斷嵌套,或者中斷服務子程序沒有使更高優先級的任務進入就緒態,OSIntExit()就返回OSTickISR()。
;              Restore all registers that were save on the current task's stack;
;              Return from Interrupt;    如果OSIntExit()返回,則是因為OSIntExit()沒有發現更高優先級的任務。這樣被中斷任務
的寄存器會被恢復。當執行IRET指令時,中斷服務子程序返回,讓被中斷了的任務繼續運行。
;*********************************************************************************************************
;
_OSTickISR  PROC   FAR
;
            PUSHA                                ; Save interrupted task's context此段注釋同上文
            PUSH   ES
            PUSH   DS
;
            MOV    AX, SEG(_OSIntNesting)        ; Reload DS
            MOV    DS, AX
            INC    BYTE PTR DS:_OSIntNesting     ; Notify uC/OS-II of ISR
;
            CMP    BYTE PTR DS:_OSIntNesting, 1	 ; if (OSIntNesting == 1)
            JNE    SHORT _OSTickISR1             
            MOV    AX, SEG(_OSTCBCur)            ;     Reload DS
            MOV    DS, AX
            LES    BX, DWORD PTR DS:_OSTCBCur    ;     OSTCBCur->OSTCBStkPtr = SS:SP
            MOV    ES:[BX+2], SS                 ;
            MOV    ES:[BX+0], SP                 ;
;
_OSTickISR1:
            MOV    AX, SEG(_OSTickDOSCtr)        ; Reload DS
            MOV    DS, AX
            DEC    BYTE PTR DS:_OSTickDOSCtr
            CMP    BYTE PTR DS:_OSTickDOSCtr, 0
            JNE    SHORT _OSTickISR2             ; Every 11 ticks (~199.99 Hz), chain into DOS
;
            MOV    BYTE PTR DS:_OSTickDOSCtr, 11
            INT    081H                          ; Chain into DOS's tick ISR
            JMP    SHORT _OSTickISR3

_OSTickISR2:
            MOV    AL, 20H                       ; Move EOI code into AL.
            MOV    DX, 20H                       ; Address of 8259 PIC in DX.
            OUT    DX, AL                        ; Send EOI to PIC if not processing DOS timer.
;
_OSTickISR3:
            CALL   FAR PTR _OSTimeTick           ; Process system tick
;
            CALL   FAR PTR _OSIntExit            ; Notify uC/OS-II of end of ISR
;
            POP    DS                            ; Restore interrupted task's context
            POP    ES
            POPA
;
            IRET                                 ; Return to interrupted task
;
_OSTickISR  ENDP
;
            END

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产自产v一区二区三区c| 欧美亚洲一区二区在线| 国产一区999| 粉嫩高潮美女一区二区三区| 青青草国产成人av片免费| 亚洲一区二区影院| 亚洲大片精品永久免费| 亚洲国产精品久久久久婷婷884| 亚洲人成精品久久久久| 亚洲自拍另类综合| 蜜乳av一区二区| 免费人成黄页网站在线一区二区| 欧美a级理论片| av午夜一区麻豆| 精品成人私密视频| 亚洲图片你懂的| 国产经典欧美精品| 欧美日韩国产成人在线91| 久久日一线二线三线suv| 亚洲女同一区二区| 中文字幕一区二区在线观看| 欧美日韩精品综合在线| 欧美日韩国产一区| 精品国产91久久久久久久妲己| 久久久九九九九| 亚洲超丰满肉感bbw| 欧美剧情片在线观看| 欧美三级在线看| 26uuu另类欧美亚洲曰本| 国产午夜精品久久久久久久 | 性久久久久久久| 亚洲天堂福利av| 麻豆精品在线看| eeuss鲁片一区二区三区| 在线观看一区二区视频| 在线观看免费成人| 欧美一区二区视频在线观看| 精品国产乱码久久久久久浪潮| 精品欧美久久久| 国产精品乱码妇女bbbb| 国产精品二三区| 国产老女人精品毛片久久| 亚洲国产精品精华液网站| 亚洲女同ⅹxx女同tv| 免费欧美在线视频| 成人av片在线观看| 91精品婷婷国产综合久久性色| 久久综合视频网| 久久精品无码一区二区三区| 国产精品久久久久永久免费观看| 久久www免费人成看片高清| 99久久99久久精品国产片果冻 | 亚洲欧美一区二区三区久本道91| 狠狠狠色丁香婷婷综合激情| 在线播放亚洲一区| 婷婷国产在线综合| 欧美丝袜自拍制服另类| 91麻豆精品91久久久久同性| 亚洲国产视频网站| 777色狠狠一区二区三区| 亚洲一区二区不卡免费| 91在线视频网址| 亚洲欧美另类综合偷拍| 国产成人精品aa毛片| 欧美成人精品1314www| 国产成人高清在线| 日韩三级伦理片妻子的秘密按摩| 色综合久久六月婷婷中文字幕| 日韩欧美一级片| 99久久综合色| 久久99国产精品免费| 中文字幕一区在线观看视频| 91久久精品日日躁夜夜躁欧美| 一级精品视频在线观看宜春院| 欧美久久久影院| 国产精品一区二区三区网站| 国产精品色眯眯| 国产欧美日韩精品一区| 91亚洲精品乱码久久久久久蜜桃| 亚洲欧美激情插 | 精品久久久久久久一区二区蜜臀| 国产成+人+日韩+欧美+亚洲| 亚洲欧美另类久久久精品 | 日韩国产成人精品| 国产欧美视频一区二区| 欧美性受极品xxxx喷水| 亚洲精品一卡二卡| 国产欧美日韩不卡| 精品国产乱码久久久久久老虎| 欧日韩精品视频| 高清视频一区二区| 日本在线播放一区二区三区| 一区二区在线免费观看| 91老司机福利 在线| 国产精一区二区三区| 国产精品66部| 一本一道波多野结衣一区二区| 午夜av一区二区| 五月天亚洲精品| 国产在线国偷精品产拍免费yy| 国产亚洲精品aa| 久久精品人人做人人综合| 美美哒免费高清在线观看视频一区二区| 亚洲最大的成人av| 蜜桃在线一区二区三区| 国产麻豆精品theporn| 亚洲欧洲av在线| 偷拍亚洲欧洲综合| 久久国产麻豆精品| 国产成人综合网站| 欧美亚洲一区三区| 国产无人区一区二区三区| √…a在线天堂一区| 美女视频免费一区| 婷婷丁香久久五月婷婷| 欧美一二三四区在线| 亚洲欧美色图小说| 久久99精品久久久久久| 97精品国产露脸对白| 色婷婷综合久久久久中文| 精品久久一区二区| 亚洲色图在线播放| 56国语精品自产拍在线观看| 欧美不卡在线视频| 欧美r级在线观看| 91精选在线观看| 在线播放一区二区三区| 欧美一级片在线| 综合自拍亚洲综合图不卡区| 亚洲一二三四区不卡| 理论片日本一区| 99久久夜色精品国产网站| 欧美电影一区二区| 亚洲另类在线制服丝袜| 蜜臀国产一区二区三区在线播放 | 麻豆专区一区二区三区四区五区| 高清视频一区二区| 欧美一级艳片视频免费观看| 亚洲人xxxx| 国产成人综合在线播放| 在线不卡的av| 亚洲国产精品欧美一二99| 国产suv精品一区二区三区| 日韩精品一区二区三区视频在线观看| 一区二区三区四区在线| 国产91精品精华液一区二区三区| 欧美一区三区四区| 亚洲大尺度视频在线观看| 成人性视频免费网站| 精品久久久久99| 日本中文字幕一区| 欧美日韩一级视频| 亚洲精品成人在线| 99精品偷自拍| 亚洲欧洲国产日韩| 成人天堂资源www在线| 久久影院午夜片一区| 蜜桃一区二区三区在线观看| 精品视频全国免费看| 亚洲另类中文字| 在线视频国产一区| 日韩一区中文字幕| 91丨国产丨九色丨pron| 国产精品天干天干在线综合| 国产成人在线视频网址| 久久久久97国产精华液好用吗| 国内精品久久久久影院一蜜桃| 日韩欧美中文字幕精品| 三级成人在线视频| 欧美高清www午色夜在线视频| 婷婷综合在线观看| 制服视频三区第一页精品| 麻豆成人久久精品二区三区小说| 6080日韩午夜伦伦午夜伦| 日日摸夜夜添夜夜添精品视频| 欧美精品一二三| 婷婷久久综合九色综合绿巨人| 欧美另类一区二区三区| 免费在线观看不卡| 欧美v国产在线一区二区三区| 免费的成人av| 久久久久久久综合狠狠综合| 国产精品1区2区| 欧美国产乱子伦 | 国产一二三精品| 国产精品成人一区二区三区夜夜夜| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 免费视频最近日韩| 久久影院视频免费| 成人午夜视频在线| 亚洲图片你懂的| 欧美日韩一区二区电影| 免费人成黄页网站在线一区二区| 欧美白人最猛性xxxxx69交| 国产精品1区2区| 亚洲一区二区美女| 日韩午夜激情视频| 波多野结衣91| 丝袜美腿亚洲综合| 国产拍揄自揄精品视频麻豆|