工程師經驗分享2 --- 嵌入式大牛開發經驗心得之學習方向

Allen5G發表於2018-05-10

學習有捷徑嗎?俺認為是有的,正確的道路就是捷徑。
    就好象是爬山,如果有導遊圖,那就能找到一條最正確的路線;如果沒有導遊圖,自己瞎琢磨,東問西問,也未必能找到最佳的路線。
    有時候回首前塵,會謂嘆,要是當時我這樣做就好了;這也說明了人生會有一個最優解。
    嵌入式系統的學習也是一樣,作為電子專業或者其它專業的學生來說,想要把嵌入式系統的學習搞好,走一條成功的人生道路,那應該怎麼去做呢?俺試著分析看看。
    當然人生的道路很多很多,嵌入式不可能是唯一的道路,也絕對不是最好的道路;這些都是因人而異的; 
如果你沒有什麼別的資源,俺主要指的是人脈,資金,需要靠技術吃飯,正好你學的是電子、自動化、通訊...這樣跟嵌入式相關的專業,又正好喜歡技術,那麼可以考慮把嵌入式當作自己的傍身之技來學習。這時尋求嵌入式系統學習的最優解就有了意義。
    一、 嵌入式系統的定義
    根據網路上搜尋到的關於嵌入式系統的定義,結合自己對嵌入式系統的理解,把嵌入式系統定義如下:
1、 嵌入式系統簡單的說就是面向特定應用設計的專用計算機系統;
2、 嵌入式系統與普通的PC或者notebook不同,嵌入式系統的外形尺寸、功耗、外部介面卡等各種特徵必須滿足應用的要求和限制;
3、 嵌入式系統的軟體包括作業系統燒錄在一塊電路板上;
4、 使用低功耗的X86級別的CPU,採用模組化的設計,配置了最基本的計算機周邊配備而製成。這種計算機通常採用Windows作業系統;
5、 嵌入式系統的CPU可以是:4位、8位、16位、32位;
6、 嵌入式系統應用廣泛,諸如:
1) 小家電
2) 汽車
3) 電梯
4) 電視
5) 錄影機或者VCD、DVD
6) mp3、mp4
7) 工業控制
8) 醫療裝置
9) 衛星
10) 電話
11) PDA
12) 飛行系統等等
13) ……
7、 嵌入式系統的體系結構:
1) CPU
2) RAM
3) ROM或者flash ram
4) AD
5) DA
6) 人機介面(例如按鍵+LED/LCD/彩色液晶顯示器/)
7) I/O
8) Usart
9) USB
10) CAN
11) 乙太網
12) 嵌入式的作業系統,例如:uc/os、linux、vxworks、wince、dos。。。
8、 嵌入式系統更多的表現為SoC的特點,也就是把整個系統都整合在一個晶片上,例如,ATMEL的arm7的晶片91sam7x128/256等;使用者可以獲得廉價而功能強大的嵌入式系統;



    二、 最正確的學習道路 - 從8位mcu到canbus到ARM7


    第一步:熟悉8位mcu


    個人的看法是,學習嵌入式的技術有個脈絡:8位mcu(51或者avr...)+can2.0B+arm7+arm9,學習的時候可以按照這個脈絡來進行;

    作為低端的嵌入式系統,選擇8位mcu作為入門是比較適中的,而8位mcu中,相比pic、avr、freescale等等8位微控制器來說,又以選擇51核的微控制器作為學習8位mcu的首選來更加合適。當然這個觀點是仁者見仁智者見智;如果需要理由的話,那麼也許以下這些理由可以作為參考:


1. 51上積累了大量的優秀的程式碼和其它資源;網路上這樣的資源太多了,幾乎就是不花錢的;
2. 生產51核心的微控制器的廠家很多,比如:ATMEL、華邦、LG、飛利浦、STC(巨集晶科技)、TI、…
3. 51微控制器在細分低端市場,面向不同的行業應用,廠家推出了不同的產品,如LPC900系列,STC的12CXXXX系列;在功能、價格、功耗,體積,封裝、抗干擾等方面來滿足行業使用者的需求;例如,現在的51微控制器越來越多的整合了A/D、D/A、SPI、I2C、PWM、內部時鐘、看門狗、eeprom、ISP/IAP等等,已經跟傳統的ATMEL的89C51/52有了很大的差別!功能越來越強大的同時成本越來越低,而且不擔心某個廠家缺貨...
4. 。。。。(還在不斷增加之中)



    第二步:熟悉can2.0A/B,在精通51的基礎上,熟悉can2.0A/B



    為什麼是canbus而不是modbus bus、bitbus?

    CAN是德國Bosch 公司為解決現代車輛中眾多的控制和資料交換問題,開發出一種CAN(Controller Area Network)現場匯流排通訊結構。其主要特點是:
1. 8位元組的短幀傳送,故傳輸時間短、抗干擾性強;
2. 高速,最高速度可達1Mbit/s;
3. 多主方式,多主之間又可以分成是主節點和次節點;各節點均可在任意時刻主動向網路上的其他節點傳送資訊,不分主從,通訊靈活;傳送的時候匯流排自動仲裁主次;主節點佔有優先權; 
4. 可以做到全區廣播、分割槽廣播和點對點通訊;
5. Can控制器自動過濾幀號不符的幀;大大減輕了CPU的負擔; 
6. 具有多種錯誤校驗方式如CRC及其他校驗措施,資料出錯率極低;而且在嚴重錯誤的情況下,節點會自動離線,避免影響匯流排上其它節點;Rs485經常是一個節點影響了匯流排上所有的節點;

7. 採用無損壞的仲裁技術; 

    作為一種技術先進、可靠性高、功能完善、成本合理的遠端網路通訊控制方式,CAN匯流排已被廣泛應用於各個行業之中。大致有以下這些行業:
1、 汽車電子
2、 自動控制
3、 智慧大廈
4、 電子系統
5、 紡織
6、 智慧儀表
7、 醫療系統
8、 電梯
9、 安防監控
10、 電源
11、 運動控制
12、 …等各領域中,取代了原來的落後的RS485的通訊方式。


    bitbus/modbus在物理層上都是Rs485的。


    第二步:熟悉ARM7,掌握ARM這個超級微控制器(32位)

 
    三、 直奔主題 - 不要穿著棉襖洗澡


    學什麼很重要,沒有必要穿著棉襖洗澡,直奔主題,要學就學最有用的東西。
比如微控制器,學什麼型號?市場上的微控制器,有51、AVR、PIC、freescale等不同的系列,把任何一款微控制器學會了玩通了那都是很不錯;

    但是我個人認為還是51系列的微控制器在中國使用最多,去中發問問哪款微控制器出貨量最大就知道啦;
據說有些大學現在還在教授Z80,在論壇上爭論起來,有些人支援,有些人反對;支援的人認為這是一款很好的原型機,可以學到很多計算機的原理;

    但是對於嵌入式系統的學習者,一款已經過時的技術學它做什麼?難道學了不能致用是對的?

    學習51不也一樣能瞭解計算機的基礎知識?而學好了51畢業出去就能生存;

    大家都知道485匯流排要想可靠工作非專家不可,而現在canbus作為更加可靠效能更加卓越的匯流排技術,節點數量每年遞增;可以說,51+canbus能夠讓你如虎添翼;

    那麼,是不是去學習canbus要能獲得更加遠大的前途而不必在485上浪費寶貴的青春?答案顯然是前者。
畢業之前的大學n年+畢業設計就是為了邁出就業的第一步;第一步很重要。
人生不要有斷點,一步接著一步,現在邁出的一步就是為了下一步做好準備,甚至為了比較長遠的以後...

    四、 把嵌入式系統分成模組學習 - 庖丁怎樣解牛?

    拿到一個電路設計的任務的時候,或者拿到一塊完整系統的電路板的時候,怎樣去分析它的系統構成呢?

    作為一個電子系統,它的構成通常是:
1. 微控制器最小系統
2. 配置(記憶體、時鐘、看門狗、eeprom)
3. 開關量輸入
4. 開關量輸出
5. 模擬量輸入
6. 模擬量輸出
7. 人機介面(按鍵+液晶顯示/LED顯示)
8. 通訊介面和協議

    因此設計的時候,或者分析的時候,要按照這個分類來選擇。

    舉個例子:開關量的輸入輸出的擴充套件,有以下的方法:

    1、 串列埠擴充套件

    2、 並行擴充套件

    那麼,在系統設計的時候,到底是使用序列擴充套件還是並行擴充套件,就需要權衡效能和價格,而選擇一種最合適的擴充套件方法;
在《從51初學者到電子工程師》一書中,將把這些知識點列表出來。

    在這個基礎上,按照這個思路,您再去構築自己的知識體系。

    其實,任何一門學問,難得就是入門;而入門,就是要有一個完整的知識體系;一開始這個知識體系僅僅是一個個點,到後來就能成為一套完整的體系,知識的網越織越密。



    五、 儘可能獲得更多的資訊 - 站在前人的肩膀上


    當您拿到一個設計任務的時候,怎麼入手呢?

    要把這個任務按照模組分解,再充分利用網路上的資源,找到現成的或者類似的解決方案。

    試舉一例:

    《基於CAN匯流排的智慧I/O讀寫模組》

    當你拿到這個任務的時候怎麼著手呢?

    1、 您會想到,哦can匯流排是什麼東西啊,不知道;不過沒有關係,狗狗之;

    哈哈,結果出來啦,原來是周立功先生推的can匯流排啊,知道知道;把周立功網站上的有關can的資料都下載下來學習;



    2、 哦那原理圖怎麼畫呢?再次狗狗之,不過這次要使用圖片;嗯但是我已經知道了,還有一個can匯流排控制器的晶片,sja1000,那就使用這個詞來搜尋吧;

    哈哈找到了,連89c5X+sja1000+82C250(匯流排收發器)都有了;哦還有一個復位電路,不過沒有關係,俺可以使用stc89C5X,內建看門狗和復位電路;



    3、 剩下I/O讀寫模組怎麼辦呢?

    哦模組化的設計思路,想想看,老樹都說了什麼?

    I/O有多種的擴充套件方法,一種是序列、一種是並行,那我需要擴充套件嗎?算算I/O的數量,硬體還剩下哪些資源呢?

    1、p0、p2被佔用了

    2、WR、RD也被佔用了,哦仔細看看,int0也被sja1000的中斷佔用了;

    3、p1/p3加起來是16根口線,剩下16-3(RD、WR、int0)=13個口線;

    4、看門狗喂狗需要一個(如果內建看門狗的可以不要)

    還剩下13個;

    現在需要8入8出,超出了,那麼就需要擴充套件

    擴充套件有2種方法:

    1、序列

    2、並行


    序列速度慢點,但是簡單;

    也可以使用並行,可以按照對ram的讀寫一樣的方法來擴充套件;反正sja1000也是並行的;

    序列又可以分成:

    輸入序列擴充套件;

    輸出序列擴充套件;

    嗯要不就定下來,輸入使用序列擴充套件,反正輸入的開關量為了抗干擾也要使用時間片,1ms間隔掃描至少3~5次才能判斷;

    輸入序列擴充套件可以使用74HC165;好像74hc166也可以,不記得了;需要2根I/O;

    這樣13-2=11,再減去輸出的8個口線,完全夠用了;還剩下3個口線;那就把串列埠也做出來除錯和下載用;哈哈。。。

    不過…開關量8入8出的訊號是什麼形式?

    嗯通常輸出輸出都是幹接點;

    輸入需要光電隔離;要使用一個隔離的Dc/DC模組;

    輸出7407直接驅動繼電器即可;

    光耦使用什麼型號呢?

    嗯老樹說了,有TLP521-1,再找來TLP521-1的資料看了,光耦隔離的晶片也有了...

    再找來7407的晶片的datasheet看了,驅動繼電器的晶片的資料也有了...

    再去找nais的繼電器的資料看了,繼電器輸出也有了...

    再去找接線端子的資料或者去配套市場看看,輸入輸出電源can介面的端子也有了...

    做到這些,硬體就差不多了
......

    哦還有協議,嗯使用啥協議呢?嗯好像zlg那裡有一個什麼iCAN的協議,可是網站上沒有,怎麼辦呢?老辦法,搜尋看看,哦,老周那裡有一本書講了ican的協議,嗯去互動出版社定購一本,過2天就能送到了...



    不過程式碼還沒有,嗯再搜搜看,要不就到21ic上問問...


    六、 大學階段掌握一門傍身之技取得先手之利 - 精通一門略通其它


    看剛畢業的學生的簡歷,到處都是熟悉的字樣,比如:
……

    熟練使用c51、protel;

    瞭解ARM/ucos2/Linux

    分析過ucos2核心程式碼。

    比較瞭解Linux底層硬體驅動軟體結構比較

    做過一些嵌入式硬體驅動的設計

    很熟悉網路通訊知識及網路程式設計
……

    實際上,對於企業來說,並不關心你學了多少的知識,而是關心你是否有一門比較精通的手藝,來了就能幹活。
那麼,該怎樣去做呢?俺覺得,應該是在精通一門手藝的情況下,略通其它。

    嵌入式系統本身也是多方面的,硬體軟體都有,但是,要有自己的最強項,因為企業都是用你的最強項。面面俱到實際上對於在校的學生來說是不可能的。我認為,對於在校的學生,應該重點放在c語言的熟練上;一方面是因為硬體沒有實際的實踐,很難能拿得出手,當然實踐的成本也高;當然自己動手做一個學習板還是很有必要的,也不算很難;還有就是在企業中,軟體和硬體的配置基本上是1:4的情況;對於成熟產品,基本上,硬體修改的情況非常小,升級都是在軟體的功能的增加和完善上。
    
    當然去強化自己的一門技術不等於放棄其它,而是說,要有重點的學習,要學會發力,把自己的精力集中在一門技術上;稍微大一點的企業都是有明確的分工的。

    而如果能在大學學習的階段就能熟練掌握一門技藝,或者是c語言的程式設計,或者是原理圖和PCB,或者熟練掌握類比電子...,那麼就能很快找到嵌入式系統的開發工作,也就上道了。


    七、 第一份工作很重要 – 哪怕去實驗室打雜也要做跟嵌入式沾邊的工作

    第一份工作很重要,人生的第一步很重要,走好第一步,可以少走2~3年底的彎路;沒有走好,有可能這輩子就廢了;
工作了2~3年之後,用人單位看重的是你的工作經驗,直接影響到您的價值能不能升值;就象微軟不會招聘做物流的人去做軟體,如果您做的是機械設計,當然用人單位也不會讓您去做51的開發;

    然而,第一份工作能不能做嵌入式開發,首先是您能不能在大學的4年內取得先手之利;先取得一些嵌入式開發的經驗,比如C51的程式設計等等;

    如果您經驗也不是很豐富,一開始可以計較工資的高低,而是幹了再說,哪怕是到實驗室打雜;
這樣也比干點別的再回過頭來做嵌入式的開發要強。


    八、 怎麼加強自己?- 時間規劃+勤奮

    有一個明確的職業生涯的規劃,同時要有一個達到這個目標的可以實施的準確的時間表。現在競爭這麼激烈,不付出超出常人的努力在現今的中國是不可能脫穎而出的;人太多了,競爭太激烈了。企業如此,個人也是如此;當然,真正的卓越的企業或者個人,更重要的是理念,怎樣去培養自己的核心競爭力!個人認為,簡單的說,那就是技術專家+行業專家。

    年輕人往往對職業生涯的規劃迷迷茫茫;但是時間如白駒過隙一去不復返。如果說每個人的成就有大有小。善於思考是一方面,行動敏捷是一方面,抓緊時間,提高效率那則是最重要的因素之一。


    九、 嵌入式系統設計的3個境界 - 熟練、熟能生巧、系統設計的思想

    熟練:熟練掌握c語言、電路模組、eda工具;

    熟能生巧:幹活多了,從中悟出很多的技巧;幹得活又快又好,這是熟能生巧;

    系統設計:不滿足於熟能生巧,而開始考慮,程式碼重複使用,程式碼設計的標準化、模組化;使得後來的開發能在一個標準的平臺上進行;對嵌入式系統設計有了自己的獨到的見解。

    也還可以使用另外的標準來作為嵌入式系統設計的境界:

    可靠性高:在同樣的成本下,做出來的東西可靠性高於競爭對手;

    可靠性高的情況下成本更低:能用比競爭對手成本更低的電路設計作出可靠性更高的產品;

    在此基礎之上,功能更加強大,使用者使用更方便:進入到行業專家的境界了。


    十、 細節決定成敗 – 精心設計硬體電路

    對於電子工程師而言,當拿到一個datasheet,或者一個電路圖,或者設計的電路圖,首先是站在前人的肩膀上,儘量不去做重複的勞動;但是,要對每一個電阻、電容在電路中的作用心裡很清楚-把可有可無的器件去掉。要是您對電路中的元器件的作用還不是很清楚,舉例,為什麼上拉電阻是5.1K?換成1K行不行?換成10K行不行?什麼是上拉?什麼是強上拉?什麼是弱上拉?去耦電容的作用是什麼?這些都要做到清清楚楚。每一個細節構成可靠的產品;而一個細節的疏忽帶來的是大量的經濟的損失和聲譽的喪失。


    十一、 改善你的命運 - 了凡四訓


    十二、 尋找足夠大的平臺 – 尋找機會與可持續發展


    十三、 學會發力 - 快、準、狠

    看準嵌入式系統設計可以作為傍身之技的話,那就要:
    快:下手要快,想到了就去做,趕緊去學;
    準:抓住8位mcu、can匯流排、arm7這樣的道路,不走錯;
    狠:用功要狠,白天黑夜,吃了吃飯睡覺時時想著;男人嘛,就是要對自己狠一點。

    十四、 團隊精神 – 並行處理的代名詞

 

---------------------------------------------------------------------------------------------   

 

  定義可從幾方面來理解嵌入式系統:

  ◆嵌入式系統是面向使用者、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統是與應用緊密結合的,它具有很強的專用性,必須結合實際系統需求進行合理的裁減利用。

  ◆嵌入式系統是將先進的計算機技術、半導體技術和電子技術和各個行業的具體應用相結合後的產 物,這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創新的知識整合系統。所以,介入嵌入式系統行業,必須有一個正確的定位。例如Palm 之所以在PDA領域佔有70%以上的市場,就是因為其立足於個人電子消費品,著重發展圖形介面和多工管理;而風河的Vxworks之所以在火星車上得以 應用,則是因為其高實時性和高可靠性。

  ◆嵌入式系統必須根據應用需求對軟硬體進行裁剪,滿足應用系統的功能、可靠性、成本、體積等要 求。所以,如果能建立相對通用的軟硬體基礎,然後在其上開發出適應各種需要的系統,是一個比較好的發展模式。目前的嵌入式系統的核心往往是一個只有幾K到 幾十K微核心,需要根據實際的使用進行功能擴充套件或者裁減,但是由於微核心的存在,使得這種擴充套件能夠非常順利的進行。

  實際上,嵌入式系統本身是一個外延極廣的名詞,凡是與產品結合在一起的具有嵌入式特點的控制系 統都可以叫嵌入式系統,而且有時很難以給它下一個準確的定義。現在人們講嵌入式系統時,某種程度上指近些年比較熱的具有作業系統的嵌入式系統,本文在進行 分析和展望時,也沿用這一觀點。

  一般而言,嵌入式系統的構架可以分成四個部分:處理器、儲存器、輸入輸出(I/O)和軟體(由於多數嵌入式裝置的應用軟體和作業系統都是緊密結合的,在這裡我們對其不加區分,這也是嵌入式系統和Windows系統的最大區別)。

相關文章