從歷史上看,嵌入式開發(fā)系統(tǒng)非常簡單:只有幾K內存的8位CPU。盡管這種簡單的系統(tǒng)仍在開發(fā)中,但許多資源豐富的設備現(xiàn)在都在使用一個或多個32位處理器和許多兆字節(jié)的內存。這些設備的巨大威力導致軟件的規(guī)模和復雜性不斷增加。但這種復雜性的極限是什么?
如果我們觀察機械系統(tǒng),就會發(fā)現(xiàn)存在很多復雜性。迄今為止最復雜的機器是航天飛機軌道器,它有一百萬個運動部件。考慮到這些車輛在設計上有多大的挑戰(zhàn),它們工作得非常好。我想,沒有內在的原因不能創(chuàng)造出更復雜的機器。
現(xiàn)在,電子系統(tǒng)逐漸變得更加復雜和小巧。在20世紀50年代,嵌入式開發(fā)一個復雜的電子設備可能有100個(分立的)晶體管——它甚至可能使用真空管。到今天,芯片上有幾十億個晶體管并不罕見。芯片的幾何形狀每年都會縮小到越來越小的納米。
在過去50-60年中,軟件復雜性急劇增長,反映了硬件的進步。比特是軟件的最小“單位”,以這種方式衡量,軟件的復雜性已經遠遠落后于機械設計,它比硬件領先一到兩個數(shù)量級。然而,我們看不到軟件理論復雜性/規(guī)模的任何具體限制。制造大內存芯片已經足夠容易了,所以我們可以讓代碼越來越大。
當然,設計是瓶頸。硬件設計非常具有挑戰(zhàn)性,需要復雜的電子設計自動化(EDA)。嵌入式開發(fā)中軟件開發(fā)更難一些。但它需要的不僅僅是工具。
在生活的幾乎所有方面(包括嵌入式軟件),基本上有三種方法來應對更大的挑戰(zhàn):
1.更加努力地工作(即更多的人力)
2.工作更長時間
3.更聰明地工作
有時第1種和第2種可以互換。例如,在建筑工程中,更多的勞動力可能會加快工作進度。但是,如果僅僅指派更多的人員來完成這項工作,軟件開發(fā)的回報就會迅速減少。這在很大程度上是因為代碼不同部分之間的相互關系,以及開發(fā)人員進行通信的相應需求。他們最終花在溝通上的時間超過了編碼。在某種程度上,開發(fā)團隊的智能擴展可以帶來好處。這需要確定具體的專門知識要求,并相應地指派工作人員。這與嵌入式開發(fā)尤其相關,其中的專業(yè)領域可能是:應用程序級代碼、驅動程序開發(fā)、操作系統(tǒng)配置、網絡、UI設計等。
更聰明地工作聽起來像是一家公司的口號,但意思是讓開發(fā)人員能夠在給定的時間段內創(chuàng)建和調試更多的功能。大體上,有兩種方法:
更高抽象級別的代碼
重用現(xiàn)有代碼(并使代碼可重用)
更高層次的抽象意味著遠離傳統(tǒng)語言,如C語言,并接受其他范例。UML是一種可能性。可重用代碼在很大程度上是面向對象編程(OOP)技術的領域。可以創(chuàng)建可重用的對象,OOP支持專業(yè)知識的封裝,這對于嵌入式開發(fā)來說也是特別有用的。