@內文:在嵌入式系統的設計中,軟體、硬體與機構設計三足鼎立,缺一不可。筆者以任職於SoC設計公司軟體/系統整合方面的多年經驗,期能在作業系統上以淺薄的知識與大家一同分享。
作業系統的功能
作業系統(Operation System)經過了二十多年的發展,由以往單純的DOS,至今天複雜的視窗及網路環境,功能日趨強大,定義亦逐漸糢糊。不過,在嵌入式系統中,多工環境為常見的需求,也因此其作業系統基本上具有下列功能:
Task Schedule Control
負責各個Task的Switching Control,包含Time Slice及Priority問題。而常見的演算法為Round Robin或其衍生方式。
Task Communication
不同的Task之間需要互相傳遞控制信號及資料。一般常見的方式為Message Queue。
Semaphore
當系統上具有某些有限資源(如硬體Device)時,作業系統所提供之信號臂板功能,可確保於同一時間不會有兩個或以上的Task存取同一資源,而造成系統狀態的混亂甚至當機。
Timer
負責提供時間相關的功能。
除以上基本功能外,目前許多中/大型作業系統還包含General Device Driver、Protocol Modules、Algorithm Modules、Application Modules等延伸功能,以減輕應用程式發展負荷,加速產品發展時程並達成資源共用。
一些商業化的大型作業系統套件,則包含整合發展環境(IDE),提供如Compiler/Assembler/Linker、Downloader、Debugger、Simulato、Performance Profiler等更強大而完整的軟體解決方案;如(圖一)。
Linux與WinCE的比較
Linux
有著光榮的傳統歷史,Linux出身自學術界的UNIX,這一脈相傳的技術也伴隨過大部份電腦資訊相關科系人才的求學階段。「開放」與「免費」是這個作業系統的最大優點,也使得其有一定程度的忠誠支持者。
如同聚沙成塔一般,Linux從核心、檔案系統、網路、X視窗到各式的應用程式,隨著時間的演進而一一加入,並經由所有使用者不斷考驗與改進。但也由於其免費的特性,除學術機構之外一直並沒有強大的力量來建立一些產業標準及完整的文件包裝,使得所有的使用者皆必須歷經一段不算短的學習週期,才能從龐大的原始碼中堆砌起自己的程度與知識,進而能將其移植於嵌入式系統的應用中。然而一但建立起此種能力,則往往易於將軟體作最佳化,並達成加值及與他人區隔等目的。
WinCE
微軟不是提出視窗概念的第一人,但卻把其發揚光大,成就了今日PC世界中的軟體巨人,以及眾多的協力廠商,人才及資源。由於看好日後IA等相關嵌入式系統的市場,微軟急欲重演十字軍東征,期將PC上十餘載所發展的資源優勢,藉由WinCE這座橋樑「導入」此一新的IA市場,繼續其稱霸軟體業界的雄心。
基本上,WinCE可視為Windows家族的模組化精簡版本,其發展環境及程式庫的行為亦與Windows大同小異,並支援市面上眾多熱門的微處理器。熟悉Windows發展環境的人,對WinCE的學習應不致感到太多困難。以往WinCE最為人所詬病的理由之一,為其半封閉性架構造成系統除錯的困難。針對這個問題,微軟亦已於日前將 WinCE之原始碼開放下載(當然授權金仍然要收),顯示出其對於IA新興市場的積極態度。
另外由於是模組化設計,WinCE對於記憶體的需求視所納入的模組而易;如(表一)。
模組 |
記憶體需求 |
Kernel and file system |
~ 400K |
Kernel, file system, communications |
~ 800K |
Kernel, file system, communications,
graphics, shell |
~ 1.3M |
Kernel, File System, communications,
graphics, shell, and pocket word |
~4M |
Browser |
~ +3M |
比較
其實Linux與WinCE兩者不論在技術或概念上皆有太多差異,並沒有絕對的優劣;前者好比修道多年的少林高僧,而後者則似配備齊全的特種部隊。茲列出(表二)對於兩種作業系統做一比較。
比較項目\作業系統 |
Linux |
WinCE |
硬體需求 |
較低 |
較高 |
權利金 |
無 |
約USD $10 / Set |
產品發展維護人力 |
較高 |
低 |
產品發展時程 |
慢 |
快 |
功能/模組數 |
較少 |
眾多 |
發展工具 |
較少 |
齊全方便 |
技術支援取得 |
較難 |
較易 |
原始碼 |
完全開放 |
核心開放 |
系統彈性 |
高 |
低 |
平台互通性 |
差 |
佳 |
作業系統的選擇與移植關鍵
作業系統的選擇
如同硬體平台的選擇,軟體作業系統的選擇所牽涉的因素甚多,包括市場、資源、定位及技術考量,以下將分別說明之:
市場因素
目前市場上相關產品以何種系統為大宗?開發時程有無急迫性?公司的穫利優勢定位為何?
公司資源
是否願意投入眾多軟體研發人力?長期培養或打帶跑?是否願意以外購模組方式解決不足?單一投入或平行投資?
產品定位
產品為高階或低階?是特定功能的產品,還是通用的應用平台?
技術考量
是否牽涉與其它系統的互通性?有無多媒體或資料庫系統需求?是否將長期維護?
考慮過以上因素之後,也應該歸納出不同作業系統的應用範圍及成本,如(圖二),方能選擇出最適當的解決方案。
作業系統的移植關鍵
硬體平台在進行軟體作業系統移植時應有下列步驟:
除錯界面移植
這是最重要,也是最基礎的第一步。有了除錯界面才能為問題開啟一道曙光。
啟始碼移植
記憶體控制器、記憶區塊及必要之硬體啟始碼移植,有了這些啟始碼,後續的程式才能在此硬體平台上載入執行。
中斷控制器及計時器控制碼移植
由於Timer將負責觸發Task Switch工作,此步驟攸關後續應用程式等的正常執行。
其它驅動程式撰寫
如鍵盤、顯示界面及通訊等其它的硬體驅動碼。
良好的界面區隔、撰寫格式、說明文件及註解對於移植工作亦有極重要的幫助,可避免不必要的猜測並加快發展時程。
IP與模組化設計概念
SoC的目標
近年來SoC為紅極一時的設計趨勢,國內的許多IC設計公司也多以此為目標。綜觀SoC的最終目標可歸納為以下三點:
◆低晶片量產成本;
◆增快晶片研發速度;
◆建立功能市場區隔。
以其中第二點來說,如何能在最短的時間內達成客戶所要求的功能,一直是所有SoC廠商的努力方向。由於國內不論系統廠或是上游半導體廠,在過去二十年來所建立的穫利模式皆著重於量產成本的降低,在設計研發的基礎功夫往往不夠踏實。這樣的思維於以往單一晶片複雜程度不高的情形下尚可應付,但在今日SoC中電晶體閘數動輒數百萬的要求下,就不能不對於這種「每次重頭來」的高研發成本,低單位時間產出進行檢討;由此IP (Intelligent Property)的觀念便應運而生。藉由IP的模組化及可重複使用特性,單一專案中的各個模組可由不同管道取得而進行整合,達成快速符合市場需求的目的。
模組化設計
雖說模組化設計為眾人皆知的良藥,但真能靜下心來,潛心架構界面規格及說明文件的卻不多。如果說標準化是量產的先決條件,那模組化則是可重覆使用的不二法門。也唯有建立好完善優質的軟硬體模組元件,才能有如醫師抓藥般對於客戶的要求「藥到病除」,而非「藥到命除」。
從另一方面來說,模組化的前身是界面規格訂定。唯有對於軟硬體全面考量下所訂出的規格,才能經得起時間的考驗,並能被順利植入其它的模組設計中,而仍保有各模組原有的功能及效能。因此,在缺乏標準化的IA產業中,如何建立合理規格使得模組得以在不同產品重複使用,常更甚重於如何來完成設計。以筆者任職的源捷科技來說,不論從界面規格訂定、功能模組分析到細部的原始碼寫作、驗證及整合,皆有以過去經驗為基礎而建立的完整制度及規範,並以積極態度成功協助許多客戶達成SoC的最終目標。
再回到軟體的設計上,「物件導向「其實可以為模組化設計建立良好的基礎。藉由物件的繼承、封裝及多形性,我們可以將大系統分類為嚴謹而可執行的小區塊,而一一加以拼湊。當然在業界熟悉物件導向又能善加應用的人才有限,但物件導向的精神仍可經由C語言中的Structure及Function Pointer來達成。雖說初期投入的分析時程較長,但比起後期再來補破網,仍舊是絕對值回票價。
綜結
在SoC及嵌入式系統盛行的當前,軟體亦成為提高產品價值的關鍵之一。如何選擇適當的作業系統平台有賴於對市場,產品及技術進行審慎評估。Linux及WinCE在功能,成本及時效性上各有不同特性,但在中高階應用程式共通平台上,WinCE由於繼承龐大的PC資源,優勢上較為明顯。然而除了廠商本身掌握的技術之外,尋求良好口碑的設計服務公司亦為重要課題之一。畢竟在系統日趨複雜,分工逐漸精細,產業持續西進的今日,獨大通吃的局面不再;唯有能快速掌握市場,技術並與合作夥伴達成「雙贏「的適者,才能於嚴苛的競爭中脫穎而出!