- μC/OS-III源碼分析筆記
- 李悅城 野火
- 2152字
- 2019-01-01 01:18:04
前言
不少學習μC/OS的讀者都會面臨一種尷尬,就是想閱讀μC/OS-III的源碼卻因為資料過少而轉去閱讀μC/OS-II的源碼。如果拿著μC/OS-II的書來理解μC/OS-III的源碼,多半也會感到淡淡的憂傷,因為兩者的源碼相差實在太大。為了更加規范,μC/OS-III不僅對很多變量進行了修改,而且在很多處理問題的機制上也有很大的突破,比如引入時間片、取消任務數量限制等,如下表所示。實際上,2009年就已推出μC/OS-III,但是直到現在市面上μC/OS-III的資料依然很少,介紹源碼的資料更是少之又少,即使官方手冊也只是介紹使用方法而不是介紹原理。筆者在閱讀源碼的過程中也遇到了一些問題,要是有足夠的資料,很多疑惑就能夠比較快地得到解答。所以,筆者在閱讀源碼時將μC/OS-III的原理、應用等記錄下來,希望能為對μC/OS-III或者嵌入式實時操作系統有興趣的讀者提供幫助。
各版本μC/OS的主要區別

筆者認為,閱讀μC/OS-III源碼的主要理由如下。
1)查看優秀的源碼可以讓自己的編程技巧更完善,μC/OS-III源碼的風格比較好,有借鑒意義。
2)了解嵌入式內核的一些“內幕”,如在多個任務中從一個任務向另一個任務發送消息的機制,這讓我很好奇!
3)學習μC/OS-III源碼的過程也可以作為一個學習數據結構的機會。μC/OS-III涉及的數據結構主要是線性表,源碼中的很多數據結構都設計得非常好。
4)更好地利用μC/OS-III做開發工作。μC/OS官方有這么一句話:“熟悉了μC/OS-III這樣的實時系統多任務內核后,讀者將不會再回到傳統的前后臺系統的設計方法中去。”筆者覺得這必須建立在你真正懂μC/OS的基礎上。μC/OS有時會出現莫名的問題,這時就會令人感到很頭痛。當然,這主要跟使用者配置μC/OS出錯或者錯誤使用某些系統函數有關,這也是強調要在會用的基礎上學習μC/OS的原因。另外,網絡協議LwIP、藍牙協議等應用也都結合了嵌入式實時操作系統。如果已經學習過嵌入式操作系統,則會對這些知識有更好的掌握。也許在查找問題的過程中,你還能幫μC/OS找到幾個bug,歡迎大家一起來“找茬”。
本書與其他書籍的編排方式不一樣:其他書籍是按照官方文件的框架或者組件的方式編排的;本書更強調循序漸進,并結合了筆者在閱讀μC/OS-III源碼過程中的一些想法。比如一個結構體變量可能會有多個元素,工具書一般會把它們放在一起講解,而本書為了易于讀者更好地理解,只在某些源碼涉及這個元素時才會介紹其作用和含義。如果你有時要將本書當作工具書來查詢,則可結合這些相關內容涉及的源碼進行查找。
在數據結構方面,筆者會通過很多自己制作的圖片來介紹數據結構之間的關系,以便大家更好地理解μC/OS-III中的數據結構。事實上,這是一種非常好的理解方式。
本書是基于μC/OS的V3.02.00版本的源碼編寫而成的。另外,為了讓大家更好地理解μC/OS-III,本書基于市面上流行的STM32野火開發板ISO-V2編寫例程,該開發板使用的芯片是STM32F103ZET6,該芯片是基于Cortex-M3內核的。本書例程使用的IDE是4.72.10.0版本的MDK。
本書的讀者定位是那些不滿足于停留在使用嵌入式系統層面上,而是想深入理解嵌入式系統工作原理的學生、老師或者技術人員。因此,對讀者的要求主要是有使用μC/OS-III的經驗,這樣會對μC/OS-III有所把握;當然,也可以邊閱讀本書邊使用μC/OS-III,這樣看書就不會被動。另外,要對嵌入式系統的具體工作原理有比較濃厚的興趣,就像筆者使用μC/OS-III一樣,一直想研究清楚它內部的原理,于是濃厚的興趣幫筆者在閱讀μC/OS-III源碼的路上克服了很多困難。據說μC/OS-III代碼量有三四萬行(網上流傳,未經考證),要想真正了解μC/OS-III的運行機制,就更需要興趣。當然,對數據結構和Cortex-M3內核比較熟悉的讀者也會更好地理解本書。建議讀者在閱讀本書的時候對上述的數據結構和Cortex-M3內核進行一定的了解,或者邊讀本書邊學習這兩方面的內容。
希望讀者先看書中給出的程序,加些自己的注解,如果不懂再看書中講解源碼的文字,這樣可以做到獨立思考。本書比較適合采用這種閱讀方式,因為本書在解析某個函數源碼時會將相關知識糅合起來,而不是從頭到尾逐行講解。本書也用了一定的篇幅收納介紹到的大部分代碼,目的是讓讀者真正結合源碼進行理解,而不是紙上談兵。然而,這對讀者提出了更高的要求。與閱讀那些純粹講解嵌入式操作系統原理的書相比,閱讀本書或許有些困難,但是如果堅持下來,相信收獲也會更多。理解源碼時要抓住其本質。希望本書讓你學到的不只是μC/OS-III,而是嵌入式實時操作系統。
致謝
首先感謝野火科技有限公司的創始人劉火良,筆者在他的鼓勵和指導下編寫了本書。
其次感謝審閱本書的張浩和Ifreecoding,他們不僅對本書進行了詳細的審閱,還提出了很多修改意見。
接著感謝我的父母及我的好朋友。請允許我逐一道出這些好朋友的名字:林燦杰、莊培釗、陳佳鵬、潘煒鍵、楊崇新、陳德興、鄒秋云、陳映鵬、鄭春升、李健雄、郭心如、吳思潔等,謝謝你們讓我的生命更加豐富多彩。
感謝本書的策劃編輯張國強先生,是他促成了本書的出版,同時提出了寶貴的寫作建議,并對書稿進行了仔細審閱。
感謝《Cortex-M3權威指南》的譯者宋巖和《大話數據結構》的作者程杰,他們給我提供了學習Cortex-M3內核和數據結構的非常好的資料。
由于本書涉及的知識面廣,加上時間倉促,以及筆者的水平有限,所以疏漏之處在所難免,在此懇請專家和讀者批評指正,可以發送郵件到 ucos-iii@qq.com與我進行交流,或者到驍龍BBS(www.bbsxiaolong.com)發帖交流。本書所有例程及相關資料都可以在論壇的μC/OS-III版塊中下載,還可加入QQ群(223501362)進行交流。
感謝購買本書的你們,讓我有機會認真地做好一件事情,也愿此書能在你解讀μC/OS-III源碼的路上帶來幫助。
李悅城 野火
- C++面向對象程序設計(第三版)
- Advanced Quantitative Finance with C++
- 微服務與事件驅動架構
- Reactive Programming with Swift
- HBase從入門到實戰
- Dependency Injection in .NET Core 2.0
- Visual Basic學習手冊
- Big Data Analytics
- Learning Three.js:The JavaScript 3D Library for WebGL
- C語言程序設計
- 寫給程序員的Python教程
- Android嵌入式系統程序開發:基于Cortex-A8(第2版)
- Python機器學習與量化投資
- Mastering Unreal Engine 4.X
- Java Web開發基礎與案例教程