長沙市雨花區佩珑信息技術工作室
誠信爲本、敢于創新
24小(xiǎo)時全國咨詢熱線:
欄目分(fēn)類
行業新聞
15874970787
爲了解決多人協作,多種需求産品的開(kāi)發,并且還要長期維護,必須要把這些産品的共性提取出來。
1、 不需要低功耗設計。
2、 傳感器類和驅動器類屬于單一(yī)功能的設備,傳統前後台架構的MS3即可。
3、 電(diàn)源類及控制類設備都屬于功能複雜(zá)的,實時性要求高,帶有屏幕顯示,外(wài)擴多路傳感器或者驅動器的設備,這兩類可以統一(yī)爲一(yī)類,是設計的重點,需要建立全新的平台。
那麽這個新平台應該做成什麽樣子,腦子裏還是沒有概念的,隻是知(zhī)道在高頻(pín)機設計中(zhōng),傳統的狀态機或者函數指針方式的菜單界面編程方式是要改進了。我(wǒ)(wǒ)雖然在手機公司做過近兩年的手機驅動開(kāi)發,但此後一(yī)直做硬件方面的工(gōng)作,後來創業經營公司,所以嵌入式軟件水平一(yī)直停留在MS3這個層次沒有提高,對于這個新平台的設計,首先需要向軟件專家請教,尤其是過去(qù)這麽多年,軟件開(kāi)發也有極大(dà)的變化。
幸好我(wǒ)(wǒ)公司的底子是做手機的,主流是MTK手機方案,此外(wài)基于Wince做了一(yī)款工(gōng)業手持機,所以有各類專業軟件人員(yuán),對C、JAVA、C#都非常熟悉。在衆多軟件人員(yuán)中(zhōng),特别要感謝的是蘇鵬,他擅長Linux,之後是負責MTK手機開(kāi)發平台的維護,也需要開(kāi)發JAVA應用,關鍵那個時候他也恰好參與了基于MS3的紅外(wài)溫度傳感器的開(kāi)發,所以對嵌入式有一(yī)定的概念,對大(dà)型軟件編程又(yòu)很擅長,所以當我(wǒ)(wǒ)提出我(wǒ)(wǒ)的需求的時候,他很清楚我(wǒ)(wǒ)想要幹什麽。
蘇鵬認爲MS3是一(yī)個很好的東西,簡單、易用,不能輕易抛棄,所以第一(yī)步在MS3上重構,引入當前主流的面向對象菜單界面編程思想,這個重構花了将近一(yī)個月,因爲MS3是前後台的,隻有一(yī)個大(dà)循環,基于消息機制,很多事件都是在大(dà)循環中(zhōng)處理,菜單界面放(fàng)在大(dà)循環中(zhōng)解析的時候,因爲菜單界面顯示屬于是低速事件,會嚴重影響高速的事件,讓MS3中(zhōng)的消息機制失效,所以無法的實現面向對象菜單界面編程,隻是形式上的實現了一(yī)些功能,沒有實際使用這個代碼,但這也爲後來的真正實現面向對象菜單界面編程打下(xià)了基礎,并且也認識到MS3這種隻有一(yī)個大(dà)循環的架構無法實現真正的面向對象菜單界面編程,必須要引入搶占式多任務操作系統,把菜單界面放(fàng)在最低優先級的任務中(zhōng),其他的消息事件處理(消息事件處理,也叫業務邏輯處理,後續用業務邏輯表述)放(fàng)在一(yī)個高的優先級中(zhōng),這樣最少需要兩個任務,所以接下(xià)來的事情就是選擇RTOS,并且深入理解它。
首先考慮的是uC/OS-II,因爲它的資(zī)料最多,用戶群體(tǐ)廣泛,并且之前也接觸過一(yī)點,雖然沒有深入,但感情上首選它。此外(wài)有同事推薦了FreeRTOS和國内的RT-Thread,FreeRTOS跟uC/OS-II類似,但知(zhī)名度太低,資(zī)料及客戶群體(tǐ)都很少,雖然它是免費(fèi)的,還是放(fàng)棄了。RT-Thread編程風格是Linux的,我(wǒ)(wǒ)不喜歡Linux風格,感覺不好看,不夠優雅,其次知(zhī)名度也遠不如uC/OS-II,并且可靠性、穩定性如何也值得懷疑,它帶的GUI适合彩屏,相對複雜(zá),也不适合黑白(bái)屏的工(gōng)業場合使用,所以也放(fàng)棄了。
選定uC/OS-II後,必須要深入理解它的每一(yī)個細節,首先碰到的就是uC/OS-II有太多的宏定義,因爲要可裁剪、可配置,但實際上有大(dà)量的功能是用不到的,所以我(wǒ)(wǒ)就從精簡入手,把在新平台中(zhōng)可能用到的函數保留下(xià)來,其它的一(yī)律去(qù)掉,這樣就沒有了煩人的宏定義,有很多網友也抱怨這些宏定義,嚴重的幹擾了uC/OS-II的代碼閱讀。
通過精簡uC/OS-II,深刻掌握了它的原理,并且這個時候新平台的需求也越來越清晰,絕大(dà)部分(fēn)的需求隻要兩個任務即可,一(yī)個爲菜單界面任務,一(yī)個爲業務邏輯任務,根本不需要64個任務,所以對uC/OS-II大(dà)做修改重構,去(qù)掉了空閑任務和統計任務,把菜單界面解析安排在最低優先級上,業務邏輯放(fàng)在高優先級上,這樣隻需要兩個任務即可。
爲了考慮今後任務的擴展性,還是保留了任務表,隻是精簡爲支持8個任務。爲了降低OS的内存占用,進一(yī)步精簡OS内核,把原來基于鏈表結構的任務塊改成數組結構。這樣一(yī)個非常簡單的uC/OS-II就出爐了,僅僅兩個文件即可。
精簡、重構後的内核隻是保留了uC/OS-II的任務切換功能而已,而所有的RTOS都有這個功能,并且都是類似的,所以已經脫離(lí)了uC/OS-II,隻是這個内核開(kāi)始源自uC/OS-II,風格一(yī)樣,所以還保留其名,但本質上已經不屬于uC/OS-II了,所以也不存在版權問題,若想進一(yī)步避開(kāi),也可以參考其它的RTOS精簡或者直接用其它的RTOS.若隻需要用兩個任務,新平台還提供了一(yī)種軟中(zhōng)斷的方式實現雙任務,完全不需要RTOS。
引入RTOS實現了多任務之後,新平台的架構有些浮現,接下(xià)來要做的是确定軟件架構,而這個必須要從現代成熟的軟件架構中(zhōng)尋找。在跟同事交流後,他們都提到了面向對象設計,但這個需要采用C++,而嵌入式中(zhōng)C++卻不流行,我(wǒ)(wǒ)也不會,所以不可能選擇C++.後來想到用常規的C語言寫成類似C++的面向對象風格,但參考了網上的代碼之後,覺得把C語言弄的更複雜(zá)了,很别扭,變成了四不像。之後又(yòu)了解了JAVA,但感覺這個風格也不是很适合,直到有一(yī)位負責C#的同事侯德平,他建議采用C#,并且給我(wǒ)(wǒ)演示C#的好處的時候,讓我(wǒ)(wǒ)眼睛一(yī)亮,這就是我(wǒ)(wǒ)想要的東西。
1、優雅的編程風格,簡單易用的長命名命名規範很容易被開(kāi)發者接受,抛棄複雜(zá)的匈牙利命名法。
2、System這個命名空間概念,可以很好的封裝整個系統層,把應用層獨立出來,這樣可以提高代碼的複用性和穩定性。
3、C#是面向對象,但比C++簡單很多,完全可以利用C語言中(zhōng)的結構體(tǐ)模拟命名空間和類,把C語言寫成C#風格。
4、微軟的編程環境,特别适合工(gōng)業行業,無論PC機還是WINCE嵌入式設備,C#都可以通用。這樣嵌入式端用新平台開(kāi)發之後,本身就是C#風格的,很容易掌握PC端的C#編程。
到了這兒,整個框架基本成型,但是系統層如何進一(yī)步細分(fēn)呢?這時蘇鵬建議參考ARM的CMSIS标準。
爲了提高可移植性,在硬件驅動層與OS、GUI等中(zhōng)間件層引入了設備層,至此整個軟件架構的框架基本建立完成。