與uCos見面還是大學(xué)的時(shí)候,老師讓我為畢業(yè)設(shè)計(jì)選一個(gè)課題,要求有關(guān)嵌入式實(shí)時(shí)操作系統(tǒng),于是開始在網(wǎng)上搜索,順理成章的就發(fā)現(xiàn)了uCos,于是開始了uCos之路,但后來(lái)由于硬件平臺(tái)的問(wèn)題,畢設(shè)沒有用uCos,而用了另外一個(gè)不開源的。
畢業(yè)后,自己做的項(xiàng)目用到過(guò)RTX51,uCos,Linux,當(dāng)做linux下的項(xiàng)目時(shí),研究過(guò)一陣子linux的源碼,后來(lái)又一天,閑來(lái)無(wú)事再去看uCos的源碼時(shí),突然發(fā)現(xiàn)uCos里的一些原理,對(duì)于理解和構(gòu)建一個(gè)操作系統(tǒng)這這么的經(jīng)典和透徹!
今天就給大家來(lái)整理一下uCos里的一些原理,相信對(duì)于更透徹的理解RTOS定會(huì)有好處,如果你確實(shí)沒什么收獲,就當(dāng)是打發(fā)時(shí)間吧!
首先,第一個(gè)要解決的問(wèn)題是,為什么我們需要uCos?就像最開始學(xué)C編程時(shí),老師告訴我們,指針很重要,那時(shí)你肯定有一個(gè)大的疑問(wèn),指針到底有什么好?心里一直犯嘀咕著:不用指針不一樣把程序編出來(lái)了? 現(xiàn)在想想看c語(yǔ)言沒了指針,是不是寸步難行呢。回到正題,我們到底為什么需要uCos?
一般的簡(jiǎn)單的嵌入式設(shè)備的編程思路是下面這樣的:
main
{
{處理事務(wù)1};
{處理事務(wù)2};
{處理事務(wù)3};
。..。..。
{處理事務(wù)N};
}
isr_server
{
{處理中斷};
}
這是最一般的思路,對(duì)于簡(jiǎn)單的系統(tǒng)當(dāng)然是夠用了,但這樣的系統(tǒng)實(shí)時(shí)性是很差的,比如“事務(wù)1”如果是一個(gè)用戶輸入的檢測(cè),當(dāng)用戶輸入時(shí),如果程序正在處理事務(wù)1下面的那些事務(wù),那么這次用戶輸入將失效,用戶的體驗(yàn)是“這個(gè)按鍵不靈敏,這個(gè)機(jī)器很慢”,而我們?nèi)绻咽聞?wù)放到中斷里去處理,雖然改善了實(shí)時(shí)性但會(huì)導(dǎo)致另外一個(gè)問(wèn)題,有可能會(huì)引發(fā)中斷丟失,這個(gè)后果有時(shí)候比“慢一點(diǎn)”更加嚴(yán)重和惡劣!又比如事務(wù)2是一個(gè)只需要1s鐘處理一次的任務(wù),那么顯然事務(wù)2會(huì)白白浪費(fèi)CPU的時(shí)間。
這時(shí),我們可能需要改進(jìn)我們的編程思路,一般我們會(huì)嘗試采用“時(shí)間片”的方式。這時(shí)候編程會(huì)變成下面的方式:
main
{
{事務(wù)1的時(shí)間片到了則處理事務(wù)1};
{事務(wù)2的時(shí)間片到了則處理事務(wù)2};
。..。..。
{事務(wù)N的時(shí)間片到了則處理事務(wù)N};
}
time_isr_server
{
{判斷每個(gè)事務(wù)的時(shí)間片是否到來(lái),并進(jìn)行標(biāo)記};
}
isr_server
{
{處理中斷};
}
我們可以看到,這種改進(jìn)后的思路,使得事務(wù)的執(zhí)行時(shí)間得到控制,事務(wù)只在自己的時(shí)間片到來(lái)后,才會(huì)去執(zhí)行,但我們發(fā)現(xiàn),這種方式仍然不能徹底解決“實(shí)時(shí)性”的問(wèn)題,因?yàn)槟硞€(gè)事務(wù)的時(shí)間片到來(lái)后,也不能立即就執(zhí)行,她必須等到當(dāng)前事務(wù)的時(shí)間片用完,并且后面的事務(wù)時(shí)間片沒到來(lái),她才有機(jī)會(huì)獲得“執(zhí)行時(shí)間”。
這時(shí)候我們需要繼續(xù)改進(jìn)思路,為了使得某個(gè)事務(wù)的時(shí)間片到來(lái)后能立即執(zhí)行,我們需要在時(shí)鐘中斷里判斷完時(shí)間片后,改變程序的返回位置,讓程序不返回到剛剛被打斷的位置,而從最新獲得了時(shí)間片的事務(wù)處開始執(zhí)行,這樣就徹底解決了事務(wù)的實(shí)時(shí)問(wèn)題。
我們?cè)谶@個(gè)思路上,進(jìn)行改進(jìn),我們需要在每次進(jìn)入時(shí)鐘中斷前,保存CPU的當(dāng)前狀態(tài)和當(dāng)前事務(wù)用到的一些數(shù)據(jù),然后我們進(jìn)入時(shí)鐘中斷進(jìn)行時(shí)間片處理,若發(fā)現(xiàn)有新的更緊急的事務(wù)的時(shí)間片到來(lái)了,則我們改變中斷的返回的地址,并在CPU中恢復(fù)這個(gè)更緊急的事務(wù)的現(xiàn)場(chǎng),然后返回中斷開始執(zhí)行這個(gè)更緊急的事務(wù)。
上面的這段話有些不好讀,事實(shí)上,這是因?yàn)橐獙?shí)現(xiàn)這個(gè)過(guò)程是有些復(fù)雜和麻煩的,這時(shí)候我們就需要找一個(gè)操作系統(tǒng)(OS)幫我們做這些事了,如果你能自己用代碼實(shí)現(xiàn)這個(gè)過(guò)程,事實(shí)上你就在自己寫操作系統(tǒng)了,其實(shí)從這里也可也看出,操作系統(tǒng)的原理其實(shí)并不那么神秘,只是一些細(xì)節(jié)你很難做好。uCos就是這樣一個(gè)操作系統(tǒng),她能幫你完成這些事情,而且是很優(yōu)雅的幫你完成!
到這里,我們終于知道了為什么我們需要uCos了。事實(shí)上,uCos的用處遠(yuǎn)不止幫你完成這個(gè)“事務(wù)時(shí)間片的處理”,她還能幫你處理各種超時(shí),進(jìn)行內(nèi)存管理,完成任務(wù)間的通信等,有了她,程序的層次也更加清晰,給系統(tǒng)添加功能也更方便,這一切在大型項(xiàng)目中越發(fā)的明顯!
我們知道了uCos能給我們提供這么多的便利,那么我們就開始使用uCos吧!
原文標(biāo)題:為什么我們需要uCos?帶你透徹理解RTOS
文章出處:【微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
嵌入式
+關(guān)注
關(guān)注
5141文章
19528瀏覽量
314925 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7082瀏覽量
124943
原文標(biāo)題:為什么我們需要uCos?帶你透徹理解RTOS
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
理想汽車智駕操作系統(tǒng)解讀

國(guó)產(chǎn)操作系統(tǒng)有哪些?政企官方認(rèn)證的5大國(guó)產(chǎn)系統(tǒng),實(shí)測(cè)好用才敢推薦!

【「鴻蒙操作系統(tǒng)設(shè)計(jì)原理與架構(gòu)」閱讀體驗(yàn)】01-初始華為鴻蒙
國(guó)產(chǎn)銀河麒麟操作系統(tǒng)V10和星光麒麟V1.0操作系統(tǒng)如何選擇?

deepin操作系統(tǒng)介紹

什么是嵌入式操作系統(tǒng)?
linux操作系統(tǒng)安裝步驟 linux操作系統(tǒng)的特點(diǎn)及組成
關(guān)于臺(tái)式電腦國(guó)產(chǎn)操作系統(tǒng)鴻蒙、統(tǒng)信、麒麟等操作系統(tǒng)光驅(qū)驅(qū)動(dòng)程序一些問(wèn)題!
工控機(jī)支持什么操作系統(tǒng)
簡(jiǎn)單認(rèn)識(shí)RTOS實(shí)時(shí)操作系統(tǒng)
Windows操作系統(tǒng)是什么?它有哪些特點(diǎn)?
請(qǐng)問(wèn)MODUS支持LINUX、FREERTOS、UCOS、Mbed、Android所有操作系統(tǒng)嗎?
聚徽觸控-工業(yè)一體機(jī)選擇什么操作系統(tǒng)好
嵌入式實(shí)時(shí)操作系統(tǒng):Intewell操作系統(tǒng)與VxWorks操作系統(tǒng)有啥區(qū)別

工業(yè)實(shí)時(shí)操作系統(tǒng)對(duì)比:鴻道Intewell跟rt-linux有啥區(qū)別

評(píng)論