高手分享的嵌入式學習心得
學習有捷徑嗎?俺認為是有的,正確的道路就是捷徑。
就好象是爬山,如果有導游圖,那就能找到一條最正確的路線;如果沒有導游圖,自己瞎琢磨,東問西問,也未必能找到最佳的路線。
有時候回首前塵,會謂嘆,要是當時我這樣做就好了;這也說明了人生會有一個最優(yōu)解。
嵌入式系統(tǒng)的學習也是一樣,作為電子專業(yè)或者其它專業(yè)的學生來說,想要把嵌入式系統(tǒng)的學習搞好,走一條成功的人生道路,那應該怎么去做呢?俺試著分析看看。
當然人生的道路很多很多,嵌入式不可能是唯一的道路,也絕對不是最好的道路;這些都是因人而異的;
如果你沒有什么別的資源,俺主要指的是人脈,資金,需要靠技術吃飯,正好你學的是電子、自動化、通訊...這樣跟嵌入式相關的專業(yè),又正好喜歡技術,那么可以考慮把嵌入式當作自己的傍身之技來學習。這時尋求嵌入式系統(tǒng)學習的最優(yōu)解就有了意義。
一、 嵌入式系統(tǒng)的定義
根據(jù)網(wǎng)絡上搜索到的關于嵌入式系統(tǒng)的定義,結合自己對嵌入式系統(tǒng)的理解,把嵌入式系統(tǒng)定義如下:
1、 嵌入式系統(tǒng)簡單的說就是面向特定應用設計的專用計算機系統(tǒng);
2、 嵌入式系統(tǒng)與普通的PC或者notebook不同,嵌入式系統(tǒng)的外形尺寸、功耗、外部適配器等各種特征必須滿足應用的要求和限制;
3、 嵌入式系統(tǒng)的軟件包括操作系統(tǒng)燒錄在一塊電路板上;
4、 使用低功耗的X86級別的CPU,采用模塊化的設計,配置了最基本的計算機周邊配備而制成。這種計算機通常采用Windows操作系統(tǒng);
5、 嵌入式系統(tǒng)的CPU可以是:4位、8位、16位、32位;
6、 嵌入式系統(tǒng)應用廣泛,諸如:
1) 小家電
2) 汽車
3) 電梯
4) 電視
5) 錄像機或者VCD、DVD
6) mp3、mp4
7) 工業(yè)控制
8) 醫(yī)療設備
9) 衛(wèi)星
10) 電話
11) PDA
12) 飛行系統(tǒng)等等
13) ……
7、 嵌入式系統(tǒng)的體系結構:
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) 以太網(wǎng)
12) 嵌入式的操作系統(tǒng),例如:uc/os、linux、vxworks、wince、dos。。。
8、 嵌入式系統(tǒng)更多的表現(xiàn)為SoC的特點,也就是把整個系統(tǒng)都集成在一個芯片上,例如,ATMEL的arm7的芯片91sam7x128/256等;用戶可以獲得廉價而功能強大的嵌入式系統(tǒng);
二、 最正確的學習道路 - 從8位mcu到canbus到ARM7
第一步:熟悉8位mcu
個人的看法是,學習嵌入式的技術有個脈絡:8位mcu(51或者avr...)+can2.0B+arm7+arm9,學習的時候可以按照這個脈絡來進行;
作為低端的嵌入式系統(tǒng),選擇8位mcu作為入門是比較適中的,而8位mcu中,相比pic、avr、freescale等等8位單片機來說,又以選擇51核的單片機作為學習8位mcu的首選來更加合適。當然這個觀點是仁者見仁智者見智;如果需要理由的話,那么也許以下這些理由可以作為參考:
1. 51上積累了大量的優(yōu)秀的代碼和其它資源;網(wǎng)絡上這樣的資源太多了,幾乎就是不花錢的;
2. 生產51內核的單片機的廠家很多,比如:ATMEL、華邦、LG、飛利浦、STC(宏晶科技)、TI、…
3. 51單片機在細分低端市場,面向不同的行業(yè)應用,廠家推出了不同的產品,如LPC900系列,STC的12CXXXX系列;在功能、價格、功耗,體積,封裝、抗干擾等方面來滿足行業(yè)用戶的需求;例如,現(xiàn)在的51單片機越來越多的集成了A/D、D/A、SPI、I2C、PWM、內部時鐘、看門狗、eeprom、ISP/IAP等等,已經跟傳統(tǒng)的ATMEL的89C51/52有了很大的差別!功能越來越強大的同時成本越來越低,而且不擔心某個廠家缺貨...
4. 。。。。(還在不斷增加之中)
第二步:熟悉can2.0A/B,在精通51的基礎上,熟悉can2.0A/B
為什么是canbus而不是modbus bus、bitbus?
CAN是德國Bosch 公司為解決現(xiàn)代車輛中眾多的控制和數(shù)據(jù)交換問題,開發(fā)出一種CAN(Controller Area Network)現(xiàn)場總線通信結構。其主要特點是:
1. 8字節(jié)的短幀傳送,故傳輸時間短、抗干擾性強;
2. 高速,最高速度可達1Mbit/s;
3. 多主方式,多主之間又可以分成是主節(jié)點和次節(jié)點;各節(jié)點均可在任意時刻主動向網(wǎng)絡上的其他節(jié)點發(fā)送信息,不分主從,通信靈活;發(fā)送的時候總線自動仲裁主次;主節(jié)點占有優(yōu)先權;
4. 可以做到全區(qū)廣播、分區(qū)廣播和點對點通訊;
5. Can控制器自動過濾幀號不符的幀;大大減輕了CPU的負擔;
6. 具有多種錯誤校驗方式如CRC及其他校驗措施,數(shù)據(jù)出錯率極低;而且在嚴重錯誤的情況下,節(jié)點會自動離線,避免影響總線上其它節(jié)點;Rs485經常是一個節(jié)點影響了總線上所有的節(jié)點;
7. 采用無損壞的仲裁技術;
作為一種技術先進、可靠性高、功能完善、成本合理的遠程網(wǎng)絡通訊控制方式,CAN總線已被廣泛應用于各個行業(yè)之中。大致有以下這些行業(yè):
1、 汽車電子
2、 自動控制
3、 智能大廈
4、 電子系統(tǒng)
5、 紡織
6、 智能儀表
7、 醫(yī)療系統(tǒng)
8、 電梯
9、 安防監(jiān)控
10、 電源
11、 運動控制
12、 …等各領域中,取代了原來的落后的RS485的通訊方式。
bitbus/modbus在物理層上都是Rs485的。
第二步:熟悉ARM7,掌握ARM這個超級單片機(32位)
三、 直奔主題 - 不要穿著棉襖洗澡
學什么很重要,沒有必要穿著棉襖洗澡,直奔主題,要學就學最有用的東西。
比如單片機,學什么型號?市場上的單片機,有51、AVR、PIC、freescale等不同的系列,把任何一款單片機學會了玩通了那都是很不錯;
但是我個人認為還是51系列的單片機在中國使用最多,去中發(fā)問問哪款單片機出貨量最大就知道啦;
據(jù)說有些大學現(xiàn)在還在教授Z80,在論壇上爭論起來,有些人支持,有些人反對;支持的人認為這是一款很好的原型機,可以學到很多計算機的原理;
但是對于嵌入式系統(tǒng)的學習者,一款已經過時的技術學它做什么?難道學了不能致用是對的?
學習51不也一樣能了解計算機的基礎知識?而學好了51畢業(yè)出去就能生存;
大家都知道485總線要想可靠工作非專家不可,而現(xiàn)在canbus作為更加可靠性能更加卓越的總線技術,節(jié)點數(shù)量每年遞增;可以說,51+canbus能夠讓你如虎添翼;
那么,是不是去學習canbus要能獲得更加遠大的前途而不必在485上浪費寶貴的青春?答案顯然是前者。
畢業(yè)之前的大學n年+畢業(yè)設計就是為了邁出就業(yè)的第一步;第一步很重要。
人生不要有斷點,一步接著一步,現(xiàn)在邁出的一步就是為了下一步做好準備,甚至為了比較長遠的以后...
四、 把嵌入式系統(tǒng)分成模塊學習 - 庖丁怎樣解牛?
拿到一個電路設計的任務的時候,或者拿到一塊完整系統(tǒng)的電路板的時候,怎樣去分析它的系統(tǒng)構成呢?
作為一個電子系統(tǒng),它的構成通常是:
1. 單片機最小系統(tǒng)
2. 配置(內存、時鐘、看門狗、eeprom)
3. 開關量輸入
4. 開關量輸出
5. 模擬量輸入
6. 模擬量輸出
7. 人機界面(按鍵+液晶顯示/LED顯示)
8. 通訊接口和協(xié)議
因此設計的時候,或者分析的時候,要按照這個分類來選擇。
舉個例子:開關量的輸入輸出的擴展,有以下的方法:
1、 串口擴展
2、 并行擴展
那么,在系統(tǒng)設計的時候,到底是使用串行擴展還是并行擴展,就需要權衡性能和價格,而選擇一種最合適的擴展方法;
在《從51初學者到電子工程師》一書中,將把這些知識點列表出來。
在這個基礎上,按照這個思路,您再去構筑自己的知識體系。
其實,任何一門學問,難得就是入門;而入門,就是要有一個完整的知識體系;一開始這個知識體系僅僅是一個個點,到后來就能成為一套完整的體系,知識的網(wǎng)越織越密。
五、 盡可能獲得更多的信息 - 站在前人的肩膀上
當您拿到一個設計任務的時候,怎么入手呢?
要把這個任務按照模塊分解,再充分利用網(wǎng)絡上的資源,找到現(xiàn)成的或者類似的解決方案。
試舉一例:
《基于CAN總線的智能I/O讀寫模塊》
當你拿到這個任務的時候怎么著手呢?
1、 您會想到,哦can總線是什么東西啊,不知道;不過沒有關系,狗狗之;
哈哈,結果出來啦,原來是周立功先生推的can總線啊,知道知道;把周立功網(wǎng)站上的有關can的資料都下載下來學習;
2、 哦那原理圖怎么畫呢?再次狗狗之,不過這次要使用圖片;嗯但是我已經知道了,還有一個can總線控制器的芯片,sja1000,那就使用這個詞來搜索吧;
哈哈找到了,連89c5X+sja1000+82C250(總線收發(fā)器)都有了;哦還有一個復位電路,不過沒有關系,俺可以使用stc89C5X,內置看門狗和復位電路;
3、 剩下I/O讀寫模塊怎么辦呢?
哦模塊化的設計思路,想想看,老樹都說了什么?
I/O有多種的擴展方法,一種是串行、一種是并行,那我需要擴展嗎?算算I/O的數(shù)量,硬件還剩下哪些資源呢?
1、p0、p2被占用了
2、WR、RD也被占用了,哦仔細看看,int0也被sja1000的中斷占用了;
3、p1/p3加起來是16根口線,剩下16-3(RD、WR、int0)=13個口線;
4、看門狗喂狗需要一個(如果內置看門狗的可以不要)
還剩下13個;
現(xiàn)在需要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接口的端子也有了...
做到這些,硬件就差不多了
......
哦還有協(xié)議,嗯使用啥協(xié)議呢?嗯好像zlg那里有一個什么iCAN的協(xié)議,可是網(wǎng)站上沒有,怎么辦呢?老辦法,搜索看看,哦,老周那里有一本書講了ican的協(xié)議,嗯去互動出版社定購一本,過2天就能送到了...
不過代碼還沒有,嗯再搜搜看,要不就到穎特新上問問...
六、 大學階段掌握一門傍身之技取得先手之利 - 精通一門略通其它
看剛畢業(yè)的學生的簡歷,到處都是熟悉的字樣,比如:
……
熟練使用c51、protel;
了解ARM/ucos2/Linux
分析過ucos2內核代碼。
比較了解Linux底層硬件驅動軟件結構比較
做過一些嵌入式硬件驅動的設計
很熟悉網(wǎng)絡通信知識及網(wǎng)絡編程
……
實際上,對于企業(yè)來說,并不關心你學了多少的知識,而是關心你是否有一門比較精通的手藝,來了就能干活。
那么,該怎樣去做呢?俺覺得,應該是在精通一門手藝的情況下,略通其它。
嵌入式系統(tǒng)本身也是多方面的,硬件軟件都有,但是,要有自己的最強項,因為企業(yè)都是用你的最強項。面面俱到實際上對于在校的學生來說是不可能的。我認為,對于在校的學生,應該重點放在c語言的熟練上;一方面是因為硬件沒有實際的實踐,很難能拿得出手,當然實踐的成本也高;當然自己動手做一個學習板還是很有必要的,也不算很難;還有就是在企業(yè)中,軟件和硬件的配置基本上是1:4的情況;對于成熟產品,基本上,硬件修改的情況非常小,升級都是在軟件的功能的增加和完善上。
當然去強化自己的一門技術不等于放棄其它,而是說,要有重點的學習,要學會發(fā)力,把自己的精力集中在一門技術上;稍微大一點的企業(yè)都是有明確的分工的。
而如果能在大學學習的階段就能熟練掌握一門技藝,或者是c語言的編程,或者是原理圖和PCB,或者熟練掌握模擬電子...,那么就能很快找到嵌入式系統(tǒng)的開發(fā)工作,也就上道了。
七、 第一份工作很重要 – 哪怕去實驗室打雜也要做跟嵌入式沾邊的工作
第一份工作很重要,人生的第一步很重要,走好第一步,可以少走2~3年底的彎路;沒有走好,有可能這輩子就廢了;
工作了2~3年之后,用人單位看重的是你的工作經驗,直接影響到您的價值能不能升值;就象微軟不會招聘做物流的人去做軟件,如果您做的是機械設計,當然用人單位也不會讓您去做51的開發(fā);
然而,第一份工作能不能做嵌入式開發(fā),首先是您能不能在大學的4年內取得先手之利;先取得一些嵌入式開發(fā)的經驗,比如C51的編程等等;
如果您經驗也不是很豐富,一開始可以計較工資的高低,而是干了再說,哪怕是到實驗室打雜;
這樣也比干點別的再回過頭來做嵌入式的開發(fā)要強。
八、 怎么加強自己?- 時間規(guī)劃+勤奮
有一個明確的職業(yè)生涯的規(guī)劃,同時要有一個達到這個目標的可以實施的準確的時間表,F(xiàn)在競爭這么激烈,不付出超出常人的努力在現(xiàn)今的中國是不可能脫穎而出的;人太多了,競爭太激烈了。企業(yè)如此,個人也是如此;當然,真正的卓越的企業(yè)或者個人,更重要的是理念,怎樣去培養(yǎng)自己的核心競爭力!個人認為,簡單的說,那就是技術專家+行業(yè)專家。
年輕人往往對職業(yè)生涯的規(guī)劃迷迷茫茫;但是時間如白駒過隙一去不復返。如果說每個人的成就有大有小。善于思考是一方面,行動敏捷是一方面,抓緊時間,提高效率那則是最重要的因素之一。
九、 嵌入式系統(tǒng)設計的3個境界 - 熟練、熟能生巧、系統(tǒng)設計的思想
熟練:熟練掌握c語言、電路模塊、eda工具;
熟能生巧:干活多了,從中悟出很多的技巧;干得活又快又好,這是熟能生巧;
系統(tǒng)設計:不滿足于熟能生巧,而開始考慮,代碼重復使用,代碼設計的標準化、模塊化;使得后來的開發(fā)能在一個標準的平臺上進行;對嵌入式系統(tǒng)設計有了自己的獨到的見解。
也還可以使用另外的標準來作為嵌入式系統(tǒng)設計的境界:
可靠性高:在同樣的成本下,做出來的東西可靠性高于競爭對手;
可靠性高的情況下成本更低:能用比競爭對手成本更低的電路設計作出可靠性更高的產品;
在此基礎之上,功能更加強大,用戶使用更方便:進入到行業(yè)專家的境界了。
十、 細節(jié)決定成敗 – 精心設計硬件電路
對于電子工程師而言,當拿到一個datasheet,或者一個電路圖,或者設計的電路圖,首先是站在前人的肩膀上,盡量不去做重復的勞動;但是,要對每一個電阻、電容在電路中的作用心里很清楚-把可有可無的器件去掉。要是您對電路中的元器件的作用還不是很清楚,舉例,為什么上拉電阻是5.1K?換成1K行不行?換成10K行不行?什么是上拉?什么是強上拉?什么是弱上拉?去耦電容的作用是什么?這些都要做到清清楚楚。每一個細節(jié)構成可靠的產品;而一個細節(jié)的疏忽帶來的是大量的經濟的損失和聲譽的喪失。
十一、 改善你的命運 - 了凡四訓
十二、 尋找足夠大的平臺 – 尋找機會與可持續(xù)發(fā)展
十三、 學會發(fā)力 - 快、準、狠
看準嵌入式系統(tǒng)設計可以作為傍身之技的話,那就要:
快:下手要快,想到了就去做,趕緊去學;
準:抓住8位mcu、can總線、arm7這樣的道路,不走錯;
狠:用功要狠,白天黑夜,吃了吃飯睡覺時時想著;男人嘛,就是要對自己狠一點。
十四、 團隊精神 – 并行處理的代名詞
---------------------------------------------------------------------------------------------
定義可從幾方面來理解嵌入式系統(tǒng):
◆嵌入式系統(tǒng)是面向用戶、面向產品、面向應用的,它必須與具體應用相結合才會具有生命力、才更具有優(yōu)勢。因此可以這樣理解上述三個面向的含義,即嵌入式系統(tǒng)是與應用緊密結合的,它具有很強的專用性,必須結合實際系統(tǒng)需求進行合理的裁減利用。
◆嵌入式系統(tǒng)是將先進的計算機技術、半導體技術和電子技術和各個行業(yè)的具體應用相結合后的產 物,這一點就決定了它必然是一個技術密集、資金密集、高度分散、不斷創(chuàng)新的知識集成系統(tǒng)。所以,介入嵌入式系統(tǒng)行業(yè),必須有一個正確的定位。例如Palm 之所以在PDA領域占有70%以上的市場,就是因為其立足于個人電子消費品,著重發(fā)展圖形界面和多任務管理;而風河的Vxworks之所以在火星車上得以 應用,則是因為其高實時性和高可靠性。
◆嵌入式系統(tǒng)必須根據(jù)應用需求對軟硬件進行裁剪,滿足應用系統(tǒng)的功能、可靠性、成本、體積等要 求。所以,如果能建立相對通用的軟硬件基礎,然后在其上開發(fā)出適應各種需要的系統(tǒng),是一個比較好的發(fā)展模式。目前的嵌入式系統(tǒng)的核心往往是一個只有幾K到 幾十K微內核,需要根據(jù)實際的使用進行功能擴展或者裁減,但是由于微內核的存在,使得這種擴展能夠非常順利的進行。
實際上,嵌入式系統(tǒng)本身是一個外延極廣的名詞,凡是與產品結合在一起的具有嵌入式特點的控制系 統(tǒng)都可以叫嵌入式系統(tǒng),而且有時很難以給它下一個準確的定義,F(xiàn)在人們講嵌入式系統(tǒng)時,某種程度上指近些年比較熱的具有操作系統(tǒng)的嵌入式系統(tǒng),本文在進行 分析和展望時,也沿用這一觀點。
一般而言,嵌入式系統(tǒng)的構架可以分成四個部分:處理器、存儲器、輸入輸出(I/O)和軟件(由于多數(shù)嵌入式設備的應用軟件和操作系統(tǒng)都是緊密結合的,在這里我們對其不加區(qū)分,這也是嵌入式系統(tǒng)和Windows系統(tǒng)的最大區(qū)別)。
編輯:admin 最后修改時間:2018-05-18