在STM32等單片機上,RTOS比裸機編程更有優(yōu)勢嗎?
來(lái)源于小伙伴提問(wèn)。
以下是我的一些看法。
哈哈,看來(lái)今天你是真被那位“得瑟同事”氣著(zhù)了!這 RTOS 和裸機編程之爭,確實(shí)值得好好辯一辯。你說(shuō)得對,各有利弊,不存在誰(shuí)獨占一切的優(yōu)點(diǎn)。RTOS并不是帶著(zhù)“模塊化”和“可讀性”皇冠降臨的救世主。
1
模塊化、內聚性與耦合性
首先,那位同事說(shuō)的模塊化、高內聚、低耦合,確實(shí)是個(gè)好概念,問(wèn)題是這跟RTOS沒(méi)啥“獨家專(zhuān)利”關(guān)系!裸機編程完全可以做到這一點(diǎn)。模塊化和代碼結構的好壞主要取決于開(kāi)發(fā)者的設計能力和代碼習慣。
你要是個(gè)代碼寫(xiě)得像意大利面條的程序員,用RTOS也照樣糊成一鍋亂燉。你要是會(huì )寫(xiě)結構化、清晰的代碼,裸奔也能跑得漂亮!
就好比開(kāi)車(chē)一樣,有人開(kāi)自動(dòng)擋(RTOS)覺(jué)得自己輕松了,但你開(kāi)手動(dòng)擋(裸奔),依舊可以漂移漂得帥氣,看誰(shuí)技術(shù)更硬而已。
2
RTOS真的“模塊化”嗎?
有些人覺(jué)得RTOS是“模塊化神器”,實(shí)際上RTOS只是幫你管理任務(wù),給你分配時(shí)間片,用任務(wù)調度來(lái)管理多任務(wù)。你要自己去“模塊化”你的應用代碼,它不直接幫你寫(xiě)模塊化代碼。說(shuō)白了,它是個(gè)調度員,而不是代碼設計的魔法師。裸機編程也能做到類(lèi)似的效果,只是得自己管理“調度”和資源,當然這也增加了一些手工活兒。
所以如果你的應用邏輯簡(jiǎn)單,或對實(shí)時(shí)性要求不高,完全沒(méi)必要用RTOS。裸奔就像極限運動(dòng),跑得快且自由,少了RTOS這位“調度員”還省事兒呢。
3
RTOS適用場(chǎng)景
RTOS的優(yōu)勢體現在復雜場(chǎng)景下。比如,你有多個(gè)需要實(shí)時(shí)運行的任務(wù),而且每個(gè)任務(wù)有不同的優(yōu)先級。這時(shí)RTOS就像個(gè)“時(shí)間管理大師”,幫你在不同任務(wù)之間進(jìn)行合理調度,讓各個(gè)任務(wù)都能按需分配時(shí)間。
要是你硬用裸機做這些,那就像是你一個(gè)人要管多個(gè)孩子的作業(yè)、游戲、吃飯和睡覺(jué),整天手忙腳亂。當然,真正的嵌入式高手可以通過(guò)中斷、定時(shí)器等機制手動(dòng)實(shí)現調度,但那得看項目復雜程度和個(gè)人習慣了。
4
裸機的爽點(diǎn)在哪?
裸奔最大的優(yōu)點(diǎn)就是——簡(jiǎn)單!高效! 你不需要操心操作系統的開(kāi)銷(xiāo),不需要處理任務(wù)切換的延遲,也不需要關(guān)心系統什么時(shí)候會(huì )搶走你的CPU時(shí)間。所有的資源你說(shuō)了算,自己安排,想干啥干啥,特別適合那些資源緊張的小系統,甚至有時(shí)候RTOS那點(diǎn)調度開(kāi)銷(xiāo)都會(huì )讓你抓狂。
就像極簡(jiǎn)主義,裸機編程讓你控制一切,減少了不必要的依賴(lài)和復雜度。所以有些時(shí)候,裸奔編程的可讀性和可維護性其實(shí)是更好的!如果系統只有幾個(gè)功能,不需要復雜的調度,裸機能讓代碼更加直觀(guān)清晰。你明白一行代碼在做什么,不用擔心背后被操作系統悄悄搞了啥幺蛾子。
5
各有千秋,取決于應用場(chǎng)景
說(shuō)到底,RTOS和裸奔的選擇歸根結底是看場(chǎng)景。如果你做的是資源受限、結構簡(jiǎn)單的小應用,裸機編程沒(méi)毛病,清晰、簡(jiǎn)潔、高效。但如果是一個(gè)需要并行處理、多個(gè)任務(wù)實(shí)時(shí)響應的大型項目,RTOS的調度機制會(huì )給你帶來(lái)很大的便利,尤其是系統變得越來(lái)越復雜的時(shí)候。
所以啊,你大可以告訴你同事,RTOS確實(shí)牛,但別神化它!有些時(shí)候裸奔照樣可以玩得很6,設計良好的裸機代碼也能做到高內聚、低耦合。如果他不服,咱就開(kāi)著(zhù)裸奔的車(chē)比試比試,看看誰(shuí)能跑得更穩更快!
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。