嵌入式應用工程師是一個軟硬件兼顧的職業。當然,到了具體的工作崗位可能會有嵌入式硬件工程師和嵌入式軟件工程師之分等。不管怎么細分,只要是做嵌入式應用開發的,你設計的軟件就要在硬件上跑,你不熟悉硬件平臺可以嗎?你設計的硬件,也要考慮軟件上面的事情,沒有一定軟件設計思維也是不行的。
對于一個嵌入式應用開發的入門者來說,是沒有軟件和硬件的偏向之分的,至少我是這樣認為。因為對于基礎的技能,必要有一個全面的掌握,這樣你才能在嵌入式開發的道路上走得更遠,才能具備從入門走向優秀的可能。
那么,如何才算是嵌入式工程師入門了呢?
我認為,至少能夠獨立設計和制作出一款嵌入式應用系統,就算是很少很小的系統也可以。
那么,要完成一款嵌入式應用小系統,你至少要做下面的一些工作:
1. 設計并確定系統的功能模塊,形成設計概要文檔。
2. 選擇嵌入式微處理器,確定系統的功能框圖。
3. 對主控芯片的引腳進行定義,形成引腳功能分配表。
4. 根據功能框圖,對主要的元器件進行選型。
5. 設計并確定各個功能模塊的電路原理圖。
7. 原理核查無誤,開始設計PCB圖,并形成BOM表。
9. 焊接電路板,并進行簡單的測試,確保不短路、無虛焊等。
10. 編寫程序,對各個功能模塊進行測試,確定都能正常跑起來。
11. 編寫和測試相應的應用程序。
12. 整理資料,形成開發文檔,如有必要,還可以記錄自己的開發心得。
也許有人要問,入個門真的要這么復雜嗎?現在有很多培訓機構,上來就學習操作系統移植、驅動程序編寫、項目應用開發,既高端又快速。我也不否認,這也是一條嵌入式應用快速成長的途徑。如果你具備了上面描述的能力之后,再去接受培訓,那不是更容易理解培訓內容,成長的不是更快嗎?
《大學》里面有句話:“物有本末、事有終始,知所先后,則近道矣”。我始終認為,對于一個初學者或者人門的人,必須有扎實的基礎,才能真正的從入門邁向優秀。
【入門都需要學習哪些基礎技能呢?】
對于一個入門的初學者來說,再努力也不為過。我想要達到上面所描述的能力,成為一個真正嵌入式應用開發的入門者,可能要掌握下面幾項基礎知識和必備技能,大家可以參考一下:
嵌入式系統,上面都是電子元器件,都離不開電流和電壓。在學習這些課程的時候,你可能覺得毫無用處。但當你去設計一個系統,或者處理一個系統的硬件故障時,你可能會發現需要借助這些課程的知識了。
在讀書的時候,我最討厭這三門課,而且當時覺得都是理論,毫無實際用處。特別是電路分析,相當的抽象。對于這三門課,我并不認為在開始就要把它們讀透,當然你有這個毅力和能力最好不過。對于初學者,我倒覺得可以采用迭代學習的方法。
在初學的時候,最起碼要把基本的東西弄懂。相對來說,電路分析要求沒有太多,懂得簡單的電路分析方法就夠了。模電和數電要求會多一些,最起碼半導體、三極管、典型的運放電路、振蕩電路、濾波電路、電源電路、A/D轉換電路、數字編碼電路等等這些常用的電路要掌握。不然,你在設計電路的時候,就是無米之炊了。
在將來設計和處理問題的時候,如有需要,就回頭找資料,翻書本,既可以吸收學習新的知識,又可能加深鞏固舊的內容。如此反復以往,在不久的將來,一定能都透徹理解這些課程,而且會有新的理解和深刻的認識。ADI公司的工程師寫了一本書《嵌入式系統中模擬設計》,我認為不錯,有興趣的不妨看看。
《2》掌握常用的元器件的選用方法與其典型的電路應用
俗語講:巧婦難為無米之炊。一個理論知識豐富的工程師,如果對元器件的原理和應用不熟悉,是很難設計出好的嵌入式應用系統的。這就猶如一個好的醫生,能夠正確分析病理,找到病癥,可以不懂藥物,開不出藥方,一樣治不好病。
這個能力如何才能具備呢?
只能靠平時不斷積累,而且是貫穿整個嵌入式開發生涯,我想別無他法了。
在這個地方,我有一個經驗可以和大家分享:養成做開發筆記的習慣。
拿一個好的筆記本,無論是學習還是開發過程中,遇到新的元器件應用,就將其記錄在本子上。這個記錄至少包括:元器件的引腳圖,封裝圖,重要的電氣特性,結構原理,應用電路,如果涉及接口編程的,要把核心的程序記錄下來,最好還能將你的開發體會記錄下來,或者將別人的開發經驗也可記錄下來。
倘若能夠一直堅持下去,這個筆記本就會成為你的一個嵌入式應用開發寶典。日后在設計系統的時候,需要什么元器件,翻一下筆記本,就什么都有了,總比你去翻數據手冊強,要知道一本數據手冊可有好幾百頁的。
《3》熟練掌握一款電路設計軟件以及電路設計原則
嵌入式應用系統首選要通過硬件表現出來,有了硬件平臺才能在上面編寫代碼,實現應用。要制作硬件平臺,首選要設計硬件電路。這就要求你能熟練使用電路設計軟件,以及懂得一些軟件設計的規則。
目前常用的電路設計軟件有不少,不過常用的也就是Protel,也有很多公司用Designer,不過兩者很接近,會用其中一款,掌握另外一款很容易。對于工具軟件,只要多用就會熟練的了。現在網上教程很多,很容易學習的。我在網上有一個文章《物聯網硬件技術實訓-攻略手冊(2016版)》,不過講的是Protel99軟件的使用。這是一個99年的軟件工具,你可不要小看它,短小精悍,現在還有不少公司的工程師在使用能。初學者就應該從簡單和經典的入手。
對于電路設計原則,網上有很多文章,也有不少書籍。對于初學者來說,不會涉及高速和高頻的電路,在布局走線和地線設計上沒有太多的講究,只要合理、美觀就可以了,當然線不能太細,線寬也不能太窄,起碼要符合制版公司的生產要求。這也是一個積累的過程,隨著你學習的深入,設計經驗的豐富,這部分知識也就悄悄的多起來了。
電路板設計出來了,還要親自發出去生產一下,通過這個過程,你會了解到生產電路板的一些工藝要求,以及體會一個設計者如何與生產者溝通。在這個過程中,你知道了選擇多厚的板,為什么要開鋼網,什么叫郵票孔,怎么樣拼板,要不要飛針測試,面積大的電路板原來還有菲林費。..。..。
《3》必須精通C語言程序設計和典型的設計思路
如果你不去做系統移植的工作,C語言基本可以滿足你對硬件系統的所有編程要求。C語言是嵌入式系統開發的一個工具,對工具使用的熟練程度,直接影響系統的開發程度。所以,我認為必須要精通C語言程序設計,而不是會或者掌握。嵌入式C語言程序設計和標準的C語言程序設計還是有一些不同的地方,這個大家需要體會一下。在標準C語言應用中,宏定義、條件編譯、頭文件這些知識點并不被重視,但在嵌入式系統中卻確隨處可見。在嵌入式開發中,很多時候要對寄存器進行操作,所以在指針方面的應用也會很多。如果是數據采集或者物聯網數據傳輸的應用,可以涉及到到大數組的處理,而在進行協議解析的時候,又要在大數組中,對很多小字段進行處理,對于RAM區不足的處理器,你還不能夠定義小數組來處理小字段,只能運用指針設計算法。
對于簡單的嵌入式應用系統,我們可自己從頭到尾自己編寫一個系統應用程序,而對于復雜的嵌入式應用系統,就需要移植一個操作系統來進行任務管理了。對于嵌入式初學者來說,能達到前者水平就可以了。要自己獨立編寫一個合理的應用程序也不是一個簡單的事情。目前這方面的資料和書籍有很多,我三兩句也講不清楚,不妨推薦兩本書給大家參考一下:
1.安德魯。凱尼格的《C陷阱與缺陷》
2.周航慈的《基于嵌入式實時操作系統的程序設計技術(第2版)》
《4》理解51單片機的原理結構并進行編程訓練
對于這一點有不少人會提出質疑,也有人認為沒有必要,這是在浪費時間,這說的有一定道理。但對于初學者,我認為還是要從最簡單、最經典的入手。首先,51單片機的結構簡單但是極具代表性,很多嵌入式微處理器都由51內核演變過來;其二,關于51單片機的學習資料很多也很容易獲得,學習成本很低;其三,當前不少SOC片上系統都是采用51內核作為處理部分,不見得過時。
當前不管是簡單的8微處理器還是32為ARM處理器,都是一種“內核+外設”的結構,其中的差異是內核的性能高低和外設的復雜程度。當然,51單片機也是“內核+外設”的結構,只不過性能低,外設少而已。雖然在實際應用中已經很少了,但作為學習平臺,特別是入門學習那是相當合適的。我相信當前很多高校都還在用51單片機作為主流的教學平臺呢。
51單片機雖小,但五臟俱全。4個8位的I/O端口,其中P3口作為復用端口;2個外部中斷輸入,2個定時計數器,1個串行接口。內部有5路中斷,由IE寄存器進行使能選擇,由IP寄存器進行優先級設定。看起來與現有主流的處理器結構好像相差不大,只是少了一些外設,中斷處理好像有些差別等等。
就我個人的經驗來看,熟悉51單片機的原理和應用之后,再去接觸當前的主流單片機或32位的ARM處理器(沒有上操作系統的32為處理器只不過是款復雜的單片機),是相當容易上手的。當然,你不從51單片機入手,直接找一個主流的8位單片機入門學習也是可以的。現在很多微處理器提供的集成開發環境都很智能了,可以輔助你生成一些程序框架。就開發者而言,能夠加快你開發的進度。然而,對于初學者來說,由于集成開發環境輔助做了一些工作,封裝了部分的代碼,反而不利于對知識的理解和學習。
《5》掌握一款主控微處理器的開發并掌握常用接口模塊的設計
上面說的51單片機學習只是讓你能更好的入門而已。在實際的應用開發中,用到51單片機的場合并不多,所以,還得掌握一款主流微處理器的開發。由于有了前面單片機的學習基礎,再去掌握一款新的微處理器會很容易。在這個部分,主要的精力不再是微處理器本身的學習,而是借助這個微處理器去進行一個經典應用和常用接口模塊的學習。
如果說元器件電路模塊是硬件資源的積累,那么,常用接口模塊驅動程序則是軟件資源的積累。
將來在你的產品設計中,可能用到很多新的芯片和元器件,只要它的接口是SPI接口、IIC接口、設置串口等你熟悉的接口,那么對于你來說,它就是一個舊芯片和元器件。因為微處理器面對的不是芯片,而是接口。對外設芯片的操作本質上就是通過數據接口設置外設芯片的寄存器而已。不管是多么先進或多么新穎的外設芯片,只要用的典型接口,那么通過接口驅動程序建立數據通道,按照數據手冊對寄存器進行操作,很快就可以應用自如了。
所以說,熟練的掌握各種接口的編程和常用模塊的設計,是多么的關鍵。
《6》掌握一些常用工具的使用并具備一定的焊接能力
掌握一些常用的軟硬件工具,是調試必備的技能。對于初學者來說,不要急著去研究頻譜分析儀、數字毫伏表這些高端的工具,只需要掌握普通常用的工具就足夠了。硬件上面,萬用表和示波器是必須要掌握的,能用數字電源和信號發生器那是最好的了。對于一些特殊的工具,等你做到相應的應用的時候再去使用都不晚,當你要設計一個高精度的熱電偶數據采集器,你才會使用到熱電偶校準器。除了硬件工具之外,我們還得掌握一些常用的軟件工具,最典型的就是“串口助手”了,如果你要做以太網方面的應用,你還得會使用以太網抓包工具,抓取網絡上的數據包進行數據分析。
另外,你還需要具備一定的焊接能力,至少能焊接0.65mm間距的SSOP封裝的芯片。現在也有不少芯片采用QFN封裝的,看起來很難焊,實際上掌握了要點,手工焊接也是很快的。不用說對于初學者,就是是在小企業的嵌入式工程師來說,可能都沒有專門的焊接人員配備給你,所以,很多時候都得自己焊接元器件,最起碼在進行硬件調試的時候,要拆下來,焊接上去的時候,你總不能等別人幫忙,或者老是去麻煩別人呀。
《7》自己親自設計一個學習板并進行程序開發
我覺得這是每一個嵌入式應用開發入門者的成人禮。當你能夠按照上面所描述的步驟完整這個過程的時候,說明你已經正真的踏進了嵌入式應用開發的門檻。然而,完成嵌入式工程師入門僅僅是一個事業的開端,后面還需不斷進取,在入門的基礎上,進行操作系統的移植、驅動程序的編寫、實際項目的磨練,小步快跑,迭代升級,才能向一個真正優秀嵌入式工程師邁進。
【小結及其他】
嵌入式應用開發涉及的知識點很多,初次接觸往往感到無從下手。沒錯,與一些高級編程語言“易懂難精”的情況相比,嵌入式應用開發的入門是比較難的,但是,隨著知識的積累和經驗的豐富,后面的路會越走越寬,越走越順。廣大的嵌入式應用開發入門者應該充滿信心。我一直都認為嵌入式應用開發就像一場馬拉松,必須一步一個腳印,積蓄能量,逐步進階,才能越走越遠的。
有一些朋友會參加知名培訓機構的嵌入式課程,一開始就在功能復雜的開發平臺上學習移植操作系統,編寫底層驅動程序,切入大型嵌入式系統項目開發等等,起步很快,學習的內容也很潮,做得實驗也很高端,當然在他們之中,有很多人是相當出色,工作也會非常優秀。然而,他們的起點很高,效果可能也很好,但是,我始終認為還是要有一些扎實的基礎作為支撐的。如果在一場馬拉松中沒有足夠的能量儲備,一旦跑得太快,后面可能會跑得不遠。
時代不斷進步,科技不斷發展。嵌入式應用工程師也應該與時俱進,密切關注行業動向,偶爾要去參加一下芯片廠商舉辦的產品發布會或講座,更新知識,認識同行;每年去看看一些大型的電子展會,開拓思維,開開眼界。
-
嵌入式工程師
+關注
關注
1文章
36瀏覽量
16199
發布評論請先 登錄
相關推薦
評論