《時間觸發嵌入式作業系統》學習筆記

2021-10-14 04:01:53 字數 2599 閱讀 1311

《時間觸發嵌入式作業系統》這本書已經有一些年份了,他是以古老的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

)}

對於乙個非常簡單的功能,我們可以使用這個功能,它不斷的執行statement1statement2,有的程式設計師,也把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...