《嵌入式操作系統(tǒng)史話》之四:μC/OS的故事(一)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
μC/OS的故事起始于1989年。那時(shí),我(注:即Jean Labrosse先生)加入到位于美國(guó)佛羅里達(dá)州勞德代爾堡市的Dynalco控制公司,并開始為大型工業(yè)往復(fù)式發(fā)動(dòng)機(jī)設(shè)計(jì)全新的、基于微控制器的點(diǎn)火控制系統(tǒng)。由于有實(shí)時(shí)內(nèi)核的使用經(jīng)驗(yàn),我相信使用操作系統(tǒng)可有強(qiáng)力地推動(dòng)該項(xiàng)目以及Dynalco公司其它在研項(xiàng)目的進(jìn)展。
對(duì)于該點(diǎn)火控制系統(tǒng)而言,進(jìn)入市場(chǎng)的時(shí)間至關(guān)重要。并且,我知道實(shí)時(shí)內(nèi)核的使用能夠幫助我實(shí)現(xiàn)既定目標(biāo)。我也知道將來還要為這款產(chǎn)品增加一些新的功能,而使用可剝奪型(注:也稱為可搶占式)的操作系統(tǒng)將允許在不破壞系統(tǒng)響應(yīng)特性的情況下做這些升級(jí)。我最初考慮使用的內(nèi)核是一個(gè)過去我用過且很熟悉的內(nèi)核。不過,該內(nèi)核非常昂貴,而我的經(jīng)費(fèi)卻不是很充足。備選的是用一個(gè)過去我沒有用過的內(nèi)核,其價(jià)格只有最初選擇內(nèi)核的五分之一。
最終,考慮到節(jié)省經(jīng)費(fèi),我選擇了使用不熟悉的那個(gè)操作系統(tǒng)。然而,我很快意識(shí)到需要為這個(gè)看起來更便宜的操作系統(tǒng)付出我更多的時(shí)間。在拿到內(nèi)核后的兩個(gè)月,我不停地聯(lián)系對(duì)方的技術(shù)支持人員,徒勞無益地做各種嘗試,想知道為什么連一個(gè)最簡(jiǎn)單的應(yīng)用程序都跑不起來。這個(gè)操作系統(tǒng)說是用C語(yǔ)言寫的,卻要求用匯編語(yǔ)言初始化所有的內(nèi)核變量。后來發(fā)現(xiàn),我是最先購(gòu)買這個(gè)操作系統(tǒng)的那批用戶之一,是在不知情的情況下充當(dāng)了這個(gè)操作系統(tǒng)的試用版測(cè)試員。
實(shí)在是受夠了,我轉(zhuǎn)而使用最初放棄的那個(gè)較昂貴的操作系統(tǒng)。眼看項(xiàng)目要延期,錢就再不是問題了。不到兩天,簡(jiǎn)單的應(yīng)用程序就跑起來了,這在之前那個(gè)便宜的操作系統(tǒng)上好像是不可能做到的事。內(nèi)核相關(guān)的問題似乎解決了。然而,很快我發(fā)現(xiàn)自己又進(jìn)入了另外一個(gè)僵局。有一天,我的一個(gè)工程師向我匯報(bào)這個(gè)新的操作系統(tǒng)好像有毛?。╞ug),從此,一系列的問題就開始了。我很快把這個(gè)工程師發(fā)現(xiàn)的問題轉(zhuǎn)發(fā)給軟件廠商,暗想他們會(huì)對(duì)此感興趣。但是,沒有收到他們修正bug的保證,取而代之的是,我接到通知說90天的擔(dān)保期已過。除非支付給他們一筆維護(hù)費(fèi),否則,他們不會(huì)修正這個(gè)bug,對(duì)我來說這種要求簡(jiǎn)直是不可理喻。按照軟件廠商的希望,我支付了這筆維護(hù)費(fèi)用。想不到的是,軟件廠商竟然花費(fèi)了6個(gè)月才去掉了這個(gè)bug。最終,在拿到第二個(gè)操作系統(tǒng)的一年以后,才利用該操作系統(tǒng)完成了我的點(diǎn)火控制系統(tǒng)。很明顯,我需要一個(gè)更好的解決方案。
兩次失望后,我開始開發(fā)自己的內(nèi)核。我想得很簡(jiǎn)單,認(rèn)為一個(gè)內(nèi)核真正需要做的事情就是保存和恢復(fù)CPU寄存器,寫一個(gè)內(nèi)核應(yīng)當(dāng)不是一件很有挑戰(zhàn)性的事情。大約花了一年時(shí)間,我果真寫完了我的第一個(gè)操作系統(tǒng)。也正是有了新操作系統(tǒng)在手,開發(fā)多任務(wù)應(yīng)用程序就如魚得水了。該操作系統(tǒng)主要由一個(gè)C文件構(gòu)成,一個(gè)應(yīng)用中允許創(chuàng)建多達(dá)64個(gè)任務(wù)。每個(gè)任務(wù)有獨(dú)一無二的優(yōu)先級(jí)。每次調(diào)用任務(wù)調(diào)度器時(shí),CPU總是運(yùn)行處于就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)。μC/OS是可剝奪型內(nèi)核,在任意時(shí)刻都可能發(fā)生任務(wù)調(diào)度。高效的任務(wù)調(diào)度實(shí)際上只是μC/OS提供的眾多服務(wù)之一。此外,該操作系統(tǒng)還會(huì)提供任務(wù)間通信(通過消息隊(duì)列和郵箱)和任務(wù)間同步(通過信號(hào)量)相關(guān)的服務(wù)。μC/OS所有元素的設(shè)計(jì)都考慮了高可靠性以及簡(jiǎn)便易用。
在我的職業(yè)生涯中,自始自終都很注重代碼的一致性和文檔說明。從1984年開始,我就使用規(guī)范的代碼標(biāo)準(zhǔn),μC/OS代碼的一致性可以很好地證明這一點(diǎn)。在Dynalco工作時(shí),我創(chuàng)造并推廣了一套嚴(yán)格的代碼編寫規(guī)范。μC/OS就是根據(jù)這套規(guī)范設(shè)計(jì)的。μC/OS源代碼的特點(diǎn)包括:大量的空行、字斟句酌的注釋和統(tǒng)一的命名。μC/OS內(nèi)核還具有極好的可移植性,這也進(jìn)一步證實(shí)了這種嚴(yán)謹(jǐn)?shù)拇a編寫規(guī)范的優(yōu)勢(shì)所在。雖然μC/OS跟它的先驅(qū)者一樣也有少量的與處理器相關(guān)的函數(shù),但是,這些函數(shù)代碼與操作系統(tǒng)中的其它代碼很清楚地分開了。工程師們能夠非常簡(jiǎn)單地把μC/OS移植到一個(gè)新的CPU架構(gòu)上。
我是知道μC/OS優(yōu)點(diǎn)的人,為了把我的新軟件介紹給其他人,我寫了一篇很長(zhǎng)的文章,詳細(xì)解釋了μC/OS的內(nèi)部工作原理。因?yàn)橛刑鄸|西要說,最終我的文章長(zhǎng)達(dá)約70頁(yè)。我把文章投給《C語(yǔ)言用戶日記》(C User’s Journal),文章被拒載了,原因有二,一是文章太長(zhǎng)了,二是文章主題不夠新。該雜志已經(jīng)出版了多篇關(guān)于內(nèi)核的文章,而這只是又一篇關(guān)于實(shí)時(shí)內(nèi)核的文章。但我堅(jiān)信我的文章是獨(dú)一無二的,我又把它投給《嵌入式系統(tǒng)編程》(Embedded Systems Programming)。該雜志的編輯給我的答復(fù)和《C語(yǔ)言用戶日記》是一樣的,但我最終還是使他相信了μC/OS是一個(gè)非常值得關(guān)注的操作系統(tǒng)。我向他解釋?duì)藽/OS在質(zhì)量上可以與主流嵌入式軟件公司提供的商業(yè)RTOS媲美(并且至少比其中兩個(gè)操作系統(tǒng)要好)。我還解釋說,μC/OS的源代碼可放到該雜志的電子留言板上(BBS)?!肚度胧较到y(tǒng)編程》分兩部分連載了經(jīng)過刪減的文章。發(fā)表的兩部分文章都反響強(qiáng)烈。工程師們非常高興地看到,高質(zhì)量?jī)?nèi)核的內(nèi)部工作原理被揭露出來了,他們爭(zhēng)相下載了μC/OS的源代碼。另一方面,內(nèi)核廠商則對(duì)該文章的發(fā)表非常不安。實(shí)際上,那個(gè)廉價(jià)內(nèi)核廠商尤其不安,竟聲稱我抄襲了他們的工作。試想一下,我怎么可能基于一個(gè)不能運(yùn)行的軟件來開發(fā)μC/OS!
很快,令RTOS廠商更加不安的事情出現(xiàn)了。我的文章被《嵌入式系統(tǒng)編程》雜志刊登后不久,《C語(yǔ)言用戶日記》的出版商,R&D出版社,主動(dòng)聯(lián)系我,表示想出版一本μC/OS的書。起初,這本書只是計(jì)劃把我最早提交給《C語(yǔ)言用戶日記》的材料打印出來。如果采用這種思路,這本書也就80頁(yè)左右。為了充分利用這次機(jī)會(huì),我計(jì)劃寫一本深入介紹μC/OS的書。經(jīng)R&D出版社的同意,在接下來的幾個(gè)月,我開始寫作。到1992年的下半年,我的第一本書《μC/OS,The Real-Time Kernel》出版了(見圖1)。最開始,這本書的售出速度并不令人滿意,但R&D出版社每個(gè)月都會(huì)在《C語(yǔ)言用戶日記》上給這本書做廣告。與此同時(shí),我漸漸被大家認(rèn)可,成為一個(gè)內(nèi)核專家。1993年的春天,我接受邀請(qǐng),參加了在喬治亞州亞特蘭大市舉辦的嵌入式系統(tǒng)會(huì)議(ESC),為超過70位嵌入式愛好者講述了操作系統(tǒng)的基本原理。在接下來的幾年中,我一直參加ESC年會(huì),每次都會(huì)對(duì)幾百個(gè)工程師講述我的內(nèi)核。逐漸大家對(duì)我寫的書的興趣也提高了。過了最初緩慢發(fā)售階段,《μC/OS,The Real-Time Kernel》最終銷量超過15,000本?!?
圖1:《μC/OS,The Real-Time Kernel》和書后附的1.1版軟件