ucos ii學習筆記1——任務中斷和調度

來源:互聯網
上載者:User

       UCos ii的中斷過程是接收到插斷要求,如果此時處理器處於中斷允許的情況下,系統中止當前啟動並執行任務,而按照中斷向量指向的中斷服務子程式,當中斷服務子程式結束時,系統將根據當前優先順序鏈表中的情況,返回原先的被中止的任務繼續運行,或者到另一個優先順序更高的就緒任務上運行。
因為UCos ii是可剝奪性核心,所以中斷服務結束之前需要有一次任務調度,通過任務調度判斷最高優先順序準備的任務,目的是提高系統的即時性。
       調度函數通過一個變數OSIntNesting判斷, OSIntNesting有兩個功能:1、對中斷嵌套進行計數,表示嵌套的層數。2、為調度器加鎖和解鎖。只有當OSIntNesting== 0 時才進行任務的調度。
       OSIntEnter()函數主要功能是每次進入中斷子函數時將OSIntNesting加1,從而使調度器加鎖。
       OSIntExit()函數主要功能是退出中斷服務,當OSIntNesting和OSLockNesting都為0時,需要讀取OSMAPTBL[OSRDYGRP],然後切換到相應的服務函數。
在切換過程需要調用OSIntCtxSw()函數,將任務控制塊進行切換,將sp指標指向啟動並執行堆棧,用出棧命令把R1,R2…彈入處理器的通用寄存器。
      臨界區概念,忽略所有插斷要求,通過2個宏定義函數控制中斷的開啟和關閉,並且儲存程式狀態字。
      #define OS_ENTER_CRITICAL()
    cpu_sr = get_processor_psw();

    disable_interrupts();


#define OS_EXIT_CRITICAL
    Set_processor_psw(cpu_sr);
上面兩個宏定義函數,需要使用者使用的C編譯器具有擴充功能,使用者可以把該值儲存在c語言函數的局部變數中,不必壓到堆棧中。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.