1. 程式人生 > >【ucosii】筆記1----入門

【ucosii】筆記1----入門

void val 控制 -a 程序員 電機 工作 優先 操作

前言

定性認識

1、在編寫單片機程序時,分為裸機程序和帶操作系統的程序。裸機程序在運行時,從上而下順序、串行地執行。

例如:

技術分享
void main(){
    init();
    while(1){
    key();//按鍵操作
    Display();//顯示
    GetsensorVal();//獲取傳感器輸出
    CtrlGpio();//輸出
    GetBeijingTime();//獲取北京時間
    Drivestepmotor();//控制步進電機
    }
}
View Code

按鍵:需要實時響應

顯示:需要定時1s更新北京時間

步進電機:按鍵控制步進電機轉動

傳感器:獲取傳感器數值

其中,按鍵、步進電機需要實時響應,顯示需要定時更新等。每個函數得到重復執行就必須等待一個完整的while(1)周期,這樣,獲取傳感器數據、按鍵控制步進電機時,可能顯示就不能定時更新,實時性不容易得到保證。當然,可以使用狀態機和搭配外部中斷、定時器中斷設置一些flag,縮短while(1)執行的周期,來保證顯示的實時性。但,如果程序再復雜一些,程序員不僅要寫功能函數、邏輯函數、還要維護這套函數的調用邏輯,工作量就比較大了。

2、操作系統是一套完善的函數調用機制,可以保證程序運行的實時性。主要方法是劃分時間片,在每個時間片去輪番運行各個函數(也可以叫任務、進程)。如果任務比較多,輪番執行起來的周期仍然很慢,所以,操作系統對各個任務劃分狀態(就緒、運行、掛起等),只有就緒態,才可以得到執行,這樣就跳過了很多沒有就緒好的任務,縮短了輪番執行的周期。另外,用戶需要對各任務分配優先級,保證在多個任務都就緒時,操作系統可以按照優先級有序地執行。

3、操作系統在按時間片切換各個任務時,並不能保證在時間片內此任務能夠運行完畢,在下一次切換到此任務時,需要接著上次執行的狀態繼續執行。這就需要保護現場、恢復現場。編程時,給每個任務定義並分配一定的堆棧,對其數據進行保存。c語言不能操作寄存器,匯編可以,所以操作系統是c和匯編混寫的。

【ucosii】筆記1----入門