學(xué)習(xí)之路主要為FreeRTOS操作系統(tǒng)在STM32F103(STM32F103C8T6)上的運(yùn)用,采用的是標(biāo)準(zhǔn)庫編程的方式,使用的IDE為KEIL5。
注意!??!本學(xué)習(xí)之路可以通過購買STM32最小系統(tǒng)板以及部分配件的方式進(jìn)行學(xué)習(xí),也可以通過Proteus仿真的方式進(jìn)行學(xué)習(xí)。
后續(xù)文章會(huì)同時(shí)發(fā)表在個(gè)人博客(jason1016.club)、CSDN;
視頻會(huì)發(fā)布在bilibili(UID:399951374)
作者的話:
????????相信大家在學(xué)習(xí)完STM32的裸機(jī)開發(fā)后,滿懷信心地去寫一個(gè)龐大的項(xiàng)目的時(shí),寫到后期總會(huì)感覺,各個(gè)模塊的任務(wù)總是會(huì)相互制約和影響,存在絕對(duì)的先后順序關(guān)系(也稱為輪詢方法),即使在系統(tǒng)中以中斷優(yōu)先應(yīng)對(duì)突發(fā)任務(wù)(前后臺(tái)模式)也不是辦法,一來是中斷內(nèi)的程序不能太復(fù)雜,最后只標(biāo)志事件然后再主函數(shù)重新運(yùn)行;二來是頻繁進(jìn)中斷也不是辦法吧。
? ? ? ? 這里舉一個(gè)例子:我給單片機(jī)設(shè)置了
- (1) 一個(gè)每三秒需要通過MQTT協(xié)議將傳感器收集到的溫濕度數(shù)據(jù)上傳到服務(wù)器的任務(wù)
- (2) 此為我還設(shè)置了系統(tǒng)需要通過光度傳感器監(jiān)測(cè)光強(qiáng)閾值控制燈的開關(guān)
- (3) 設(shè)置OLED屏幕實(shí)時(shí)顯示時(shí)鐘。
- (4) 控制LED呼吸燈,每5s執(zhí)行一次翻轉(zhuǎn)操作
????????那我在編寫程序的時(shí)候就會(huì)遇到許多問題:
- 上述第一個(gè)和第二個(gè)任務(wù)應(yīng)該寫在中斷還是掛起標(biāo)志位再在輪詢主函數(shù)中執(zhí)行呢?
- 假設(shè)在中斷中,那中斷的執(zhí)行事件會(huì)不會(huì)太復(fù)雜
- 假設(shè)在任務(wù)中,當(dāng)任務(wù)多起來,每次單片機(jī)需要完整執(zhí)行一次輪詢周期太長,會(huì)不會(huì)導(dǎo)致數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性得到損失甚至導(dǎo)致數(shù)據(jù)丟包
- 當(dāng)我們使用delay等待函數(shù)的時(shí)候是不是會(huì)導(dǎo)致系統(tǒng)“沒事干”導(dǎo)致CPU資源白白浪費(fèi)掉了
????????因此我們開始學(xué)習(xí)嘗試了解以操作系統(tǒng)去解決上述的問題。那么我們應(yīng)該移植什么操作系統(tǒng)呢?通過了解STM32F103適配的主流系統(tǒng)有μC/OS-II、eCos、FreeRTOS、都江堰操作系統(tǒng)等操作系統(tǒng)。而其中FreeRTOS以開源、免費(fèi)而著名,所以我們?cè)趯W(xué)習(xí)單片機(jī)就自然而然地FreeRTOS作為首選了。
? ? ? ? 好了,跟大家賣了這么久關(guān)子,也不好再吊著大家了,接下來我就是直入主題了?。。?/p>
什么是操作系統(tǒng)?
? ? ? ? 這里相信很多教程都講過了,但是這里我想和大家聊聊我的看法!
? ? ? ? 首先我們要先知道操作系統(tǒng)的主體是誰,操作系統(tǒng)是為誰服務(wù)的?操作系統(tǒng)的服務(wù)受眾群體從始至終都只有一個(gè),那就是單片機(jī)。
????????對(duì)于單片機(jī)是什么,我這里分享一個(gè)我個(gè)人很喜歡的理解模式,(以STM32F103為例)我們把單片機(jī)比作一個(gè)人,那他的內(nèi)核就是他的小腦瓜;晶振就是他的心跳;外設(shè)就是他的五感,SRAM和FLASH就是他的記憶系統(tǒng),總線協(xié)議就是他的血管,那這樣是不是就可以將單片機(jī)轉(zhuǎn)化成一個(gè)活生生的人了呢。
????????既然都把他比作一個(gè)人了,那我們不妨把單片機(jī)的各個(gè)運(yùn)行模式轉(zhuǎn)化為一個(gè)人思維方式進(jìn)階。首先裸機(jī)開發(fā)模式,就是這個(gè)孩童的階段,這個(gè)時(shí)候單片機(jī)還不懂怎么合理分配自己的時(shí)間:只知道到了早上要先刷牙,然后洗臉,最后再吃早飯,但是針對(duì)突發(fā)情況,比如今天天牙膏沒了那咋辦?單片機(jī)就不會(huì)處理了,就傻傻地站在洗漱池前等刷牙,等牙膏來了(輪詢模式);
然后就是前后臺(tái)系統(tǒng)模式了,等你年紀(jì)再大點(diǎn),步入了幼年時(shí)期,可以聽得懂父母的話,在上述處理事情的模式上,又學(xué)會(huì)了聽爸爸媽媽的話,當(dāng)父母喊你去做什么事情的時(shí)候,你總會(huì)樂呵呵地拋下手里的所有事情去聽爸爸媽媽喊你知道你一會(huì)要去做什么(中斷),然后再先把爸爸媽媽安排的工作插入上述的輪詢進(jìn)程任務(wù)中,到時(shí)間了再處理得當(dāng)(主程序執(zhí)行事件)。這樣要是媽媽說她馬上要出門了,喊你幫忙拿車鑰匙,你還傻傻地先刷牙洗臉吃早餐再給媽媽送過去,估計(jì)媽媽得氣死。
最后就到了多任務(wù)系統(tǒng)了,單片機(jī)度過稚嫩的幼年時(shí)期,到了青年時(shí)期有了屬于自己的一套做人方式和行為準(zhǔn)則,當(dāng)然青年時(shí)期屬于叛逆時(shí)期,不同單片機(jī)的發(fā)展差異就在于他解除了什么學(xué)習(xí)了什么(而這里我把這件事稱為移植了什么系統(tǒng)),而我們就單獨(dú)將學(xué)會(huì)了FreeRTOS的單片機(jī)小朋友提出來舉例了,這位小朋友他就學(xué)會(huì)了:
- 把要做的事情都分成一個(gè)個(gè)任務(wù),然后重要的事情先做(任務(wù)調(diào)度器按任務(wù)優(yōu)先級(jí)調(diào)度)。
- 在別的任務(wù)等待的時(shí)候可以做別的事情,比如你在煲熱水,等水沸騰的時(shí)候就可以做別的事情啦。(任務(wù)調(diào)度器任務(wù)切換)
- 合理運(yùn)用自己的記憶力(heap_4內(nèi)存分配)
- ......
????????當(dāng)然上述說到的三個(gè)階段,都是基于單片機(jī)是人的基礎(chǔ)實(shí)現(xiàn)的,賦予了他思考的能力。相信大家都知道,人類之所以區(qū)別于野獸,是在于其能思考的能力,而思考的依托就是我們發(fā)達(dá)的大腦,這是由我們的基因決定的。就像單片機(jī)為什么可以被賦予操作系統(tǒng)(思考能力)呢?其決定性因素就在于其的一個(gè)根本內(nèi)核——ARM內(nèi)核,以STM32F103C8T6為例,其內(nèi)核為cortex-M3,他的這個(gè)內(nèi)核就是他的遺傳下來的大腦,從本質(zhì)來講是他的這個(gè)大腦支持他思考,所以操作系統(tǒng)的誕生不是ARM的一個(gè)發(fā)展產(chǎn)物,而是ARM的一個(gè)原生產(chǎn)物。其實(shí)在cortex-M3,M4內(nèi)核中,也早就為接收操作系統(tǒng)預(yù)留了一系列的配置,而不同的操作系統(tǒng),只是單片機(jī)在發(fā)展過程中遇到的不同的事發(fā)生的轉(zhuǎn)變。
????????可能有點(diǎn)繞,所以我就喜歡用一個(gè)很有深度的話來解析:決定一個(gè)人的由兩個(gè)因素,一個(gè)是他的基因,一個(gè)是他的經(jīng)歷。單片機(jī)同樣如此,決定其本質(zhì)的是他的出廠硬件(內(nèi)核和外設(shè)),而決定其思考方式的,就是他的一個(gè)操作系統(tǒng)了。
- 我們無法決定我們的基因,但是其實(shí)我們的基因賦予了可以思考的能力,我們可以通過不同思考方式,在基因固定的情況下,達(dá)到更高的成就。
- 單片機(jī)同樣無法決定他的內(nèi)核,外設(shè)等硬件,但是其實(shí)單片機(jī)的內(nèi)核賦予了其可以移植操作系統(tǒng)的能力,其同樣可以通過移植不同的操作系統(tǒng),在硬件固定的情況下,實(shí)現(xiàn)更多的功能以及減少更多的功耗。
?相信聊到這里,大家大概了就了解了單片機(jī)和操作系統(tǒng)的關(guān)系了,操作系統(tǒng)就是單片機(jī)的思考和處理事情的方式,可能網(wǎng)上很多都有介紹Linux操作系統(tǒng)、FreeRTOS操作系統(tǒng),但是相信大家看完這么多介紹都是似懂非懂的。在我看來,操作系統(tǒng)的定義應(yīng)該泛定義到單片機(jī)的執(zhí)行事件的一個(gè)模式,無論是裸機(jī)還是前后端,多任務(wù)都是一個(gè)完整的操作系統(tǒng)(這里是作者個(gè)人臆想的,要是錯(cuò)了歡迎指正)。
學(xué)習(xí)之路安排
? ? ? ? 這條學(xué)習(xí)之路會(huì)以STMF103C8T6為MCU,在上面移植FreeRTOS操作系統(tǒng),并且逐層解析FreeRTOS實(shí)時(shí)操作系統(tǒng)。最終希望都可以掌握FreeRTOS實(shí)時(shí)操作系統(tǒng),并且可以以此為基礎(chǔ)做出來很多實(shí)戰(zhàn)項(xiàng)目。
寄望與自勉
很喜歡那句話,種一顆樹最好的時(shí)間是10年前,其次就是今天!愿今日的你成就明日的你。就像我個(gè)人博客主頁寫的那句話一樣:
你終將成為你想成為的人
愿你在通往成功的路上
不再孤身一人文章來源:http://www.zghlxwxcb.cn/news/detail-460126.html
本文為作者獨(dú)立編寫,本BLOG上所有的原創(chuàng)文章未經(jīng)本人許可,不得用于商業(yè)用途及傳統(tǒng)媒體。網(wǎng)絡(luò)媒體轉(zhuǎn)載請(qǐng)注明出處,否則屬于侵權(quán)行為。文章來源地址http://www.zghlxwxcb.cn/news/detail-460126.html
到了這里,關(guān)于FreeRTOS學(xué)習(xí)之路,以STM32F103C8T6為實(shí)驗(yàn)MCU(序章——淺談單片機(jī)以及FreeRTOS)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!