【ucosii】筆記1----入門
阿新 • • 發佈:2017-05-20
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----入門