RTThread學習筆記—簡介


 

  輪詢系統與前后台系統:

  在我們學習嵌入式編程的時候,首先接觸到的是裸機編程(輪詢),裸機編程的實現比較簡單,而且其邏輯也非常的清晰,通過觀察代碼就能大概判斷程序的執行流程和作用,但是裸機編程有一個巨大的缺點——實時性太差。例如下列代碼(偽):

while(1)
{
  ...(程序段一)
  if(key1==0)   {   ...   }   if(key2==0)   {   ...   }

}

當我們在執行程序段一時,key1和key2兩個按鍵的按下是不會有反應的(假設執行程序段一需要大量時間),又比如說我們在執行key1中的內容時,key2按鍵是不會反應的,且程序段一在很長一段時間內不會被執行,因為key1中的程序占用了cpu。

  但是聰明的程序員們發明了一種程序系統——前后台系統,在前后台中,定義了許多中斷,這些中斷被稱為“前台”,而具體程序的執行流程被稱為“后台”。實現流程為下(偽代碼):

int flag1=0;
int flag2=0;

int main()
{
    while(1)
    {
        if(flag1==1)
        {

        }
        if(flag2==1)
        {

        }
    }
}

void ISR1(void)
{
    flag1=1;
}
void ISR2(void)
{    
    flag2=1;
}         

我們注意到,在這個系統中,定義了幾個中斷,如果中斷被觸發,那么flag就快速的置一,這時主程序中掃描到flag置一,就跳入執行響應的程序。這樣,整個系統的響應時間就大大縮短了,且可以在任何時候響應。


 

  小巧但強大的RTOS(實時操作系統):

  但是,如果系統非常復雜呢?如果希望兩個程序塊中的程序同時進行運算呢?(這里從使用者的角度上定義“同時”)這時我們就要使用RTOS(實時操作系統)系統了,而RTOS的實現大同小異,我個人比較喜歡RTThread,聽大佬說,它有着令人舒適的類Linux編程風格,並且具有豐富的組件。

  在RTThread系統中,最核心的東西就是線程,事件的處理在線程中完成,所有的核心都圍繞着線程展開,線程和STM32中的中斷一樣,也具有優先級,系統通過優先級來判斷哪個線程需要首先被執行。甚至可以讓兩個同優先級的線程同時執行(通過時間片機制)。

  那么這個相對來說比較復雜的系統,會不會占用大量的資源呢?答案是不會的。下圖是RTThead官方文檔中心的簡介:

  

  這里我們可以看到RTThread(nano精簡版本)甚至可以輕松的在stm32c8t6上運行。

  最后,對於系統,並不能單純的評定它們孰優孰劣,畢竟老話說的好——合適的才是最好的。

  

  (純手擼,喜歡的話不妨推薦一下=)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM