20年寶貴經(jīng)驗:如何從零開(kāi)始開(kāi)發(fā)一款嵌入式產(chǎn)品
首先,如果你有幸看到這篇文章,千萬(wàn)不要試圖在2個(gè)小時(shí)內閱讀完,就算你2個(gè)小時(shí)閱讀完,我相信你也不會(huì )理解里面講解的精華之處,我相信,你應該將此文章,慢慢品嘗,這絕對是一篇需要品嘗2~3天,再結合自己過(guò)往的經(jīng)驗,加上自己的思考,我相信會(huì )對你不僅僅是技術(shù)能力,甚至包括整體的思維方式都會(huì )有一個(gè)非常大的提高。
我寫(xiě)這篇文章的目的,是用本人20年的嵌入式經(jīng)驗呈現給大家一副完整的產(chǎn)品,項目開(kāi)發(fā)藍圖,用本人多年的經(jīng)歷總結了一些教訓無(wú)私地分享給各位,希望各位今后能站在本人的肩膀之上,少走彎路,多為公司,為個(gè)人多做貢獻,那我的愿望就達到了,也同時(shí)希望能看到大家反饋和回復,留個(gè)腳印,留下你的見(jiàn)解和智慧,為后人乘涼打點(diǎn)基礎,先在這謝謝各位了。
那么由此開(kāi)始我們充滿(mǎn)知識的旅程吧,最重要的一點(diǎn),就是在一個(gè)產(chǎn)品或項目的開(kāi)發(fā)過(guò)程中,如果沒(méi)有明確的目標,那么成功將無(wú)從談起,做任何事的第一步必須明確目標。
與日常生活中的大多數事務(wù)一樣,設計一個(gè)嵌入式產(chǎn)品的過(guò)程也必須從確定目標開(kāi)始,對生產(chǎn)的產(chǎn)品進(jìn)行明確定義。
對產(chǎn)品進(jìn)行定義主要是對產(chǎn)品是什么和能有什么功能進(jìn)行描述,其次是在我們的整個(gè)開(kāi)發(fā)過(guò)程中,應該要撰寫(xiě)一些開(kāi)發(fā)文檔,大概的框架的如下:
1)產(chǎn)品需求文檔:描述產(chǎn)品的特性
2)功能需求文檔:描述產(chǎn)品必須具備的功能
3)工程說(shuō)明文檔:描述系統實(shí)現的方法和滿(mǎn)足需求的手段
4)硬件說(shuō)明文檔:對有關(guān)硬件進(jìn)行描述
5)軟件或固件說(shuō)明文檔:描述特定處理器下設計微程序以及固件的方法
6)測試說(shuō)明文檔:描述必須測試的項目和驗證系統正常運行的方法
1.需求定義
需求定義用來(lái)描述產(chǎn)品的基本功能,對于公司來(lái)說(shuō),需求一般由該公司的市場(chǎng)銷(xiāo)售部門(mén)或該公司的主要客戶(hù)來(lái)制定;而對小公司或愛(ài)好者(就像armjishu.com里的愛(ài)好者一樣),技術(shù)人員可以自己負責定義需求,并撰寫(xiě)成文檔。
通常需求定義是圍繞以下幾個(gè)因素而來(lái):
1)系統的用途(定義需要系統實(shí)現的各種功能)
2)實(shí)際輸入輸出是何種方式實(shí)現的(為元器件的選型做參考)
3)系統是否需要操作界面(涉及軟件層操作系統的選型)其實(shí)對小型的嵌入式產(chǎn)品來(lái)說(shuō),定義需求是非常關(guān)鍵的,因為需求清楚了,就可以避免后續開(kāi)發(fā)過(guò)程中出現的諸如隨機存儲器(RAM)容量不足或所選的CPU速度不能滿(mǎn)足處理的需要等一系列問(wèn)題。
下面舉個(gè)簡(jiǎn)單的實(shí)際例子,供大家來(lái)參考:
系統描述:用于從化溫泉的水泵換水系統 電源輸入:使用來(lái)自于變壓器的9V~12V直流電 水泵功率:375W
1)使用單相交流電機,由機械電氣進(jìn)行控制
2)如果溫泉池處于低水位,則輸入開(kāi)關(guān)閉合信號,以禁止水泵繼續運行
3)用戶(hù)可以自由設置水泵運行或關(guān)閉的時(shí)間長(cháng)度
4)除了自動(dòng)設置控制外,還需要提供一種人工裝置來(lái)允許維護人員靈活控制水泵進(jìn)行維修
5)水泵開(kāi)啟/關(guān)閉/人工干預的時(shí)間可以30分鐘為單位,在30分鐘到23小時(shí)的范圍內進(jìn)行調節
6)顯示設備可以指示水泵的開(kāi)關(guān)狀態(tài),剩余時(shí)間,以及水泵是否處于人工干預模式
7)具備監視低水位的功能,并顯示在屏幕上
如果需要商用,那么除了上面給出的功能要求外,其設計文檔中還要包括電磁干擾(EMI)和電磁兼容性(EMC)認證、安全認證以及使用環(huán)境(包括環(huán)境溫度、濕度、鹽霧腐蝕等)等方面的需求。
實(shí)際上,以上的需求確定之后,接下來(lái)就是要考慮選擇一款合適的CPU來(lái)滿(mǎn)足和實(shí)現系統的功能,那么我們就要將上述7點(diǎn)用戶(hù)能夠理解的需求轉化成我們專(zhuān)業(yè)領(lǐng)域的需求,轉化如下,大家可以參考一下:
a.處理或更新輸入輸出信號的速率究竟需要多快?
解釋?zhuān)耗壳扒度胧教幚砥鞯闹黝l一般都在幾十兆到幾百兆不等,單片機的主頻一般是幾十兆,ARM處理器可以到幾百兆;我們主要看這個(gè)產(chǎn)品是否需要對大量數據進(jìn)行處理,或是否需要對緩沖區進(jìn)行頻繁操作,是否有類(lèi)似的占用CPU資料的工作要做,這就決定我們要選擇一款合適的處理器來(lái)讓該產(chǎn)品得到最佳的性能。
b.是否可使用單片集成電路(專(zhuān)用IC)或FPGA來(lái)完成數據處理?
解釋?zhuān)喝绻梢缘脑?huà),就不一定要選擇處理器來(lái)做,用這些專(zhuān)業(yè)芯片就能替代
c.系統是否有大量的用戶(hù)輸入輸出操作(如對開(kāi)關(guān)和顯示設備進(jìn)行頻繁操作)?
解釋?zhuān)喝绻械脑?huà),要在處理器選型的時(shí)候考慮這些因素,選擇一款能夠滿(mǎn)足以上要求的CPU
d.系統與其他外部設備之間需要使用何種接口?
解釋?zhuān)哼@也是需要評估處理器的一個(gè)關(guān)鍵問(wèn)題,選擇具備這些接口功能的處理器會(huì )方便于我們的電路設計以及軟件編程
e.設計完成后是否有可能需要進(jìn)行改動(dòng),或在設計過(guò)程中系統需求是否可能出現變化?我們的設計是否能適應系統需求的變化?
解釋:要避免選擇的處理器剛好滿(mǎn)足當前要求,這樣當以后事務(wù)要求逐漸提高,處理器性能如果還有一定空間的話(huà),那么就可以重用目前的產(chǎn)品;第二個(gè)就是要選擇不會(huì )即將停產(chǎn)的芯片,很多處理器用得很廣泛,可以借鑒的資料也很多,但是很可能這款芯片已經(jīng)在市場(chǎng)上流行很長(cháng)時(shí)間了,芯片廠(chǎng)商已經(jīng)推出更新?lián)Q代的替代品了,如果你選擇了這款芯片,很可能1,2年后就買(mǎi)不到這款處理器芯片了,導致不得不重新選擇新的處理器,重新設計產(chǎn)品,這樣的既耗費時(shí)間,金錢(qián),更消耗人力,延誤市場(chǎng)的戰機。
2.處理器的選擇
2.1.需要使用的I/O管腳數量
多數處理器都是使用內存和外部管腳來(lái)控制輸入輸出設備的,通常處理器都會(huì )有內置ROM和RAM的,如果內置的內存就已經(jīng)滿(mǎn)足需要,那么處理器就可以節省產(chǎn)生引用外部存儲器信號的引腳,這樣處理器可為輸入輸出提供較多的設備管腳(某些處理器支持外部RAM或ROM的使用,但對外部存儲器進(jìn)行訪(fǎng)問(wèn)時(shí),處理器一般需要占用8條到10條I/O管腳)。
還有,有些處理器帶有專(zhuān)用的內部定時(shí)時(shí)鐘,這類(lèi)時(shí)鐘也需要使用一個(gè)端口管腳來(lái)實(shí)現某些定時(shí)功能;某些處理器中還具有漏極輸出和高電流輸出能力,可以方便的直接驅動(dòng)繼電器或電磁鐵線(xiàn)圈,而不再需要額外驅動(dòng)硬件的支持。
當對處理器I/O管腳進(jìn)行計數時(shí),我們一定要把使用處理器內部功能(如串行接口和定時(shí)器等)時(shí)限制使用的某些管腳考慮在內。
2.2.需要使用的接口數量
嵌入式處理器的主要功能是與應用環(huán)境中的硬件進(jìn)行交互操作,這不僅需要外部硬件對接口具有實(shí)時(shí)處理能力,而且還要求處理器必須以足夠快的速度對接口數據進(jìn)行有效處理。
舉例來(lái)說(shuō),AT91RM9200是ATMEL公司出品的一款工業(yè)級ARM9微處理器,它基于A(yíng)RM920T核心,處理速度可達200MIPS,同時(shí)處理器內部配置了USB、Ethernet 、支持RS485的紅外串口、IIC、SPI、SSC等輸出接口,其目的是更方便的利用這些接口開(kāi)發(fā)出嵌入式產(chǎn)品。
需要注意的是,由于許多處理器具有的局限性沒(méi)有在處理器技術(shù)資料中給予足夠的說(shuō)明,因此一定要仔細閱讀處理器的指標說(shuō)明。
例如,在閱讀資料的過(guò)程中發(fā)現,該資料可能會(huì )說(shuō)明其串行接口可以在最高波特率下工作,但仔細研究該處理器的指標數據時(shí),可能會(huì )發(fā)現并非該串口接口的所有操作模式都可以在最大波特率下運行。
深入了解并明確接口要求的方法:可以自己動(dòng)手編寫(xiě)一些程序來(lái)對接口進(jìn)行實(shí)際測試,以確認某種處理器是否可以滿(mǎn)足應用的要求;因為,確認某個(gè)處理器是否可以滿(mǎn)足接口要求并非是一件簡(jiǎn)單的任務(wù)。
2.3.需要使用的內存容量
決定內存容量的大小是嵌入式產(chǎn)品設計過(guò)程中的一個(gè)基本步驟,如果對所需內存容量估計過(guò)高,那么我們就有可能會(huì )選擇成本較高的解決方案;反之,如果低估了所需內存容量,就有可能因系統需要重新設計而導致項目不能按時(shí)完工。
a.RAM和ROM的區別:
存儲器分為隨機存儲器(RAM)和只讀存儲器(ROM)兩種。其中ROM通常用來(lái)固化存儲一些生產(chǎn)廠(chǎng)家寫(xiě)入的程序或數據,用于啟動(dòng)電腦和控制電腦的工作方式。
而RAM則用來(lái)存取各種動(dòng)態(tài)的輸入輸出數據、中間計算結果以及與外部存儲器交換的數據和暫存數據。設備斷電后,RAM中存儲的數據就會(huì )丟失。
b.隨機存儲器(RAM)的選擇:
RAM容量的預測是比較直觀(guān)的,我們只需把所有變量數目與所有內部緩沖區的容量以及先入先出(FIFO)隊列長(cháng)度和堆棧長(cháng)度直接相加,就能得到所需RAM容量的總數。
如果所需內存容量超出這類(lèi)處理器的尋址范圍,那么只能通過(guò)增加外部RAM來(lái)滿(mǎn)足需求;然而,增加外部RAM的同時(shí)將會(huì )占用一定數量的I/O管腳來(lái)對擴展內存進(jìn)行尋址,這種擴展往往會(huì )影響到處理器來(lái)實(shí)現應用的初衷。
需要注意的一個(gè)問(wèn)題是,某些微處理器限制RAM的使用,這種限制的目的是為了借用部分內存存儲器作為內部寄存器組使用。
除了以上因素外,所使用的開(kāi)發(fā)語(yǔ)言也對所需RAM容量有一定的影響,某些效率較低的編譯程序可能會(huì )占用大量寶貴的RAM空間。
c.只讀存儲器(ROM)的選擇:
系統所需ROM的大小應該是系統程序代碼與所有基于ROM的數據表容量之和。
預測所需ROM空間容量比較困難的部分是預測程序代碼的長(cháng)度,解決這類(lèi)問(wèn)題的方法只能是隨著(zhù)經(jīng)驗的逐步積累來(lái)提高預測精度。
然而,最重要的并不是精確計算程序的代碼長(cháng)度,而是要清楚地估算代碼長(cháng)度的上限。根據經(jīng)驗,如果80%的ROM空間被代碼占用的話(huà),那么就太擁擠了,除非能確保系統需求不會(huì )有任何變化,否則至少要為可能發(fā)生的變化保留足夠的備用ROM空間。
在多數情況下,我們可以試著(zhù)在ROM中寫(xiě)入一部分程序代碼,以便觀(guān)察代碼占用空間的情況,對于帶有內部ROM的微處理器系統來(lái)說(shuō),系統程序都只能占用有限的程序存儲器空間。
d.經(jīng)驗之談:
ROM與RAM使用情況相類(lèi)似,程序代碼長(cháng)度與所選用的開(kāi)發(fā)語(yǔ)言有關(guān)。
舉例來(lái)說(shuō),使用匯編語(yǔ)言編制的程序要比使用C語(yǔ)言編制的程序占用少得多的空間。
對于追求低成本的小型系統來(lái)說(shuō),一般不提倡使用高級程序設計語(yǔ)言;這是因為雖然高級語(yǔ)言在使用、調試以及維護方面來(lái)得比較容易,但同時(shí)這類(lèi)語(yǔ)言需要占用更多的內存空間和大量的處理器時(shí)鐘周期。
如果開(kāi)發(fā)語(yǔ)言選擇不當,其后果可能是把一個(gè)簡(jiǎn)單、低成本的單片機系統變?yōu)橐粋€(gè)需要使用配置若干兆字節RAM空間的64位嵌入式處理器系統。
2.4.需要使用的中斷數量
中斷的主要用途是向中央處理器通報當前發(fā)生的某類(lèi)特殊事件,這類(lèi)事件包括諸如定時(shí)器超時(shí)事件、硬件引發(fā)的事件等。
需要強調的是,多數系統設計師經(jīng)常過(guò)多地使用中斷功能,實(shí)際上,中斷的主要作用只是中斷現行程序的執行,中斷最適用于必須要求中央處理器立即提供服務(wù)的事件。
在需要設計和使用中斷的情況下,一定要首先確認實(shí)際需要的中斷數量,然后必須考慮到系統內部占用的中斷資源,如果需要使用的中斷資源超出了處理器可以接收的中斷數量,我們就應借助于某些特殊手段來(lái)減少所需中斷信號的數量。
2.5.實(shí)時(shí)處理方面的考慮
實(shí)時(shí)處理是一個(gè)涉及范圍很廣的題目,其主要內容與系統的處理速度有密切聯(lián)系,實(shí)時(shí)事件是嵌入式微處理器需要關(guān)注的主要任務(wù)。
例如:處理器跟串口進(jìn)行通信時(shí),通常通過(guò)上層軟件(為了保證實(shí)時(shí)性,進(jìn)行任務(wù)切換的時(shí)間足夠短),然后再占用處理器去執行從串口拿數據的任務(wù),并且要保證處理器的速率比串口速率快,那么處理器可以以最快的速度反應并處理串口的相關(guān)的任務(wù),這樣就可以達到最大的實(shí)時(shí)性;
另一方面,如果處理器本身就內置了串口控制器、或DMA、或LCD的控制器等,那么它就可以保證直接使用這些處理器內置的接口去控制串口、液晶屏等對象,以達到最大的實(shí)時(shí)性能。
2.6.該廠(chǎng)商是否提供好的開(kāi)發(fā)工具和環(huán)境
選擇一款新的處理器,很可能就要使用一個(gè)新的開(kāi)發(fā)工具和開(kāi)發(fā)環(huán)境,包括軟件的編譯環(huán)境等;對于開(kāi)發(fā)日程安排比較緊張的項目來(lái)說(shuō),開(kāi)發(fā)人員往往無(wú)法抽出專(zhuān)門(mén)的時(shí)間來(lái)研究,熟悉新的開(kāi)發(fā)工具,從而也無(wú)法全面掌握開(kāi)發(fā)工具的使用技巧。
并且,有的開(kāi)發(fā)工具價(jià)格也比較昂貴,而且很可能只能從制造商那里購買(mǎi),還有仿真工具也是需要付費的,這些對我們在選擇一款處理器的時(shí)候,是都應該考慮進(jìn)去的成本因素。
2.7.處理器速度方面的考慮
主要考慮幾個(gè)細節問(wèn)題:
1)處理器速度與處理器時(shí)鐘之間的關(guān)系
例:?jiǎn)纹瑱C8031為例,由該處理器可以適應12MHz頻率的輸入時(shí)鐘,因此就可以認為它是一個(gè)速度為12MHz的處理器了嗎?
不是,實(shí)際上,由于該處理器內部邏輯電路執行每條指令需要多種不同頻率的時(shí)鐘脈沖,因此該處理器內部時(shí)鐘電路要對輸入的12MHz時(shí)鐘12分頻處理;最終為處理器提供的只是 1MHz主頻。
有的時(shí)候,80MHz主頻的處理器(80MHz輸入時(shí)鐘,80MHz執行速度)要比200MHz主頻的處理器(200MHz輸入時(shí)鐘,50MHz執行速度)執行速度要快得多。
2)處理器指令系統
如果不需要執行復雜數學(xué)運算的應用,那么RISC指令集的處理器要快;如果執行比較復雜的操作,則CISC指令集的處理器速度要更快。
3)芯片結構體系
現在有的芯片是將多個(gè)不同功能的核封裝到一個(gè)芯片IC中,定制某種特定的功能,比如DSP,其中包括用于實(shí)現數字解碼、乘法運算的硬件乘法器和移相器等;然而,這類(lèi)處理器也由其自身局限,往往在執行某些普通操作之前必須要使用額外的指令來(lái)把RAM中的數據放入內部寄存器,相比之下,一般處理器只允許對 RAM中的數據進(jìn)行直接訪(fǎng)問(wèn)。
2.8.只讀存儲器(ROM)的選擇
多數工程項目在其開(kāi)發(fā)階段一般使用可擦寫(xiě)可編程只讀存儲器(EPROM)或快速存儲器(Flash Memory);這類(lèi)可擦寫(xiě)可重復寫(xiě)入存儲器的主要優(yōu)點(diǎn)是可多次使用。
一旦產(chǎn)品研制完畢,就可以用一次寫(xiě)入設備(OTP)來(lái)取代EPROM存儲器,一次性寫(xiě)入器件的外觀(guān)與封裝幾乎與EPROM完全一樣,惟一不同之處就是其表面沒(méi)有擦出窗口,并且價(jià)格要比EPROM低很多。
但是,另外一種情況,如果該產(chǎn)品今后需要升級固件,或在線(xiàn)編程,那么我們還是應該選擇可擦寫(xiě)可編程的存儲器。
還有一種是非易失的存儲器,例如制造一臺電視機,就有可能需要該設備具有記憶上次觀(guān)看最后一個(gè)頻道的功能,即使在切斷電源后,該頻道信息也不會(huì )丟失。
總結:所以,根據不同的產(chǎn)品選擇不同的存儲器也是一門(mén)很講究的學(xué)問(wèn)。
2.9.電源的要求
在某些設計中方案中,電源根本不存在問(wèn)題,對電源唯一的要求就是可以為電路正常供電;實(shí)際上,選擇電源主要要考慮三個(gè)方面的問(wèn)題:
1)要注意設計方案中是否對電源的供電方式有所限制,例如,是否像大多數家用電器那樣需要使用屋內墻上的電源插座供電,或是是使用USB接口供電
2)看系統是否需要使用電池供電方式,如果這樣,我們就要考慮選擇那種對驅動(dòng)電流要求不高的處理器,然后再為其選擇合適的電池。
3)休眠電流:許多微處理器都支持低功率運行模式,在這種模式下,系統的CPU處理器將處于休眠狀態(tài),同時(shí)所有外部設備的電源供電都被暫時(shí)切斷,以便減少系統的電能消耗;某些微處理器在這種方式下需要的維持電流極小,但也有一些微處理器在這種方式下并不能節省多少功率;不管怎樣,我們都要對系統在節點(diǎn)模式下的工作時(shí)間有一個(gè)估測,以便對具體情況選擇使用的電池。
總之,無(wú)論哪種情況,我們都要對系統需要的供電總功率做到心中有數。
2.10.設備工作環(huán)境的要求
環(huán)境要求主要內容是考慮溫度,濕度等;如果系統必須在溫度范圍較大的環(huán)境下運行,諸如用于軍事設備或汽車(chē)的控制系統,那么處理器可選擇的范圍就要小得多;
并且由于大范圍溫度變化的設備通常比較昂貴,因此在設計過(guò)程中就不能再根據一般工業(yè)級器件的價(jià)格來(lái)制定預算。
2.11.使用周期成本
如果我們的產(chǎn)品是mp3,在一般情況下,可以不必考慮在用戶(hù)現場(chǎng)對mp3程序進(jìn)行修改的問(wèn)題,也不用為是否可以得到設備備件而著(zhù)急,這是因為mp3是一種消費產(chǎn)品;
換句話(huà)說(shuō),如果我們的產(chǎn)品是價(jià)值幾萬(wàn)塊的工業(yè)設備并且需要常年不斷地運行,那么我們在產(chǎn)品設計過(guò)程中就必須從長(cháng)計議了:
a.首先,我們需要選擇一種處理器或存儲體系結構都可以升級的器件
b.考慮到程序升級的可能,我們還要選擇較大容量的內存
c.最后要注意的則是所選處理器是否可以長(cháng)期供貨,這一點(diǎn)的重要性遠遠大于處理器的價(jià)格
除了上面的考慮之外,使用周期成本也是在設計之初要考慮的因素??偟膩?lái)說(shuō),生產(chǎn)的部件越多,則可以接受的前期開(kāi)發(fā)成本也就越大。如果產(chǎn)品是mp3,我們可能會(huì )選擇一個(gè)低價(jià)微處理器,同時(shí)投入一大筆錢(qián)來(lái)開(kāi)發(fā)控制mp3的軟件。
但如果我們的產(chǎn)品是價(jià)格昂貴的工業(yè)用設備,那么在產(chǎn)品的使用期內,該設備的銷(xiāo)售量將只有幾百臺,毫無(wú)疑問(wèn),開(kāi)發(fā)這種產(chǎn)品最重要的就是降低開(kāi)發(fā)成本(降低開(kāi)發(fā)成本而不是硬件成本?。。。?;除此之外,工業(yè)產(chǎn)品的成本也不像家用電器或消費電子產(chǎn)品那么敏感。綜上所述,開(kāi)發(fā)工業(yè)產(chǎn)品當然要選擇一種便于進(jìn)行開(kāi)發(fā)并且有助于縮短開(kāi)發(fā)過(guò)程的處理器。
2.12.處理器相關(guān)資料是否豐富
如果該款處理器在市場(chǎng)上已經(jīng)用得很廣了,那么我們可以獲取更多的相關(guān)資料,觀(guān)察人家的產(chǎn)品是如何使用處理器的,也能在網(wǎng)絡(luò )上找到不少的相關(guān)的設計資料以及相關(guān)技術(shù)主題,這樣就進(jìn)一步降低了技術(shù)門(mén)檻,確保了使用該處理器做產(chǎn)品可行性,減低了風(fēng)險;
反之,如果是廠(chǎng)商全新推出的處理器,因為市場(chǎng)上還沒(méi)有可以借鑒的產(chǎn)品,我們就只能從全英文的芯片手冊開(kāi)始閱讀,了解這款芯片,這樣開(kāi)發(fā)周期不僅變長(cháng),而且不可預知的風(fēng)險也很大。
3.開(kāi)發(fā)成本的預測和估計
大多數項目或產(chǎn)品都有專(zhuān)人負責預測整個(gè)過(guò)程的開(kāi)發(fā)成本,對于任何項目來(lái)說(shuō),其開(kāi)發(fā)成本主要包括人力和材料開(kāi)銷(xiāo)。
預測開(kāi)發(fā)成本在很大程度上需要根據經(jīng)驗,這也是為什么大型公司一般指定有經(jīng)驗的高級工程師來(lái)完成這一任務(wù)的原因,除了人力和材料的開(kāi)銷(xiāo)之外,總結下來(lái),還有以下的開(kāi)銷(xiāo):
1)人力成本(開(kāi)發(fā)人員、管理人員、銷(xiāo)售人員、其他行政等輔助人員)的開(kāi)銷(xiāo)
2)材料(硬件物料和損耗,有時(shí)候需要投幾次PCB版才把產(chǎn)品穩定下來(lái))的開(kāi)銷(xiāo)
3)開(kāi)發(fā)系統和開(kāi)發(fā)工具軟件的開(kāi)銷(xiāo)
4)硬件工具的開(kāi)銷(xiāo)(例如示波器、仿真器等)
對于整個(gè)項目來(lái)說(shuō),上述的開(kāi)銷(xiāo)將直接可能導致產(chǎn)品成本增加,其中人力成本最為關(guān)鍵,尤其是在中國,呵呵。
4.產(chǎn)品開(kāi)發(fā)設計文檔(需要包括硬件和軟件兩個(gè)方面)
4.1 硬件文檔撰寫(xiě)思路
1)首先是需求定義或產(chǎn)品規格:
如果這些是產(chǎn)品最終目標的話(huà),那么產(chǎn)品對硬件和軟件的要求就是技術(shù)方案的最終目標;對硬件和軟件的要求是從定義用戶(hù)界面和系統功能開(kāi)始的。
2)其次,根據需求,系統整體定義文檔中給出硬件接口的具體定義:
定義硬件最有效的方法是從需求開(kāi)始描述,由于硬件必須支持系統定義的所有功能,因此硬件定義是與系統說(shuō)明不可分割的;
例如,我們設計一個(gè)定時(shí)器(事先需求說(shuō)明定時(shí)器不能與個(gè)人電腦連接,故無(wú)法使用CRT顯示時(shí)間),我們只有兩種選擇:一種是使用發(fā)光二極管(LED),另一種是使用液晶顯示器件(LCD);盡管LCD的顯示效果比較好,但考慮到定時(shí)器要常年位于戶(hù)外,并且早期LCD顯示器不能在低溫下工作,最終還是選擇 LED設備(這整個(gè)過(guò)程描述了我們硬件選型時(shí)的一個(gè)思路,這個(gè)是密切跟需求掛鉤的)
3)一旦完成了系統整體說(shuō)明文檔,就開(kāi)始進(jìn)行系統設計:
首先要對硬件說(shuō)明的內容進(jìn)行細化,包括添加能讓工程師理解的設計意圖,以及軟件工程師圍繞硬件進(jìn)行程序設計時(shí)需要使用的硬件信息等。
完成硬件電路板說(shuō)明文檔后,我們還要在該文檔中增加一個(gè)用來(lái)描述系統的原始要求的前言部分,包括說(shuō)明方案的設計思路和方法,除此之外,還要附上軟件工程師用來(lái)對硬件進(jìn)行控制所需的各類(lèi)信息,這類(lèi)信息主要包括如下內容(軟件工程所需信息):
內存和I/O端口地址(如果需要,還可以提供內存映射圖)
可用內存容量
狀態(tài)寄存器每一位的定義
每個(gè)端口管腳的用途
外部設備的驅動(dòng)方法(例如,說(shuō)明輸入定時(shí)器電路的時(shí)鐘頻率等)
其他有關(guān)軟件人員設計程序需要了解的信息
對于比較復雜的系統來(lái)說(shuō),硬件文檔中經(jīng)常使用兩個(gè)獨立的部分來(lái)進(jìn)行說(shuō)明;其第一部分用來(lái)描述硬件指標和工作原理,第二部分則主要為軟件人員提供程序設計需要的信息。
4.2 軟件文檔撰寫(xiě)思路
1、軟件文檔與硬件文檔的組織方法類(lèi)似,軟件要求文檔的主要內容則是定義軟件要實(shí)現的功能;一種是在簡(jiǎn)單項目設計過(guò)程中,軟件定義也可以只對一種電路板使用的軟件給予描述;對較復雜的項目來(lái)說(shuō),由于參與這種項目的軟件人員分別負責設計驅動(dòng)不同硬件部分的代碼(同一電路板),因此每個(gè)軟件人員可能會(huì )為自己的設計代碼指定不同的定義,這類(lèi)軟件說(shuō)明需要提供下列的內容:
(1)論述包括需求定義、工程指標、硬件參數等實(shí)施項目需要的內容
(2)說(shuō)明軟件之間、處理器之間或處理器與其內部器件之間使用的通信協(xié)議:其內容應包括對緩沖區接口機制、命令/應答協(xié)議、信號控制等協(xié)議的具體說(shuō)明。
(3)借助流程圖、偽代碼或者其他可能的方法來(lái)描述軟件的實(shí)現方法和過(guò)程
2、軟件與硬件所考慮的不同之處(此經(jīng)驗方便技術(shù)總監或其他相關(guān)管理者參考,因為無(wú)論是多高深的技術(shù)管理者,要么是硬件出身,要么是軟件出身,要么就是非技術(shù)出身)
a. 軟件的靈活性遠遠大于硬件,要讓軟件人員搞清楚某個(gè)軟件的內部格式是非常困難的任務(wù),解決的辦法:詳細定義其他程序員需要了解的編程接口具體內容,以及其他工程人員在實(shí)施開(kāi)發(fā)項目過(guò)程中需要使用的技術(shù)細節信息。
b. 軟件工程師只有在收到硬件說(shuō)明文檔后,才有可能知道如何對系統硬件進(jìn)行操作;而硬件人員一般不需要了解軟件程序的技術(shù)細節。
c. 由于軟件易于更改,因此程序內容經(jīng)常會(huì )按銷(xiāo)售人員提供的要求發(fā)生變更,在某些情況下,軟件文檔的內容無(wú)法及時(shí)反映程序的最新變化。
d. 軟件經(jīng)常是工程項目最后完成的部分,因此其文檔也經(jīng)常因時(shí)間不夠而欠缺完整。實(shí)際上,軟件文檔是否詳細、完整,在某種程度上是與公司或客戶(hù)的要求有關(guān)的。例如,軍事或國家工程一般要求開(kāi)發(fā)商就其所有軟件實(shí)現的功能提供全面詳細的文檔
e. 有個(gè)潛規則,對軟件的要求越復雜,則需求的正確可能性就越小,這個(gè)是經(jīng)驗之談了,我們需要把準需求這個(gè)準繩來(lái)做文章,而不是陷入個(gè)人主義以及對軟件要求而憑空發(fā)揮自己不切實(shí)際的想象。
f. 我們可以先硬件設計,接著(zhù)圍繞該硬件編制軟件。雖然實(shí)際系統的實(shí)現過(guò)程可能是軟硬件并行開(kāi)發(fā),但軟件人員基本上也是圍繞著(zhù)已經(jīng)實(shí)現的硬件來(lái)進(jìn)行程序設計的;對于更為復雜的系統來(lái)說(shuō),開(kāi)發(fā)過(guò)程可能會(huì )出現重復。
例如,某個(gè)項目的硬件工程師和軟件工程師可能會(huì )坐下來(lái)開(kāi)會(huì ),共同決定使用哪種硬件來(lái)實(shí)現某種功能;軟件人員可能提出需要為數據緩沖區口沖內存容量,也可能要求提供某種外部設備接口,以便充分利用現成接口程序提供的各種驅動(dòng)代碼。
總的來(lái)說(shuō),必須在提高軟件開(kāi)發(fā)效率與硬件系統的復雜性與成本之間進(jìn)行權衡.
5.嵌入式高手對技術(shù)的理解(含辛茹苦這么多年的精華體驗)
有很多人認為:嵌入式系統性能的核心因素是軟件功能,其實(shí),如果按照這種邏輯,系統設計中存在的問(wèn)題就應由軟件人員來(lái)負責;其實(shí)這個(gè)觀(guān)點(diǎn)實(shí)際上反映了設計嵌入式產(chǎn)品時(shí)如何考慮劃分硬件和軟件各自應實(shí)現的功能,也就是這個(gè)功能是軟件實(shí)現,還是考慮用硬件來(lái)實(shí)現(硬件實(shí)現:需要購買(mǎi)處理該功能的硬件芯片,從而增加成本;軟件實(shí)現:無(wú)需增加硬件成本,但會(huì )占用處理器以及內存的資源)。
例如:我們在這里設計的基于A(yíng)RM的mp3嵌入式產(chǎn)品,我們可以使用專(zhuān)業(yè)的解碼芯片來(lái)負責mp3音樂(lè )文件的解碼和播放功能,也可以使用另一種方法來(lái)解碼 mp3語(yǔ)音文件,讓ARM處理器利用軟件控制寄存器來(lái)驅動(dòng)耳機或音響,處理器通過(guò)對mp3語(yǔ)音文件解碼之后再將解碼后的數據流按照一定協(xié)議格式送給音頻輸出的硬件接口進(jìn)行播放。
優(yōu)點(diǎn):這種方案在硬件方面節省了一個(gè)器件,降低了成本,并且該功能還方便調試(因為是軟件實(shí)現的)
缺點(diǎn):從另一個(gè)角度來(lái)看,雖然節省了一塊語(yǔ)音解碼芯片,但同時(shí)要在三個(gè)方面增加成本。
首先,要在程序中增加語(yǔ)音協(xié)議解碼的代碼;
其次,可能要把增加ROM來(lái)存放語(yǔ)音解碼的協(xié)議,這樣可以增加速度;
最后,運行該程序將占用處理器的時(shí)間和資源。
其實(shí),話(huà)又說(shuō)回來(lái),對于本案例來(lái)說(shuō),上述成本的節約并不會(huì )引發(fā)任何問(wèn)題,包括驅動(dòng)程序增加也只需少量的,我們討論這個(gè)mp3產(chǎn)品的案例的目的在于說(shuō)明如何對軟件硬件的功能進(jìn)行合理劃分。
總的來(lái)說(shuō),交給軟件實(shí)現的功能越多,則產(chǎn)品的成本就越低,當然這就要處理器必須有足夠的處理速度和內存空間來(lái)實(shí)現設計指定的功能;常言說(shuō)得好,天下沒(méi)有免費的午餐;把功能分配給軟件來(lái)實(shí)現,會(huì )增加軟件的復雜性、開(kāi)發(fā)時(shí)間、以及程序的調試時(shí)間;然而,隨著(zhù)處理器的處理能力的不斷提高,可以預見(jiàn),越來(lái)越多的功能將會(huì )由軟件來(lái)實(shí)現。
雖然在軟件中實(shí)現各種功能會(huì )增加開(kāi)發(fā)成本,但如果把功能移植到硬件中實(shí)現,則會(huì )增加產(chǎn)品的成本,這類(lèi)開(kāi)銷(xiāo)是在構造每個(gè)系統組件時(shí)不可避免的。
在低成本設計方案中,增加任何額外的硬件都會(huì )對產(chǎn)品成本產(chǎn)生顯著(zhù)的影響,因此軟硬件功能劃分就是一個(gè)決定產(chǎn)品成本的大問(wèn)題。在諸如大眾消費產(chǎn)品這一類(lèi)對成本非常敏感的設計方案中,一般都會(huì )把無(wú)法通過(guò)軟件實(shí)現的功能排除在外的。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。
移動(dòng)電源相關(guān)文章:移動(dòng)電源是什么
萬(wàn)用表相關(guān)文章:萬(wàn)用表怎么用
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
電容相關(guān)文章:電容原理 電容傳感器相關(guān)文章:電容傳感器原理 網(wǎng)線(xiàn)測試儀相關(guān)文章:網(wǎng)線(xiàn)測試儀原理 熱成像儀相關(guān)文章:熱成像儀原理