新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 嵌入式微系統(tǒng)msOS的誕生-嵌入式微系統(tǒng)連載之四

嵌入式微系統(tǒng)msOS的誕生-嵌入式微系統(tǒng)連載之四

作者: 時(shí)間:2014-09-01 來源:網(wǎng)絡(luò) 收藏

  為了解決多人協(xié)作,多種需求產(chǎn)品的開發(fā),并且還要長(zhǎng)期維護(hù),必須要把這些產(chǎn)品的共性提取出來。

本文引用地址:http://2s4d.com/article/262435.htm

  1、 不需要低功耗設(shè)計(jì)。

  2、 傳感器類和驅(qū)動(dòng)器類屬于單一功能的設(shè)備,傳統(tǒng)前后臺(tái)架構(gòu)的MS3即可。

  3、 電源類及控制類設(shè)備都屬于功能復(fù)雜的,實(shí)時(shí)性要求高,帶有屏幕顯示,外擴(kuò)多路傳感器或者驅(qū)動(dòng)器的設(shè)備,這兩類可以統(tǒng)一為一類,是設(shè)計(jì)的重點(diǎn),需要建立全新的平臺(tái)。

  那么這個(gè)新平臺(tái)應(yīng)該做成什么樣子,腦子里還是沒有概念的,只是知道在高頻機(jī)設(shè)計(jì)中,傳統(tǒng)的狀態(tài)機(jī)或者函數(shù)指針方式的菜單界面編程方式是要改進(jìn)了。我雖然在手機(jī)公司做過近兩年的手機(jī)驅(qū)動(dòng)開發(fā),但此后一直做硬件方面的工作,后來創(chuàng)業(yè)經(jīng)營(yíng)公司,所以嵌入式軟件水平一直停留在MS3這個(gè)層次沒有提高,對(duì)于這個(gè)新平臺(tái)的設(shè)計(jì),首先需要向軟件專家請(qǐng)教,尤其是過去這么多年,軟件開發(fā)也有極大的變化。

  幸好我公司的底子是做手機(jī)的,主流是MTK手機(jī)方案,此外基于Wince做了一款工業(yè)手持機(jī),所以有各類專業(yè)軟件人員,對(duì)C、JAVA、C#都非常熟悉。在眾多軟件人員中,特別要感謝的是蘇鵬,他擅長(zhǎng)Linux,之后是負(fù)責(zé)MTK手機(jī)開發(fā)平臺(tái)的維護(hù),也需要開發(fā)JAVA應(yīng)用,關(guān)鍵那個(gè)時(shí)候他也恰好參與了基于MS3的紅外溫度傳感器的開發(fā),所以對(duì)嵌入式有一定的概念,對(duì)大型軟件編程又很擅長(zhǎng),所以當(dāng)我提出我的需求的時(shí)候,他很清楚我想要干什么。

  蘇鵬認(rèn)為MS3是一個(gè)很好的東西,簡(jiǎn)單、易用,不能輕易拋棄,所以第一步在MS3上重構(gòu),引入當(dāng)前主流的面向?qū)ο蟛藛谓缑婢幊趟枷?,這個(gè)重構(gòu)花了將近一個(gè)月,因?yàn)镸S3是前后臺(tái)的,只有一個(gè)大循環(huán),基于消息機(jī)制,很多事件都是在大循環(huán)中處理,菜單界面放在大循環(huán)中解析的時(shí)候,因?yàn)椴藛谓缑骘@示屬于是低速事件,會(huì)嚴(yán)重影響高速的事件,讓MS3中的消息機(jī)制失效,所以無法完美的實(shí)現(xiàn)面向?qū)ο蟛藛谓缑婢幊?,只是形式上的?shí)現(xiàn)了一些功能,沒有實(shí)際使用這個(gè)代碼,但這也為后來的真正實(shí)現(xiàn)面向?qū)ο蟛藛谓缑婢幊檀蛳铝嘶A(chǔ),并且也認(rèn)識(shí)到MS3這種只有一個(gè)大循環(huán)的架構(gòu)無法實(shí)現(xiàn)真正的面向?qū)ο蟛藛谓缑婢幊?,必須要引入搶占式多任?wù)操作系統(tǒng),把菜單界面放在最低優(yōu)先級(jí)的任務(wù)中,其他的消息事件處理(消息事件處理,也叫業(yè)務(wù)邏輯處理,后續(xù)用業(yè)務(wù)邏輯表述)放在一個(gè)高的優(yōu)先級(jí)中,這樣最少需要兩個(gè)任務(wù),所以接下來的事情就是選擇RTOS,并且深入理解它。

  首先考慮的是,因?yàn)樗馁Y料最多,用戶群體廣泛,并且之前也接觸過一點(diǎn),雖然沒有深入,但感情上首選它。此外有同事推薦了FreeRTOS和國(guó)內(nèi)的RT-Thread,F(xiàn)reeRTOS跟類似,但知名度太低,資料及客戶群體都很少,雖然它是免費(fèi)的,還是放棄了。RT-Thread編程風(fēng)格是Linux的,我不喜歡Linux風(fēng)格,感覺不好看,不夠優(yōu)雅,其次知名度也遠(yuǎn)不如,并且可靠性、穩(wěn)定性如何也值得懷疑,它帶的GUI適合彩屏,相對(duì)復(fù)雜,也不適合黑白屏的工業(yè)場(chǎng)合使用,所以也放棄了。

  選定uC/OS-II后,必須要深入理解它的每一個(gè)細(xì)節(jié),首先碰到的就是uC/OS-II有太多的宏定義,因?yàn)橐刹眉?、可配置,但?shí)際上有大量的功能是用不到的,所以我就從精簡(jiǎn)入手,把在新平臺(tái)中可能用到的函數(shù)保留下來,其它的一律去掉,這樣就沒有了煩人的宏定義,有很多網(wǎng)友也抱怨這些宏定義,嚴(yán)重的干擾了uC/OS-II的代碼閱讀。

  通過精簡(jiǎn)uC/OS-II,深刻掌握了它的原理,并且這個(gè)時(shí)候新平臺(tái)的需求也越來越清晰,絕大部分的需求只要兩個(gè)任務(wù)即可,一個(gè)為菜單界面任務(wù),一個(gè)為業(yè)務(wù)邏輯任務(wù),根本不需要64個(gè)任務(wù),所以對(duì)uC/OS-II大做修改重構(gòu),去掉了空閑任務(wù)和統(tǒng)計(jì)任務(wù),把菜單界面解析安排在最低優(yōu)先級(jí)上,業(yè)務(wù)邏輯放在高優(yōu)先級(jí)上,這樣只需要兩個(gè)任務(wù)即可。

  為了考慮今后任務(wù)的擴(kuò)展性,還是保留了任務(wù)表,只是精簡(jiǎn)為支持8個(gè)任務(wù)。為了降低OS的內(nèi)存占用,進(jìn)一步精簡(jiǎn)OS內(nèi)核,把原來基于鏈表結(jié)構(gòu)的任務(wù)塊改成數(shù)組結(jié)構(gòu)。這樣一個(gè)非常簡(jiǎn)單的uC/OS-II就出爐了,僅僅兩個(gè)文件即可。

  精簡(jiǎn)、重構(gòu)后的內(nèi)核只是保留了uC/OS-II的任務(wù)切換功能而已,而所有的RTOS都有這個(gè)功能,并且都是類似的,所以已經(jīng)脫離了uC/OS-II,只是這個(gè)內(nèi)核開始源自u(píng)C/OS-II,風(fēng)格一樣,所以還保留其名,但本質(zhì)上已經(jīng)不屬于uC/OS-II了,所以也不存在版權(quán)問題,若想進(jìn)一步避開,也可以參考其它的RTOS精簡(jiǎn)或者直接用其它的RTOS。若只需要用兩個(gè)任務(wù),新平臺(tái)還提供了一種軟中斷的方式實(shí)現(xiàn)雙任務(wù),完全不需要RTOS。

  引入RTOS實(shí)現(xiàn)了多任務(wù)之后,新平臺(tái)的架構(gòu)有些浮現(xiàn),接下來要做的是確定軟件架構(gòu),而這個(gè)必須要從現(xiàn)代成熟的軟件架構(gòu)中尋找。在跟同事交流后,他們都提到了面向?qū)ο笤O(shè)計(jì),但這個(gè)需要采用C++,而嵌入式中C++卻不流行,我也不會(huì),所以不可能選擇C++。后來想到用常規(guī)的C語言寫成類似C++的面向?qū)ο箫L(fēng)格,但參考了網(wǎng)上的代碼之后,覺得把C語言弄的更復(fù)雜了,很別扭,變成了四不像。之后又了解了JAVA,但感覺這個(gè)風(fēng)格也不是很適合,直到有一位負(fù)責(zé)C#的同事侯德平,他建議采用C#,并且給我演示C#的好處的時(shí)候,讓我眼睛一亮,這就是我想要的東西。

  

 

  1、 優(yōu)雅的編程風(fēng)格,簡(jiǎn)單易用的長(zhǎng)命名命名規(guī)范很容易被開發(fā)者接受,拋棄復(fù)雜的匈牙利命名法。

  2、 System這個(gè)命名空間概念,可以很好的封裝整個(gè)系統(tǒng)層,把應(yīng)用層獨(dú)立出來,這樣可以提高代碼的復(fù)用性和穩(wěn)定性。

  3、 C#是面向?qū)ο?,但比C++簡(jiǎn)單很多,完全可以利用C語言中的結(jié)構(gòu)體模擬命名空間和類,把C語言寫成C#風(fēng)格。

  4、 微軟的編程環(huán)境,特別適合工業(yè)行業(yè),無論P(yáng)C機(jī)還是WINCE嵌入式設(shè)備,C#都可以通用。這樣嵌入式端用新平臺(tái)開發(fā)之后,本身就是C#風(fēng)格的,很容易掌握PC端的C#編程。

  到了這兒,整個(gè)框架基本成型,但是系統(tǒng)層如何進(jìn)一步細(xì)分呢?這時(shí)蘇鵬建議參考ARM的CMSIS標(biāo)準(zhǔn),如下圖:

  

 

  為了提高可移植性,在硬件驅(qū)動(dòng)層與OS、GUI等中間件層引入了設(shè)備層,至此整個(gè)軟件架構(gòu)的框架基本建立完成,如下圖:

  

c語言相關(guān)文章:c語言教程


c++相關(guān)文章:c++教程




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉