《時間觸發嵌入式作業系統》這本書已經有一些年份了,他是以古老的51微控制器(8051)作為控制器講解的,本書涉及到一些硬體基礎知識,這些可能在平時開發中已經熟悉,軟體部分則介紹了時間觸發的嵌入式系統的設計和原理。
本章主要概述了幾種系統:
它們之間存在著重疊,比如本書的核心,時間觸發嵌入式系統,它則屬於時間觸發系統,也屬於嵌入式系統。
第一章還介紹了中斷的概念。
假如使用者使用51微控制器來產生乙個1hz的pwm,那麼這個程式是簡單的,只需要設計以下函式:
void
pwm_gera()
假如使用者使用51微控制器設計乙個按鍵與蜂鳴器的程式,功能是當按鍵按下時,蜂鳴器鳴叫1s,那麼這個程式也是簡單的:
void
beep_btn_ctrl
(void
)}
接著,如果需要將這兩個功能合在一起,簡單的順序呼叫以上兩個函式,會遇到一些問題。如下所示:
void main(void)
}
那麼,當程式執行的一開始, pwm 的輸出是正常的,但是當按鍵按下時候,單片就無法產生正確的波形了,原因是按鍵按下以後,會呼叫beep_delay_s(1)
語句,此時的 微控制器將在此停留 1s 的時間。這個程式還有乙個問題,使用者會感覺到按鍵不夠靈敏,這是因為pwm_delay_ms(500)
的原因。
所以,以上程式有非常大的極限性。於是,我們需要使用這種新的程式結構,來避免這種問題,博主比較常使用的是以下程式結構:
void
main
(void
)
這個程式保證每 1ms 都執行一次pwm_gera()
和beep_btn_ctrl()
函式,並將ms_cnt
傳給別它們,這樣做的好處就是,函式內部不需要去延時等待,只是根據ms_cnt
就可以來判斷動作——對於pwm_gera()
只需要判斷ms_cnt
的值是否是 500 的整數倍,如果是就取反,這樣就實現了每 500ms 翻轉一次的效果,而對於beep_btn_ctrl()
,只需要在按鍵按下的時候,開啟蜂鳴器,並記錄那個數值,之後不斷的和ms_cnt
對比,如果ms_cnt
比記錄的值大1000,就關閉蜂鳴器即可。
這型別的**,可以適用於這種多個功能需要延時的函式,按博主的理解,這種可以適用於某一型別問題的程式結構,被稱為設計模式,當然,不同的系統有不同的需求,所以有非常多的設計模式,特別的,由於不同的程式語言有自己的語法和規則,設計模式也未必是通用的,但是設計模式的思想,總是可以互相借鑑的。
8051 系列微控制器
振盪器硬體
硬體復位
儲存器問題
直流負載驅動
交流負載驅動
這 6 章 比較針對性微控制器所需要的電路,是一些非常實用的基礎知識。這裡略過。
第 9 章開始,講述軟體相關的內容。
前文中,我們就是用了超級迴圈的程式結構,超級迴圈是乙個簡單,粗暴的死迴圈:
void
main
(void
)}
對於乙個非常簡單的功能,我們可以使用這個功能,它不斷的執行statement1
和statement2
,有的程式設計師,也把while(1)
寫作for(;;)
。
一段簡單的真實的 51 程式,它控制乙個 led 燈以 1 hz 的頻率閃爍:
#include
#include
sbit led = p2^1;
void
delay500ms()
while
(--j);}
while
(--i);}
void
main
(void
)return
;}
在 第 1,2 行中,我們使用到了標頭檔案,標頭檔案規定了各個暫存器的位址等,如果沒有這個標頭檔案,那麼程式需要使用到51暫存器則需要在c檔案中定義。一些指令碼,比如 python 生成的檔案,也可能是作為標頭檔案,這樣就可以和使用者編寫的**區分開來。標頭檔案是經常使用的,它的作用其實不言而喻。
第10章到第12章是51微控制器常用的功能:
10. 使用埠:其實就是 io 口的使用
11. 延時 :軟體延時(常見的使用for迴圈來模糊延時),硬體延時(定時器延時)
12. 看門狗:分內部和外部看門狗
第 13 章開始,進入了本書的核心主題:排程器
前文中,方波產生器和按鍵控制蜂鳴器的例子體現出了設計模式的必要性,本書所實現的排程器是非搶占式的,也就是乙個任務執行完成以後,才會執行另乙個任務,所以有乙個重要的準則:每個任務執行的實際不能大於排程的時間。對於這一點,我們可以用狀態機,超時機制,多級任務來將長任務(時間比較長的任務),拆分成短時間任務來規避這個問題。
嵌入式系統學習
實時多工作業系統 美國的火星表面登陸的火星探測器上使用的嵌入式作業系統是vxworks c os ii是 microcontroller operating system 的縮寫,它是原始碼公開的實時嵌入式操作 vxworks的微核心wind是乙個具有較高效能的 標準的嵌入式實時作業系統核心 嵌入式...
嵌入式系統學習之路
1 window環境程式設計 2 linux環境程式設計 3 微控制器 1 c語言 第二版譚浩強 c程式語言 第二版 徐寶文譯機戒工業出版社 你能區分開指標陣列和陣列指標嗎?你知道函式指標嗎?你能區分開定義乙個變數時系統給它分配的空間與用malloc 函式給乙個變數分配的空間有什麼不一樣嗎?2 資料...
嵌入式系統學習(2)
s3c2410有四個通道的dma控制器,每個通道都有五個dma請求源 即五種不同請求方式 其中包括兩個外部請求源由引腳nxdreq0和nxdreq0接入,應答訊號引腳為nxdack0和nxdack0。s3c2410也可以直接連線外部dma控制器,匯流排請求和應答訊號引腳分別為nxbreq和nxbac...