都說嵌入式軟硬結合,你知道該怎麼作嗎?

都說嵌入式軟硬結合,你知道該怎麼作嗎?

嵌入式硬件工程師的工做是爲軟件工程師搭建好硬件平臺和必要的開發環境。 嵌入式軟件工程師則是根據用戶的須要完善產品的軟件功能。硬件工程師就像是設計師和建築師,負責整個建築的設計和建設。軟件工程師則是負責房間的裝修,錦上添花。然而硬件設計須要必定的設計範例,這點對於軟件設計卻不那麼適用。前端

嵌入式系統設計不只要了解硬件還應該瞭解它與軟件之間的相互影響和做用。目前國內一個廣泛被認同的定義是:以應用爲中心、以計算機技術爲基礎,軟件硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。形形色色的「高端產品」都離不開嵌入式技術,離不開傳感器技術,離不開軟件程序。linux

大多數嵌入式體系的硬件平臺,包括兩部門:程序員

一、以通用途理器爲中心的協議處理模塊,用於網絡控制協議的處理;算法

二、以數字信號處理器(DSP)爲中心的信號處理模塊,用於調製、解諧和數/模信號轉換。編程

從運行平臺來分,嵌入式軟件能夠分爲:網絡

一、運行在開發平臺上的軟件:設計、開發、測試東西等架構

二、運行在嵌入式體系上的軟件:嵌入式操做體系、應用程序、驅動程序及部門開發東西編程語言

同專業的人士從各自不一樣的角度思索和定位嵌入式體系,以是目前對嵌入式體系的定義很是多。ide

嵌入式體系根據目前業界和學術界對嵌入式體系的廣泛看法,所以應用爲中心,以計算機技術爲基礎,軟硬件可裁剪,適應應用體系對功效、牢靠性、成本、體積、功耗嚴酷要求的公用計算機體系。模塊化

那麼問題來了,爲何嵌入式工程師要軟硬結合呢?

其一

軟硬結合,更好地實現用戶需求,好比輸入捕捉,若是是經過上升沿或者降低沿捕捉,加了不合適的濾波電容會形成對沿的破壞,不加濾波電容就會受困於各類空間干擾產生的雜波。

假若硬件工程師搬來的是加了不合適電容的電路,搞得沿之間位寬失真,便會出現數據不正常的偶發故障,假若硬件工程師搬來的是不加電容的電路,搞得軟件工程師必須進行軟件濾波,把代碼搞得又複雜又難解,你說這怨誰來着?

其二

方便定位Bug。愛因斯坦曾經說過,「提出一個問題每每比解決一個問題更重要,由於解決一個問題也許僅是一個數學上的或試驗上的技能而已,而提出新的問題、新的可能性、重新的角度去看舊的問題須要有創造性的想象力,並且標誌着科學的真正進步。」

鑽研硬件電路能夠幫助軟件工程師提出更多解決問題的思路,發現致使Bug的更多可能性。通常來講,當遇到Bug時,對硬件只知其一;不知其二的軟件工程師只在代碼層面上打轉轉,基本不會在硬件方面提出問題,最終爲了迎合蹩腳的硬件設計出彆扭無比的代碼,卻未曾想,只要稍稍改變一下硬件設計,就能夠輕鬆且優雅地完成代碼設計。

其三

藝多不壓身,求人不如求己。當咱們對硬件電路設計起了懷疑,假若本身悄沒聲地拿起烙鐵飛個線、換個元件,驗證了本身的思路,這時直起腰版、拿着板子義正詞嚴地去找硬件工程師,豈不是順順利利,又送順水人情?

假若直接拿着板子,心底發虛面上露怯地去找硬件工程師理論,一場脣槍舌戰在所不免,腥風血雨不說,到頭來硬件工程師硬着頭皮給你調調電路,真是解決了問題還好說,如果本身思路錯了,那不是自找苦吃?上個班,掙點錢養家餬口而已,當個老好人,和同事其樂融融多好,吵來吵去,搞得那麼辛苦,何須來着?

那麼如何從單純的硬件設計過渡到硬軟結合的設計,在你着手開發軟件時需注意如下八個軟件設計技巧。

一、設計控制流程圖

工程師進行到開發軟件這一步時會不由自主地開始書寫代碼。這種思惟定勢就像在原理圖還未完成以前就開始嘗試畫PCB。當着手開發軟件時,剋制寫代碼的衝動,取而代之的應該是軟件流程結構圖表的設計,這點很是重要。流程圖能清晰地呈現給開發人員軟件的各個須要的組成部件,正如電路圖列出硬件設計所需的各類元器件同樣。作到這點能很大程度上使程序總體更易於組織,並且也會減小佔開發週期較長的調試工做量進而節省時間減小調試的繁瑣。

二、使用狀態機控制程序流

狀態機是20世紀優秀的軟件發明之一。應用程序通常被分解爲多個不一樣的狀態,每個狀態控制一個特定的程序分支。狀態機包括內部狀態和依據不一樣激勵所控制的狀態轉換。使用狀態機機制設計軟件可以使模塊化的可維護的軟件開發更加容易並且易於理解。狀態機原理與算法的示例隨處可見。

三、避免使用全局變量

在過去的函數式編程中,程序員使用函數編寫程序,他們的惟一目標是使程序儘量快的運行而不考慮程序的結構和重用性。這類程序風格在使用全局變量時不注意變量的做用範圍引發其餘函數修改的危險性。這樣變量會被屢次佔用和重寫。現在面向對象的程序設計中,成員變量被定義在最小的做用範圍以內並封裝起來避免被從新復值和濫用。因此建議儘可能少地使用全局變量,實在須要的話,使用C語言中的關鍵字「extern」來修飾。

四、充分利用模塊化的設計理念

若是你問一位工程師項目的哪一部分最有可能會拖延交付並超出預估時間,那答案必定是軟件週期了。軟件一般是複雜並且不易開發和維護的,特別是當項目應用程序集中在一個單一的文件裏,或者幾個結構鬆散的文件中時。爲了便於代碼重用和軟件可維護並減少軟件的複雜度,強烈建議發揮高級程序設計語言模塊化的特性,在程序的結構中把公用的函數分離出來做爲一個獨立的模塊。經過這種方式可讓程序員開始建立包含有經常使用函數和經常使用的聲明定義,它能夠很容易的被其餘的代碼重用,這在之後的測試階段不只能夠節省時間代價還能提升代碼的質量。

五、中斷服務事件保持簡練

中斷服務事件是中斷處理器正在執行的程序,轉而去處理觸發該中斷的外設的請求的一種機制。處理器響應中斷請求須要大量的系統開銷,具體表如今保存被中斷程序的狀態(入棧下條指令的段地址、偏移地址和程序狀態寄存器,有時還會入棧若干寄存器的值),執行中斷服務程序而後恢復中斷點繼續執行(依次出棧各寄存器),雖然如今的處理器速度很是快可是這種系統開銷仍然須要考慮。通常來講,爲了不與主程序衝突程序員總想使中斷執行時間減少到最小。這就意味着中斷服務事件應該短小簡單。不能在中斷程序中調用函數。另外,若是中斷須要處理的事件特別複雜或者須要花費較長的時間,這個時候中斷服務程序應該知足最小的需求,例如將數據載入到緩衝寄存器、設置標誌位,而讓主程序去處理讀入的數據。這樣處理器的工做大部分週期都在處理程序而不是中斷。

六、使用處理器示例代碼測試設備

對於硬件設計,在畫板以前標準的測試電路有助於工程師理解電路的特性。一樣能夠適用於軟件設計,半導體廠商一般有測試微處理器各個部分的功能的示例程序提供工程師體驗各部分是如何工做的。據此能夠提早組織軟件的結構而且預知在設計中的問題。提早肯定在設計潛在的障礙遠比在產品完成前幾個小時發現問題更加科學合理。而值得注意的是廠商提供的代碼一般不是模塊化並且不作必要的修改是很難直接用於實際的軟件中的。

七、控制函數的複雜度

在工程設計中有句俗語叫「KISS」,意思是「Keep It Simple Silly」。在處理一些複雜的任務時最簡單有效的方法是把它分解成若干個簡單的子任務,當任務或者功能很複雜時,人們很難留意全部的細節也很難不出錯。當工程師寫了一個在當時可以理解的複雜函數,可一段時間後須要維護程序了還能不能清晰的呈現出當初的設計思想這是值得考慮的。有大量的技術來衡量函數的複雜度像「循環複雜度」。經驗告訴咱們,函數的循環複雜度應該低於10比較好。

八、詳細的文檔

在激烈的軟件開發競爭中關注的焦點很容易就侷限在代碼的書寫和調試而忽略文檔的編寫。有時迫於壓力要求寫文檔,開發人員一般把文檔安排在項目開發的最後的一個環節集中編寫。然而給代碼寫文檔應該乘在頭腦裏面還比較清晰的時候比較關鍵,這樣在後續的開發或者本身閱讀註釋的時候能很快的回憶起當時的設計思想。

另外,優秀的硬件工程師和軟件工程師分別如何經過軟硬結合完美進階?

嵌入式硬件工程師

單純信號來分爲數字和模擬。

模擬相對較難,通常須要很長的經驗積累,單單一個阻值或容值的精度不夠就可能使信號誤差很大。所以年輕人搞的較少,隨着技術的發展,出現了模擬電路數字化,好比手機的Modem射頻模塊,都採用成熟的套片,而當年國際上只有兩家公司有此技術,自我感受模擬功能不太強的人,不太適合搞這個,若是真能搞定到手機的射頻模塊。

另外一類就是數字部分了,在大方向上又可分爲51/ARM的單片機類,DSP類、FPGA類, 國內FPGA的工程師大可能是在IC設計公司從事IP核的前端驗證,這部分不搞到門級,前途不太明朗,即便作個IC前端驗證工程師,也要搞上幾年才能勝任。 DSP硬件接口比較定型,若是不向驅動或是算法上靠攏,前途也不會太大。

而ARM單片機類的內容就較多,業界產品佔用量大,應用人羣廣,所以就業空間極大,而硬件設計最體現水平和水準的就是接口設計這塊,這是各個高級硬件工程師相互PK,斷定水平高低的依據。

而接口設計這塊最關鍵的是看時序,而不是簡單 的鏈接,好比PXA255處理器I2C要求速度在100Kbps,若是把一個I2C外圍器件,最高還達不到100kbps的與它相接,必然要致使設計的失 敗。這樣的狀況有不少,好比51單片機能夠在總線接 LCD,但爲何這種LCD就不能掛在ARM的總線上,還有ARM7總線上能夠外接個Winband的SD卡控制器,但爲何這種控制器接不到ARM9或 是Xscale處理器上,這些都是問題。所以接口並非一種簡單的鏈接,要看時序,要看參數。

一個優秀的硬件工程師應該可以在沒有參考方案的前提下設計出一個在成本和性能上更加優秀的產品,靠現有的方案,也要進行適當的可行性裁剪,但不是胡亂的來,我遇到一個工程師把方案中的5V變1.8V的DC芯片, 直接更換成LDO,有時就會把CPU燒上幾個。

前幾天還有人但願我幫忙把他們之前基於PXA255平臺的手持GPS設備作下程序優化,我問了一下狀況,地 圖是存在SD卡中的,而SD卡與PXA255的MMC控制器間採用的SPI接口,所以致使地圖讀取速度十分的慢,這種狀況是設計中嚴重的缺陷,而不是程序 的問題,所以我提了幾條建議,讓他們更新試下再說。

所以想成爲一個優秀的工程師,須要對系統總體性的把握和對已有電路的理解,換句話說,給你一套電路圖你 終究能看明白多少,看不明白80%以上的話,說明你離優秀的工程師還差得遠哪。其次是電路的調試能力和審圖能力,但最最基本的能力仍是原理圖設計PCB繪 制,邏輯設計這塊。這是指的硬件設計工程師,從上面的硬件設計工程師中還能夠分出ECAD工程師,就是專業的畫PCB板的工程師,和EMC設計工程師,幫 人家解決EMC的問題。

硬件工程師再往上就是板級測試工程師,就是C語功底很好的硬件工程師,在電路板調試過程當中能經過自已編寫的測試程序對硬件功能進行 驗證。而後再交給基於操做系統級的驅動開發人員。

那麼高級硬件件工程師技術技能都要具有那些東西哪,首先要掌握EDA設計的輔助工具類如 ProtelORCADPowperPCBMaplux2ISE、VDHL語言,要能用到這些工具畫圖畫板作邏輯設計,再有就是接口設計審圖能力,再者就是調試能力,若是能走到整體方案設計這塊,那就基本上快成爲資深工程師了。

高級硬件工程師不只要有設計能力還有具備至關深厚的基本功,就是EDA工具的使用,EDA工程師包括原理圖和PCB工具,邏輯設計工具和VHDL,SCH有Cadence下的Orcad 和Mentors公司pads下的powerpcb。

固然AD也具備這兩部分功能但它在國際上不通用。只是國內通用。若是想走得高些或到臺資、日資、美資公司及國內須要對外交流的大公司的話,上面的硬件的原理圖工具和PCB工資必須掌握的。邏輯這塊,硬件工程師主要是負責CPLD這塊,涉及FPGA這塊時應該會有專業FPGA人員來搞定的,因FPGA不太適合作邏輯的。所以硬件工程師只到CPLD爲止。

嵌入式軟件工程師

嵌入式軟件工程師就是編寫嵌入式系統的工程師,通常來講軟件工程師的人員流動性要比硬件流動性要大。

首先,咱們都知道,產品是企業生存的命脈,若是產品的設計資料泄露,那麼該企業的生存優點就不存在了。因此,企業會想方設法的留住產品設計的核心人員,尤爲是硬件設計人員。

另外,培養一個硬件工程師比較難,並且時間也比較長。因此企業通常不會主動去培養一個硬件工程師,而且也不會輕易放棄一個硬件工程師。

因爲目前軟件工程師居多,企業可供選擇的機會也多,因此軟件工程師的流動性要高。不過相對來講,軟件工程師的起薪比硬件工程師要高的多,而經驗豐富的軟件工程師也是很是受到企業歡迎的。

嵌入式技術大致上能夠分爲如下幾個部分,編程語言,內核技術,操做系統,總線接口,系統集成。

嵌入式軟件工程師的技術範圍分紅下面幾個等級:

一、初級:8051或其餘單片機,UCOS,I2C,SPI,UART。彙編和C能力通常,系統集成能力弱。

二、中級:在初級的基礎上,ARM/MIPS,其餘一些RTOS並瞭解Linux,SDIO,USB。彙編和C能力不錯,有必定系統集成能力。

三、高級:主要是對中級的進階,這一個層面已經不在於掌握具體的技術,而是掌握當前流行技術中的基本思想和構成方式,因此任何流行的技術,對於這一階段來講,都是手到擒來的。

ARM+LINUX路線,主攻嵌入式Linux操做系統及其上應用軟件開發目標:

(1)掌握主流嵌入式微處理器的結構與原理(初步定爲arm9)

(2)必須掌握一個嵌入式操做系統 (初步定爲uclinux或linux,版本待定)

(3)必須熟悉嵌入式軟件開發流程並至少作一個嵌入式軟件項目。

嵌入式軟件工程師須要具備4個能力:

能力1:對C語言的深刻掌握,不犯低級語法錯誤。

能力2:對嵌入式芯片平臺熟悉,包括芯片各種外設的原理和使用方法,以及相應的嵌入式操做系統。還包括芯片外圍電路的設計能力,包括AD採樣、IO電平變換,PWM輸出,電源電路等。

能力3:對算法的精通,包括常規的平均值、有效值計算法,低通、帶阻濾波器,PI、PR控制器,以及產品須要的專用控制算法等。

能力4:軟件架構設計能力,能作到程序執行時間短(時間複雜度低),佔用數據空間少(空間複雜度低),以減小對中斷時間和芯片內存的過度要求。能知足程序封裝、繼承、健壯的要求。

相關文章
相關標籤/搜索