第一篇:嵌入式學習心得
嵌入式學習心得
當今社會,嵌入式系統(tǒng)已經滲透到人們工作、生活中的各個領域,嵌入式處理器已占分散處理器市場份額的94%。而嵌入式Linux系統(tǒng)也蓬勃發(fā)展,不僅繼承了Linux源碼開放、內核穩(wěn)定高效、軟件豐富等優(yōu)勢,還具備支持廣泛處理器結構和硬件平臺、占有空間小、成本低廉、結構緊湊等特點。
我很幸運接觸了嵌入式,在嵌入式實驗我知道了構建嵌入式系統(tǒng)的開發(fā)環(huán)境明白了交叉編譯:交叉編譯的環(huán)境建立在宿主機上,而對應的開發(fā)板為目標機。為了使宿主機上開發(fā)的程序能夠方便的下載到目標機上運行,一般還要在宿主機上配置好網絡,使其支持NFS或tftp等網絡服務,從而達到兩臺機器之間的文件共享,知道了宿主機與目標機之間的關系:在嵌入式系統(tǒng)開發(fā)過程中,由于可執(zhí)行程序的編譯過程和執(zhí)行過程分別在宿主機和目標機上完成,因此實現宿主機和目標機之間的實時交互能夠大幅度提高嵌入式系統(tǒng)開發(fā)的效率。由于目標機也帶有操作系統(tǒng),因此可以通過實現不同機器之間的網絡共享來完成實時交互。宿主機開發(fā)程序,而目標機作為最后的執(zhí)行機。兩者在開發(fā)時需要交替結合進行。知道了UBOOT移植、UBOOT編譯、UBOOT燒寫。LINUX內核的移植、LINUX內核燒寫。LINUX驅動程序的編寫系統(tǒng)調用是操作系統(tǒng)內核和應用程序之間的接口,設備驅動程序是操作系統(tǒng)內核和機器硬件之間的接口.設備驅動程序為應用程序屏蔽了硬件的細節(jié),這樣在應用程序看來,硬件設備只是一個設備文件,應用程序可以像操作普通文件一樣對硬件設備進行操作.設備驅動程序是內核的一部分,它完成以下的功能:對設備初始化和釋放、把數據從內核傳送到硬件和從硬件讀取數據、讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據、檢測和處理設備出現的錯誤.在Linux操作系統(tǒng)下有兩類主要的設備文件類型,一種是字符設備,另一種是塊設備.字符設備和塊設備的主要區(qū)別是:在對字符設備發(fā)出讀/寫請求時,實際的硬件I/O一般就緊接著發(fā)生了,塊設備則不然,它利用一塊系統(tǒng)內存作緩沖區(qū),當用戶 進程對設備請求能滿足用戶的要求,就返回請求的數據,如果不能,就調用請求函數來進行實際的I/O操作.塊設備是主要針對磁盤等慢速設備設計的,以免耗費 過多的CPU時間來等待.、DM6446 USB驅動編寫。ARM+DSP雙處理器開發(fā)實驗。在這些實驗當中我遇到了很多問題,因為是第一次接觸linux,很多命令都不清楚,操作起來很不方便,使實驗進度很慢,并且很多命令也是比葫蘆畫瓢,根本不知道為什么這么用,所以導致命令不熟練,下次操作時依然需要回憶。在程序開發(fā)中我在課下熟悉了shell命令以后,對一般的操作也算了解,我明白了問題就如爬山:不怕慢就怕站,只要我慢慢積累我就會學到應該如何編寫我自己的程序,搭建我自己的嵌入式系統(tǒng)。盡管我們已經懂得了一些皮毛但是前方的路依然任重道遠,要想把我們專業(yè)的優(yōu)勢發(fā)揮出來就需要軟硬件結合,這無疑是一次巨大的契機,我感覺在結
課以后我們一定仔細想在實驗中做的不足,以及實驗中給我的資源我如何合理的應用。畢竟學無止境,我也看看其他論壇上應該建議我們如何學習嵌入式,但是眾說紛紜,我不應該關注別人做了什么,但是我應該明白我的每一次付出會有什么收獲,畢竟再多的參考也比不上你的實際情況,正如我們的dm6446它的學習方式與一般的arm還是有區(qū)別的,所以要因材施教。其實在你想做嵌入式Linux的時候,要對自己有信心。很可能自己以前學習的不是這個專業(yè)或者以前沒有接觸過,就像我一樣,我以前也沒接觸過嵌入式,一旦我們確定了自己要做嵌入式,我想擺在我們面前的最大的一個難題就是,嵌入式對我們很模糊,好想心理面有好多好多陰霾,不用怕,請相信自己,新手都是這樣,有疑團,才會激發(fā)我們探索的動力和激情。相信自己,在不久的將來自己會摸到嵌入式的棱角的,摸清他的面貌的。把學習穿插到日常生活中。一旦決定要學,就從現在開始學習,永遠不要希望人的一生會騰出一段時間來讓你去專門學習嵌入式的,就像當你出生的時候,永遠不可能會專門騰出一段時間來讓你專門學走路,最終情況是你學走路的同時很可能也在學習說話,學習吃飯。所以,對于學生來說,永遠不要試圖把學習嵌入式挪到假期,因為你不能預料到假期你會發(fā)生什么而耽誤你學習的時間。需要用到什么學什么。不要企圖把Linux,arm等所謂的什么教程之內的書看完了再去做開發(fā)。個人覺得Linux,只要知道大概,只要知道簡單的命令,會用就可以了,但是gcc,gdb一定要掌握,然后就是要掌握嵌入式Linux和Linux開發(fā)環(huán)境的配置。嵌入式Linux是在開發(fā)板里面的Linux。而單純的說Linux說的是PC上的Linux。遇到問題,我們就去解決,要解決,我們就可以翻書,查資料,這樣既可以縮短項目開發(fā)周期,又可以學習,這樣就避免了可能你把一本關于Linux的書看完了,你還不知道如何去做嵌入式Linux開發(fā)。不管你要做什么開發(fā),裝上Linux后,請安裝英文版的,并且盡量在無圖形界面寫工作。因為很多公司都明確禁止用Linux圖形界面和中文版的。不管做什么開發(fā),應用開發(fā),或者是驅動開發(fā),都要先編譯內核,因為有好多文件是只有你編譯內核之后才能產生的,而這些文件,很可能就是你要用的。做應用開發(fā),首先用從讀懂驅動入手。不要求你會寫驅動,但是起碼要讀懂驅動,這樣才有助于應用開發(fā)除非你的嵌入式開發(fā)板是跑裸機,也就是沒有Linux系統(tǒng),你可以操作arm的寄存器,可以直接操作硬件,比如JTAG仿真就是。其他情況,一旦你有Linux系統(tǒng),你的程序時不可能直接操作硬件的。明白這一點,你就不會向我一樣,開始做嵌入式Linux應用的時候以為可以和單片機一樣,直接控制引腳來寫程序了。有了Linux,用主要用的系統(tǒng)提供給用戶的接口。
要時刻把握每一次提高自己的機會!
第二篇:嵌入式學習心得
LPC2136是ARM7架構,是32位地址總線和數據總線,可以尋址的范圍為2的32次方
=4GB(0x00000000~0xFFFFFFFF)
我們的程序在哪里運行?
還記得我們在做“跑馬燈”和“蜂鳴器”兩個實驗,用ads1.2中建立工程文件的時候有設置三個地址:
RO Base :0x40000000
RW Base :0x40001000
Image entry point :0x40000000
開始沒有講為什么,通過上面的系統(tǒng)存儲器映射圖解不知大家是否有所悟。LPC2136內部自帶32KB RAM和256KB FLASH。
32KB RAM分布在整個CPU存儲器空間的0x40000000~0x40007FFF;
256KB FLASH分布在整個CPU存儲器空間的0x00000000~0x0003 FFFF;
RO Base是告訴編譯系統(tǒng)把編譯生成的目標碼放在0x40000000起始的位置,也就是代碼段存放在0x40000000開始的位置。
RW Base告訴編譯系統(tǒng)把各種變量(常量放在RO開始的位置),堆棧放在0x40001000起始的位置。
Image entry point:是告訴編譯系統(tǒng)程序入口點在0x40000000,即程序從這個地址開始執(zhí)行。(此部分在附錄二中細說)
Flash與RAM的區(qū)別
通過以上所說,好像FLASH在這里沒什么用,如果你的RO地址定位在RAM中,那么FLASH確實沒有用。但FLASH是必須的功能部件。
Flash的作用也許要從其與RAM的區(qū)別說起:
區(qū)別一:RAM是易失性存儲器,Flash是非易失性存儲器。通俗的說,存儲在RAM中的數據掉電后數據丟失;而存儲在FLASH中的數據掉電后任然保持。(必須通過工具或特殊命令來擦除)
區(qū)別二:RAM是可讀寫存儲器,Flash只讀存儲器。(也許有人要問,Flash難道不能寫嗎?Flash可以寫,但不能象RAM一樣做簡單賦值操作,必須通過Flash寫命令寫,而且寫入數據的最小單位為512字節(jié),即一個扇區(qū))
區(qū)別三:RAM訪問速度快,而Flash訪問速度慢的多。
區(qū)別四:RAM價格昂貴,Flash便宜。
FLASH有何用途
我們一般在調試程序的時候為了提高開發(fā)進度,都把程序放在RAM中調試,在RAM中調試有一個缺陷就是每次上電必須下載程序到板子上,當產品的各個模塊調試OK,產品就要實現脫機功能,即把程序燒寫到FLASH中,這樣就不需要每次上電加載程序。我們手中拿的手機,在開發(fā)階段都是在RAM(SDRAM)中調試的,開發(fā)完成,要發(fā)布的時候就把程序燒到FLASH,這樣我們開機有能運行FLASH的程序。
第三篇:嵌入式學習心得
嵌入式學習心得
時間過的緊快,在粵嵌教育已經培訓有5個月了,培訓期間收獲很多,也認識了班上的學習大神,經過系統(tǒng)的學習,老師的細心指導,我的付出努力,對于嵌入式上,學到很多實用的知識,在動手操作能力也加強了,不僅在專業(yè)技術方面有了很大進步,而且在實踐操作方面我也對嵌入式有了更深入的了解。也許這5個月是我在外面學習和生活最寶貴的時間。
在校兩年,讀于電子信息工程技術專業(yè)的我,就覺得這專業(yè)學的知識太廣了,不管基礎還是動手操作,都要比較靈活。在校期間,學習單片機,傳感器,C語言,嵌入式應用技術等課程。感覺學起來,對我來說接受還是比較快的,那時就有想過:學的多不如學的巧,也許在校對課程多于理論為主,理解它的原理和基本編程方式。其實,我還是有努力去學的,可以說,在校科任老師都教會我很多專業(yè)知識,為我將來的學習和發(fā)展打好基礎。
在大三期間,為了更明確自己要走的方向,去培訓嵌入式軟件開發(fā)。也許將要投身嵌入式行業(yè)的我,就注定這條路要付出很多時間和精力,但可能我好求比較強,接受還行,就不停給自己打氣,努力!要去培訓嵌入式時,我從網上也對它有更加的理解,也看下大2學的嵌入式應用技術書,嵌入式系統(tǒng)是軟件和硬件的綜合體,以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統(tǒng)對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統(tǒng)。剛開始嵌入式學習,對Linux系統(tǒng)的知識加于鞏固。一些簡單的代碼,C語言,對于嵌入式軟件還是硬件開發(fā)的人員,對C語言的掌握這個是必需的,特別是對于以后致力于嵌入式軟件開發(fā)的人,現在絕大部分都是用C語言。在下來幾個月就對Linux系統(tǒng),數據結構、系統(tǒng)移植的方法、A8的體系結構、Linux內核及驅動設計、android、C+Java的JNI應用編程的系統(tǒng)學習。在每學個階段就作一個考試,對前面所學的知識進行復習,有些會做一個簡單的小項目,學以致用。知識量還是比較多,但教學也比較快,有些知識還沒消化完,第二天又接受新知識,對于能在課上就可以對知識完全懂的并不多,晚上都用一兩個小時來復習。經過5個月系統(tǒng)的學習,嵌入式技術方面有了很大進步,實踐操作方面也對嵌入式有了更深入的了解。在最后一個月,基于A8(S5PV210)的嵌入式智能家居系統(tǒng)制作。
下面我談談在粵嵌教育的培訓感受,我培訓的地點是在科學城粵嵌教育培訓中心的多媒體課室里,這里有學習環(huán)境非常好,在緊張的學習的過程中,你可以得到名師的指導,也可以體會到一流企業(yè)高質量的培訓。在課堂上,老師們認真的演講,以及手把手地教導,使每個學生都能夠扎實地掌握到嵌入式的各方面的知識。而粵嵌教育的老師也是操作實踐為主,實踐是非常重要的,只有把知識掌握到位,才能達到學習的目的。感謝粵嵌教育機構,感謝粵嵌教育老師。
第四篇:嵌入式學習心得
嵌入式學習心得
如何學習嵌入式系統(tǒng)(基于ARM平臺)
前言
網上看到眾多網友都問了關于嵌入式系統(tǒng)方面的很多問題,很多都可在這里找到答案,希望我的這篇文章能給他們以啟發(fā)。也請大家不要輕易轉載。
一、嵌入式系統(tǒng)的概念
著重理解“嵌入”的概念
主要從三個方面上來理解。
1、從硬件上,將基于CPU的處圍器件,整合到CPU芯片內部,比如早期基于X86體系結構下的計算機,CPU只是有運算器和累加器的功能,一切芯片要造外部橋路來擴展實現,象串口之類的都是靠外部的16C550/2的串口控制器芯片實現,而目前的這種串口控制器芯片早已集成到CPU內部,還有PC機有顯卡,而多數嵌入式處理器都帶有LCD控制器,但其種意義上就相當于顯卡。比較高端的ARM類Intel Xscale架構下的IXP網絡處理器CPU內部集成PCI控制器(可配成支持4個PCI從設備或配成自身為CPI從設備);還集成3個NPE網絡處理器引擎,其中兩個對應于兩個MAC地址,可用于網關交換用,而另外一個NPE網絡處理器引擎支持DSL,只要外面再加個PHY芯片即可以實現DSL上網功能。IXP系列最高主頻可以達到1.8G,支持2G內存,1G×10或10G×1的以太網口或Febre channel的光通道。IXP系列應該是目標基于ARM體系統(tǒng)結構下由intel進行整合后成Xscale內核的最高的處理器了。
2、從軟件上前,就是在定制操作系統(tǒng)內核里將應用一并選入,編譯后將內核下載到ROM中。而在定制操作系統(tǒng)內核時所選擇的應用程序組件就是完成了軟件的“嵌入”,比如WinCE在內核定制時,會有相應選擇,其中就是wordpad,PDF,MediaPlay等等選擇,如果我們選擇了,在CE啟動后,就可以在界面中找到這些東西,如果是以前PC上將的windows操作系統(tǒng),多半的東西都需要我們得新再裝。
3、把軟件內核或應用文件系統(tǒng)等東西燒到嵌入式系統(tǒng)硬件平臺中的ROM中就實現了一個真正的“嵌入”。
以上的定義是我在6、7年前給嵌入式系統(tǒng)下自話側重于理解型的定義,書上的定義也有很多,但在這個領域范圍內,誰都不敢說自己的定義是十分確切的,包括那些專家學者們,歷為畢竟嵌入式系統(tǒng)是計算機范疇下的一門綜合性學科
二、嵌入式系統(tǒng)的分層與專業(yè)的分類。
嵌入式系統(tǒng)分為4層,硬件層、驅動層、操作系統(tǒng)層和應用層。
1、硬件層,是整個嵌入式系統(tǒng)的根本,如果現在單片機及接口這塊很熟悉,并且能用C和匯編語言來編程的話,從嵌入式系統(tǒng)的硬件層走起來相對容易,硬件層也是驅動層的基礎,一個優(yōu)秀的驅動工程師是要能夠看懂硬件的電路圖和自行完成CPLD的邏輯設計的,同時還要對操作系統(tǒng)內核及其調度性相當的熟悉的。但硬件平臺是基礎,增值還要靠軟件。
硬件層比較適合于,電子、通信、自動化、機電一體、信息工程類專業(yè)的人來搞,需要掌握的專業(yè)基礎知識有,單片機原理及接口技術、微機原理及接口技術、C語言。
2、驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對操作系統(tǒng)內核十分的精通,以便其所寫的驅動程序在系統(tǒng)調用時,不會獨占操作系統(tǒng)時間片,而導至其它任務不能動行,不懂操作系統(tǒng)內核架構和實時調度性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水平都達不到,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程序運行后,再打開一個程序時,要不就是中斷以前的程序,要不就是等上一會才能運行后來打開的程序。想做個好的驅動人員沒有三、四年功底,操作系統(tǒng)內核不研究上幾編,不是太容易成功的,但其工資在嵌入式系統(tǒng)四層中可是最高的。
驅動層比較適合于電子、通信、自動化、機電一體、信息工程類專業(yè)尤其是計算機偏體系結構類專業(yè)的人來搞,除硬件層所具備的基礎學科外,還要對數據結構與算法、操作系統(tǒng)原理、編譯原理都要十分精通了解。
3、操作系統(tǒng)層,對于操作系統(tǒng)層目前可能只能說是簡單的移植,而很少有人來自已寫操作系統(tǒng),或者寫出缺胳膊少腿的操作系統(tǒng)來,這部分工作大都由驅動工程師來完成。操作系統(tǒng)是負責系統(tǒng)任務的調試、磁盤和文件的管理,而嵌入式系統(tǒng)的實時性十分重要。據說,XP操作系統(tǒng)是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟件所自己的女媧Hopen操作系統(tǒng)估計也得花遇幾百人年才能搞定。因此這部分工作相對來講沒有太大意義。
4、應用層,相對來講較為容易的,如果會在windows下如何進行編程接口函數調用,到操作系統(tǒng)下只是編譯和開發(fā)環(huán)境有相應的變化而已。如果涉及Java方面的編程也是如此的。嵌入式系統(tǒng)中涉及算法的由專業(yè)算法的人來處理的,不必歸結到嵌入式系統(tǒng)范疇內。但如果涉及嵌入式系統(tǒng)下面嵌入式數據庫、基于嵌入式系統(tǒng)的網絡編程和基于某此應用層面的協(xié)議應用開發(fā)(比如基于SIP、H.323、Astrisk)方面又較為復雜,并且有難度了。
三、目標與定位。
先有目標,再去定位。
學ARM,從硬件上講,一方面就是學習接口電路設計,另一方面就是學習匯編和C語言的板級編程。如果從軟件上講,就是要學習基于ARM處理器的操作系統(tǒng)層面的驅動、移植了。這些對于初學都來說必須明確,要么從硬件著手開始學,要么從操作系統(tǒng)的熟悉到應用開始學,但不管學什么,只要不是純的操作系統(tǒng)級以上基于API的應用層的編程,硬件的寄存器類的東西還是要能看懂的,基于板級的匯編和C編程還是要會的。因此針對于嵌入式系統(tǒng)的硬件層和驅動程的人,ARM的接口電路設計、ARM的C語言和匯編語言編程及調試開發(fā)環(huán)境還是需要掌握的。
因此對于初學者必然要把握住方向,自己的目標是什么,自己要在那一層面上走。然后再著手學習較好,與ARM相關的嵌入式系統(tǒng)的較為實際的兩個層面硬件層和驅動層,不管學好了那一層都會很有前途的。
如果想從嵌入式系統(tǒng)的應用層面的走的話,可能與ARM及其它體系相去較遠,要著重研究基嵌入式操作系統(tǒng)的環(huán)境應用與相應開發(fā)工具鏈,比如WinCe操作系統(tǒng)下的EVC應用開發(fā)(與windows下的VC相類似),如果想再有突破就往某些音視頻類的協(xié)議上靠,比如VOIP領域的基于SIP或H.323協(xié)議的應用層開發(fā),或是基于嵌入式網絡數據庫的開發(fā)等等。
對于初學者來講,要量力而行,不要認為驅動層工資高就把它當成方向了,要結合自身特點,嵌入式系統(tǒng)四個層面上那個層面上來講都是有高人存在,當然高人也對應的高工資,我是做硬件層的,以前每月工資中個人所得稅要被扣上近3千大元,當然我一方面充當工程師的角色,一方面充當主管及人物的角色,兩個職位我一個人干,但上班時間就那些。硬件這方面上可能與我PK的人很少了,才讓我拿到那么多的工資。
四、開發(fā)系統(tǒng)選擇。
很多ARM初學者都希望有一套自己能用的系統(tǒng),但他們住住會產生一種錯誤認識就是認為處理器版本越高、性能越高越好,就象很多人認為ARM9與ARM7好,我想對于初學者在此方面以此入門還應該理智,開發(fā)系統(tǒng)的選擇最終要看自己往嵌入式系統(tǒng)的那個方向上走,是做驅動開發(fā)還是應用,還是做嵌入式系統(tǒng)硬件層設計與板級測試。如果想從操作系統(tǒng)層面或應用層面上走,不管是驅動還是應用,那當然處理器性能越高越好了,但這個東西自學,有十分大的困難,不是幾個月或半年或是一年二年能搞定的事。
在某種意義上請,ARM7與9的差別就是在某些功能指令集上豐富了些,主頻提高一些而已,就比如286和386。對于用戶來講可能覺查不到什么,只能是感覺速度有些快而已。
ARM7比較適合于那些想從硬件層面上走的人,因為ARM7系列處理器內部帶MMU的很少,而且比較好控制,就比如S3C44B0來講,可以很容易將Cache關了,而且內部接口寄存器很容易看明白,各種接口對于用硬件程序控制或AXD單步命令行指令都可以控制起來,基于51單片機的思想很容易能把他搞懂,就當成個32位的單片機,從而消除很多51工程師想轉為嵌入式系統(tǒng)硬件ARM開發(fā)工程師的困惑,從而不會被業(yè)界某此不是真正懂嵌入式爛公司帶到操作系統(tǒng)層面上去,讓他們望而失畏,讓業(yè)界更加缺少這方面的人才。
而嵌入式系統(tǒng)不管硬件設計還是軟件驅動方面都是十分注重接口這部分的,選擇平臺還要考察一個處理器的外部資源,你接觸外部資源越多,越熟悉他們那你以后就業(yè)成功的機率就越高,這就是招聘時所說的有無“相關技能”,因為一個人不可能在短短幾年內把所有的處理器都接觸一遍,而招聘單位所用的處理器就可能是我們完全沒有見過的,就拿臺灣數十家小公司(市價幾千萬)的公司生產的ARM類處理器,也很好用,但這些東西通用性太差,用這些處理器的公司就只能招有相關工作經驗的人了,那什么是相關工作經驗,在硬件上講的是外圍接口設計,在軟件上講是操作系統(tǒng)方面相關接口驅動及應用開發(fā)經驗。我從業(yè)近十年,2000年ARM出現,我一天始做ARM7,然后直接跑到了Xscale(這個板本在ARM10-11之間),一做就是五年,招人面試都不下數百人,在這些方面還是深有體會的。
我個人認為三星的S3C44b0對初學者來說比較合適,為什么這么說哪?因為接口資源比較豐富,技術成熟,資料較多,應該十分適合于初學者,有問題可能很容易找人幫且解決,因為大多數人都很熟悉,就如同51類的單片機,有N多位專家級的人物可以給你幫忙,相關問題得以很快解答,所然業(yè)界認為這款ARM都做用得爛了,但對于初學者來,就卻是件好事。
因此開發(fā)系統(tǒng)的選擇,要看自己的未來從來目標方向、要看開發(fā)板接口資源、還要看業(yè)界的通用性。
五、如何看待培訓。
首先說說我自己,我目前從業(yè)近十年,與國內嵌入式系統(tǒng)行業(yè)共同起步,一直站在嵌入式系統(tǒng)行業(yè)前沿,設計過多款高端嵌入式系統(tǒng)平臺產品并為眾多公司提供過解決方案,離職前為從事VOIP的美資公司設計IP-PBX,歷任項目經理、項目主管、技術總監(jiān)、部門經理,積累眾多人脈,并集多年經驗所得,考慮到學生就業(yè)與公司招人的不相匹配,公司想招人招不到,而學生和剛畢業(yè)的工程師想找份工作也不太容易,于此力創(chuàng)知天行科技有限公司,開展嵌入式系統(tǒng)教育培訓。
因一線的科研人員和一線的教師不相接觸,導至國內嵌入式人才缺乏,國外高校的技術超前于業(yè)界公司,而國內情況是業(yè)界公司方面的嵌入式系統(tǒng)技術要遠遠領先于高校。為架構業(yè)界與高校溝通的橋梁,把先進技能帶給高校學子,為學生在就業(yè)競爭中打造一張王牌,并為業(yè)界工程師快速提升實現自我創(chuàng)造機遇,我就這樣辭去了外企年薪20多萬的職位,做嵌入式系統(tǒng)方面的培訓了。
對于培訓來講,是花錢來買時間,很多工程師都喜歡自己學,認為培訓不值,這也是有可能的,純?yōu)橘嶅X的培訓當然不會太有價值,但對于實力型的培訓他們可能就虧大了,有這樣一筆帳不知他們算過沒有,如果一個一周的培訓,能帶給他們自學兩年后才能掌握的知識,在培訓完后他們用三個月到半年時間消化培訓內容,這樣他會省約至少一年半的時間來學其它的或重新站在另一個高度上工作,那么他將最遲一年后會拿到他兩年后水平所對應的工資,就是在工資與水平對應的關系上比同批人縮短一年,每月按最少1千計,再減去培訓費用至少多1.0萬,同時也省了一年時間,不管是休閑也好,再繼續(xù)提高也好,總之是跑到了隊伍的前面了。
另一層面上講,對于新人的培訓相當于他們?yōu)樽约禾崆百I了份失業(yè)保險,有師傅會帶領他們入道,我今年暑假時班里最年輕的一個學生是大二的,今年才上大三,這學期才剛學單片機,但現在ARM方面的編程工作已經搞得有聲有色了,再過一年多畢業(yè),他還會失業(yè)嗎?
再者通過培訓,你可以知道很多業(yè)界不為常人所知的事,同時也為自己找了個師傅,就比如說,兩個工程師分別用S3C2410和PXA255來做手持設備,同樣兩人都工作四年,再出去找工作,兩人工資可能最多可相差一倍,為什么?這就是業(yè)界不為常人所知的規(guī)則,2410屬于民品,被業(yè)界用爛了,做產品時成本特敏感,當然也對人才成本敏感了,PXA255是intel的東西,一個255 CPU能買三個2410,一直被業(yè)界定義為貴族產品,用的公司都是大公司或為軍方服務的公司,不會在乎成本,只要把東西做好,一切都好說,但這方面做的人也少啊,因為開發(fā)系統(tǒng)貴啊。
對于說為自已找了個好師傅,我想是這樣的,因為同級工程師間存在著某此潛在的競爭關系,有很多人不愿意把自己知道的東西教給別人,這意味著他將要失業(yè),就是所說的教會徒弟,餓死師傅,但對于我們這些人就不存在這樣的關系了,我是在嵌入式系統(tǒng)平臺設計上走到了一定程序,目前在國內這塊的技術上已經是自己很難再突破自己,因此很多東西我對大家都是OPEN的,就比如說下面那部分關于接口設計中所提到的時序接口東西,我要是不講,卻使是高級硬件工程師我想也幾乎只有10%的人能知道吧。
六、成為高級嵌入式系統(tǒng)硬件工程師要具備的技能。
首先我聲明,我是基于嵌入式系統(tǒng)平臺級設計的,硬件這個方向我相對來講比較有發(fā)言權,如果是其它方面所要具備的基本技能還要和我們培訓中心其它專業(yè)級講師溝通,或去網站看看www.tmdps.cn/ ”,而且出版社還提供了一個非常好的路線圖:http://www.tmdps.cn/guide/guide_linux.php。
四、選擇一個適合你的Linux發(fā)行版本:目前全球有超過1百多個Linux發(fā)行版本,在國內也能找到十幾個常見版本。如何選擇請根據你的需求和能力,Redhat Linux 和Debian Linux是網絡管理員的理想選擇。對于英語不是很好的讀者紅旗Linux、中標Linux這些中文版本比較適合。現在一些Linux網站有一些Linux版本的免費下載,這里要說的是并不適合Linux初學者。
五、養(yǎng)成在命令行下工作: 一定要養(yǎng)成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉后,您未來的學習之路將是以指數增加的方式增長的。從網管員來說,命令行實際上就是規(guī)則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的調制解調器線路,它也能操縱幾千公里以外地遠程系統(tǒng)。
六、選擇一個適合你的Linux社區(qū): 隨著Linux應用的擴展,出現了不少Linux社區(qū)。其中有一些非常優(yōu)秀的社區(qū):www.linuxforum.net(國內最高水平GNU站點)、http://www.chinaunix.net/(中國最大的Unix技術社區(qū)),但是這幾個論壇往往是Linux高手的舞臺,如果在探討高級技巧的論壇張貼非常初級的問題經常會沒有結果。
七、勤于實踐: 要增加自己Linux 的技能,只有通過實踐來實現了。所以,趕快找一部計算機,趕快安裝一個 Linux 發(fā)行版本,然后進入精彩的Linux世界。相信對于你自己的 Linux 能力必然大有斬獲。此外,人腦不像計算機的硬盤一樣,除非硬盤壞掉了或者是資料被你抹掉了,否則儲存的資料將永遠而且立刻的記憶在硬盤中。在人類記憶的曲線中,你必須要不斷的重復練習才會將一件事情記得比較熟。同樣的,學習Linux 也一樣,如果你無法經常學習的話,學了后面的,前面的忘了。你對Linux命令熟悉后你可以開始搭建一個小的Linux網絡,這是最好的實踐方法。Linux是網絡的代名詞,Linux網絡服務功能非常強大,不論是郵件服務器、Web服務器、DNS服務器等都非常完善。當然你不需搭建所有服務,可以慢慢來。需要說明的是這個Linux網絡對于初學者有兩三臺計算機即可,其中一臺計算機最好安裝Windows系統(tǒng)。自己多動手,不要非要等著別人幫你解決問題。
八、如何得到聯機幫助:和私有操作系統(tǒng)不同,各個Linux的發(fā)行版本的技術支持時間都較短,這對于Linux初學者是往往不夠的。其實當你安裝了一個完整的Linux系統(tǒng)后其中已經包含了一個強大的幫助,只是可能你還沒有發(fā)現和使用它們的技巧。
1.主流Linux發(fā)行版都自帶非常詳細的文檔(包括手冊頁和FAQ),從系統(tǒng)安裝到系統(tǒng)安全,針對不同層次的人的詳盡文檔,仔細閱讀文檔后40%問題都可在此解決。
2.查閱經典工具書和Howto,特別是Howto是全球數以萬計的Linux、Unix的經驗總結非常有參考價值通常40%的問題同樣可以解決。
九、在Linux論壇獲取幫助:如果上面的措施沒有解決問題,此時你就需要Linux社區(qū)的幫助了。Linux的使用者一般都是專業(yè)人士,他們有著很好的電腦背景且愿意協(xié)助他人,Linux高手更具有鼓勵新手的文化精神。如何在Linux社區(qū)獲得幫助,需要說明的是你要有周全的思考,準備好你的問題,不要草率的發(fā)問,否則只會得到到草率的回答或者根本得 不到任何答案。越表現出在尋求幫助前為解決問題付出的努力,你越能得到實質性的幫助。最好先搜尋一下論壇是否有您需要的文章。這樣可以獲得事半功倍的效果。下面筆者在論壇看到的一個好問題:“安裝紅旗4.0 后,系統(tǒng)紫光輸入法自帶的雙拼方案和我的習慣不一樣,如何自定義雙拼方案解決?謝謝?”這個問題很簡練,筆者五分鐘后就給出了解決方法:“首先備份原文件到其他目錄,然后刪掉/usr/local/unispim/unispimsp.ksc,編輯/usr/local/unispim/unispimsp.ini,最后重啟動計算機,生成新的unispimsp.ksc”另外得到回復后如果問題解決,向幫助過你的人發(fā)個說明,讓他們知道問題是怎樣解決的,這種補充有助于他人在郵件列表/新聞組/論壇中搜索對你有過幫助的完整解決方案,這可能對他們也很有用。下面看看一個讓人無法回答的問題:“救命各位高手,向你們請教一些問題:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服務器,謝謝” 這樣的問題我想即使Linux高手也很難快速準確精練的回答你。你需要提供精確有效的信息。這并不是要求你簡單的把成噸的出錯代碼或者數據完全轉儲摘錄到你的提問中。如果你有龐大而復雜的測試條件,盡量把它剪裁得越小越好。可能你會遇到這種情況,對于一個問題會出現不同內容回答,這時你需要通過實踐來驗證。另外把這個問題放在其他Linux社區(qū)請求幫助也是一種選擇。如果得不到答案,請不要以為我們覺得無法幫助你。有時只是看到你問題的人不知道答案罷了。這時換一個社區(qū)是不錯的選擇。另外發(fā)問的時候一定要注意到某些禮節(jié)。因為Linux社區(qū)是一個松散的組織、也不承擔回復每個帖子的義務。它不是技術支持。
十、用Unix思維學習Linux:Linux是參照Unix思想設計的,理解掌握Linux必須按照Unix思維來進行。思想性的轉變比暫時性的技術提高更有用,因為他能幫助你加快學習速度。
十一、學習專業(yè)英文:如果你想深入學習Linux,看不懂因為文檔實在是太難了。寫的最好的,最全面的文檔都是英語寫的,最先發(fā)布的技術信息也都是用英語寫的。即便是非英語國家的人發(fā)布技術文檔,也都首先翻譯成英語在國際學術雜志和網絡上發(fā)表。安裝一個新的軟件時先看README,再看INSTALL然后看FAQ,最后才動手安裝,這樣遇到問題就知道為什么。如果說明文檔不看,結果出了問題再去論壇來找答案反而浪費時間。
十二、最后是Linux學習的路線圖: 1. 掌握至少50個以上的常用命令。
2. 熟悉Gnome/KDE等X-windows桌面環(huán)境操作。
3. 掌握.tgz、.rpm等軟件包的常用安裝方法
4. 學習添加外設,安裝設備驅動程序(比如網卡)5. 熟悉Grub/Lilo引導器及簡單的修復操作。
6. 熟悉Linux文件系統(tǒng)和目錄結構。
7. 掌握vi,gcc,gdb等常用編輯器,編譯器,調試器。Linux下編程,主要是選用一個文本編輯工具(如vi eclipse nano gedit等)編寫,再用GCC編譯鏈接,最后用gdb調試。8. 理解shell別名、管道、I/O重定向、輸入和輸出以及shell腳本編程。9. 學習Linux環(huán)境下的組網。
十三、深入學習linux的大致方向
1.文件系統(tǒng):linux的相關的系統(tǒng)設定,各種linux環(huán)境下的軟件的使用與調試。這類知識是基礎,但并不簡單,學好了,絕對可以當講師的。
2.網絡服務:linux這種類UNIX的操作系統(tǒng)其另一個作用域是網絡服務器。linux本身自帶幾乎所有網絡上的用得到的服務,可以充當任何網絡服務器,比如DNS、DHCP、ftp、NFS、Proxy等等。而且其特點是,所有這些服務的配置與設定都可以通過文本形式的配置文件進行配置。所以學好linux下網絡服務的配置與使用,完全可以當CIO(首席信息官)了,因為已經具備linux網絡工程師的能力了。3.軟件設計:linux是開源的大環(huán)境,也是較原始的編成環(huán)境,其下的C/C++、PHP等都是比windows下更純語言。但linux下高級的開發(fā)環(huán)境較少,不像VC等工具好使,所以linux下的軟件工程師要具備的知識更多。要是學好了linux下的軟件設計,也算編成是高手了。
linux這三大塊知識的學習不相互影響,但也有相互依賴和促進的作用,想深入某一個領域,不見得要其它領域都掌握,但建議也對其它領域也有所涉及,會有事半功倍的效果。
十四、學習嵌入式linux的三個方向
1、嵌入式linux應用軟件開發(fā)
2、linux內核的剪裁和移植
3、嵌入式linux底層驅動的開發(fā)
無論選擇哪一方向,基本的linux的知識是需要具備的,其他還需要掌握的知識有ARM(最常用的一款嵌入式處理器)和C語言編程,每一方面知識的掌握熟練程度都最終決定了個人進行嵌入式linux開發(fā)的綜合能力。
嵌入式Linux學前建議(初學者必讀)
目前,Linux作為嵌入式系統(tǒng)的主力軍,廣泛應用于消費類電子、工業(yè)控制、軍工電子、電信/網絡/通訊、航空航天、汽車電子、醫(yī)療設備、儀器儀表等相關行業(yè)。隨著嵌入式行業(yè)的迅猛發(fā)展,嵌入式Linux憑借其系統(tǒng)發(fā)展的成熟度、市場應用的高份額也受到更多工程師朋友的青睞,越來越多的企業(yè)和研發(fā)機構都轉向嵌入式Linux的開發(fā)和研究,這使得嵌入式Linux在新興的嵌入式操作系統(tǒng)領域內也獲得了飛速發(fā)展和廣泛應用。而對于那些希望盡快進入嵌入式行業(yè)從事產品研發(fā)的朋友們,選擇嵌入式Linux方向作為切入點無疑是最好的途徑之一。
近期,有許多面臨畢業(yè)、找工作的大學生來到華清遠見嵌入式培訓中心咨詢了解有關嵌入式Linux方向的學習安排。在與他們交流溝通的過程中,被問到最多的幾個問題就是“如何做好嵌入式Linux學習前的準備?”,“學習嵌入式Linux需要補習哪些基礎課程?”,“嵌入式Linux開發(fā)跟普通軟件開發(fā)在學習方法上有什么不同?”,“項目實戰(zhàn)環(huán)節(jié)多嗎?”,“有專業(yè)人員帶領嗎?”,相信這些也是很多準備入行的初學者都會關心的問題,為了幫助大家做好嵌入式Linux的學前準備,我們對這些常見的問題逐一進行解答,提供給大家參考,希望能夠有所幫助。
1、如何做好嵌入式Linux學習前的準備?
要成為一名合格的嵌入式Linux工程師,就需要系統(tǒng)的學習軟、硬件相關領域內的知識,需要在最開始就掌握開發(fā)的規(guī)范和原則,養(yǎng)成良好的工作習慣。為了確保學習的效果,華清遠見安排的整個課程體系是非常集中、高效的,這就要求準備參加嵌入式Linux就業(yè)課程學習的同學要調整好自己的時間,務必要確保在4個多月的學習時間內能夠高度集中精力。在整個集中學習過程中,既要保證課上認真聽講、實戰(zhàn)演練的時間,也要保證課下繼續(xù)實戰(zhàn)演練、查閱資料的時間。只有經過這種高強度的、實戰(zhàn)為主的訓練,才能夠在比較短的時間內掌握規(guī)范的嵌入式開發(fā)工作流程,讓自己符合嵌入式企業(yè)對應崗位的需求。
除了在學習時間上要做好充分的準備之外,在學習的心態(tài)和方法的調整上也要做好準備。許多朋友只了解嵌入式Linux方向美好的發(fā)展前景,只關注高收入、就業(yè)機會多等熱點,卻忽略了學習過程本身。為了能夠讓集中培訓的效果發(fā)揮到最佳,建議大家在學習開始前更多地去了解嵌入式產品研發(fā)的特點、所需要掌握的技術規(guī)范和工作要點,關注需具備基礎的補充和學習,從而為后續(xù)的強化學習過程做好心態(tài)上的準備,畢竟態(tài)度往往決定了最后做事的結果。
2、學習嵌入式Linux需要補習哪些基礎課程?
嵌入式Linux工程師的學習需要具備一定的C語言基礎,因此面對許多朋友只是在大一或者大二學習過C(還不一定認真學了,呵呵!),之后基本就不再用過的情況,建議大家在來華清遠見學習之前先復習一下C語言基礎這塊。要提醒大家的是,復習時不能只關注基本語法,對于常用的數據存儲及處理方式,例如:數組、結構體等也要關注,有條件的話一定在機器上親自敲敲代碼、分析理解一下具體案例代碼編寫的思路,讓自己慢慢進入一名嵌入式開發(fā)人員的狀態(tài)。
此外,在時間允許的情況下,建議大家看一下有關計算機操作系統(tǒng)工作原理以及計算機組成原理等方面的專業(yè)書籍。對于進程、線程、任務調度、總線、I/O等基本概念及工作原理有一個初步的了解和掌握,這部分知識的準備對于后續(xù)更好地學習嵌入式Linux系統(tǒng)開發(fā)將會起到很好的幫助作用。
3、嵌入式Linux開發(fā)跟普通軟件開發(fā)在學習方法上有什么不同?
要成為一名成功的嵌入式軟件開發(fā)人員,程序的設計能力是首要技能,這一點與普通的軟件開發(fā)人員的要求是一樣的。但是作為“軟硬兼施”的嵌入式開發(fā),則要求大家不僅要了解較底層軟件的工作過程和工作原理(例如操作系統(tǒng)級、驅動程序級軟件),在軟件開發(fā)的專業(yè)水平上也需要充分考慮軟件設計的時間和空間效率,這樣才能設計出高性能嵌入式程序。
因此面對相對復雜的嵌入式系統(tǒng)的研發(fā)過程,在學習的過程中需要更多關注完整的知識體系結構的建立。特別是對于原理性知識的掌握程度則相對普通的軟件開發(fā)人員提出了更高的要求。因此在學習的過程中,“要知其然,更要知其所以然”。
同時由于一直以來嵌入式行業(yè)中專業(yè)人才的緊缺,許多經驗性的東西都有待交流和分享,因此充分關注與每一位講師的實際經驗交流就顯得至關重要。華清遠見的每一位專業(yè)講師都擁有多年的嵌入式Linux開發(fā)經驗,他們在各自擅長的領域內都有很多值得分享和交流的體會,因此通過他們課堂的講解、示范,通過充分的交流溝通,無疑可以大大縮短在行業(yè)中摸索的時間,記住不要以為原理性的東西通過看書就能解決,借助這些行業(yè)高手的透徹分析,才能讓你的學習過程更有價值、更加實用。
4、華清遠見的課程體系中項目實戰(zhàn)環(huán)節(jié)多嗎?有專業(yè)人員帶領嗎?
由于大多數人對嵌入式開發(fā)過程的陌生,因此實戰(zhàn)環(huán)節(jié)的訓練就顯得格外重要。在嵌入式Linux課程學習的每個階段,都需要在專業(yè)人員的引導下,通過全真的案例設計與實現來鞏固所學的知識點。同時我們要求大家盡可能在課堂上多出問題、多暴露問題,只有這樣,才能通過專業(yè)人員的及時幫助和指導,最高效地掌握解決實際問題的方式和方法,積累足夠的技術經驗和項目經驗。
同時也只有通過最終綜合項目實戰(zhàn)環(huán)節(jié)的密集訓練,才能夠逐步建立起嵌入式產品開發(fā)的工程化概念。在這個過程中,除了可以達到所學知識綜合、實際應用的目的,還可以讓大家更真實地體驗到如何編寫工程化程序?如何在設計中與團隊協(xié)作開發(fā)?如何為后續(xù)有效地升級與維護做好準備?如何編寫規(guī)范的文檔等?而這些體驗都將為后續(xù)真正從事企業(yè)內工程化的軟件設計做好充分的準備。
記住貫穿始終的是:要知道為什么學?要知道學的是什么?要知道怎么學?要知道學了如何用?最后還要知道用的時候出了問題該如何解決?相信以這些問題為線索的學習過程一定可以幫助大家快速成為一名優(yōu)秀的嵌入式開發(fā)工程師。
第五篇:2016arm嵌入式學習心得
2016arm嵌入式學習心得
嵌入式ARM學習心得【1】
本人大學學的是電子信息科學與技術專業(yè),其實這個專業(yè)和嵌入式沒有多大的關系,要說有關系就是簡單的講了下C語言語法,學完之后還不知道什么是C語言,只記住了,char,int,string等占幾個字節(jié),if,for,while循環(huán)什么的,感覺也就能算一些小學就會的題目,全國計算機等級二級也就糊涂的過了。
我這個專業(yè)沒學過C++,一開始不知道什么是向對象,什么叫面向過程,這可能讓大家笑話了。不過這說的是實話,大學的時候比較喜歡動手,喜歡硬件方面的東西,也喜歡看書。在大一的時候就聽學長說,單片機很難學,在沒事的時候就從圖書管借了本關于51的書,一開始還真是不怎么懂,然后硬著頭皮去看,當我把51的結構看完了,就不像一開始那樣一頭霧水了,自己在紙上把51的結構圖默畫一遍,然后再把各個寄存器功能寫一下,各個功能口的結構也畫一遍,然后就不覺得51有什么難了。其實有些時候不是這個東西你不會,而是在不會的時候自己先告訴自己這個太難了,自己先放棄了。我們學習51芯片,是為了以后的打基礎,知道是怎么通過配置寄存器來實現功能。大二下學期的時候,我們開了51的課,這個課幾乎就沒怎么去,因為我認為沒有必要去聽自己會的東西了。后來聽別人說avr的資源會比51的豐富的很多,所以就想試試,看看有什么難的,就從網上買了本馬潮老師《AVR單片機嵌入式系統(tǒng)原理與應用實踐》,一邊看書,一邊想自己畫一個板了,一開始想實現一個點陣屏,實現滾動效果,后來想想做個板也花不少錢呢,為什么不多加一些功能呢,還能多學到些知識,所以就加了溫感,紅外,鐵電存儲器等并把所有的擴展口都擴展了出來,備以后用,那時還挺自豪的呢,同學們都很羨慕,不過現在想想其實也沒什么了。大學也聽說過嵌入式這個詞,不過不太明白是什么意思,09年的時候從網上找到中嵌視頻,有四張DVD(大約13G),下載下來后,從頭到尾的看了一遍,沒什么印象,只記得講一些不知所云的函數,然后莫名其妙的講怎么使用那個44b0的開發(fā)板,不過聽完了,還是有很大收獲的,就有一種想裝一個linux的沖動,我是大二下學期才有的自己電腦,不過電腦的配置比較低,1g內存,跑虛擬機就像個蝸牛,所以就想著怎么才能裝個linux,自己用XP習慣了,如果全換了又舍不得,那時從書上知道linux的文件系統(tǒng)和windows不一樣,只有一個根分區(qū),所以也害怕一裝linux全盤就被格式化了,不過最后還是欲望戰(zhàn)勝了擔心,買了張redhat9的光盤,小心的裝這個系統(tǒng),里邊的英文也不是太難,還是知道大概意思的,所以一步步的裝,最后裝到我的硬盤的最后空間,重新啟動,竟可以選擇進入哪一個系統(tǒng)了,從這之后,自己就不害怕怎么裝系統(tǒng)了,應了那句言,紙上得來終覺淺,絕知此事要躬行。所以我認為,買一個開發(fā)板是完全有必要的,拿到實物操作一下就不會感覺太抽象了。
后來也想學學arm,但不知道arm是什么東西,所以就買了本《從51到arm》,講的是關于arm的大體結構,看完后感覺,原來arm就是一個速度更快,接口更豐富的單片機啊。
如果想做linux設備驅動的同學應該對arm硬件有一些了解。如果對驅動不感興趣,完全沒有必要去看。交叉編譯器會幫我們做好這些事情,他比我們更了解arm結構。大三下學期開始準備考研了,所以自己這些興趣就先放下了,報的北郵的信通學院通信專業(yè),當時就是想一定要上個好學校好專業(yè),也沒想太多,結果考了的成績差了點,沒有被錄取,也不想調劑一個二流的學校,然后就參加工作了,工作中每天都用的到開發(fā)板,當我看到一個小板上還可以跑系統(tǒng)的時候感覺很不可思議,以為要很大工程。后來邊工作邊學習,每天都要看電腦看到眼發(fā)疼,晚上也都差不多十二點時才睡覺。感覺到累,不過也感覺到自己在進步。
閑話有點多了,說了很多都是自己大學那點破事。
聽很多的初學者說不知道從哪里開始,學習嵌入都要學哪些東西,從網上搜了一下,一大堆的東西要學,一下就推薦十幾本書,說看完這本書怎么怎么樣,看完那本書怎么怎么樣,一下子就給初學者給嚇住了,其實完全沒必要把網上的那些東西全部看一遍,那樣又費時,又感覺工程太大,讓初學者沒有信心去把每一種都看完。網上說的些方面都要知道,不一定全部都掌握,我們可以退成求其次,每一個都知道一些,當然會的越多越好。今天學點這個明天學點那,換著樣來也不會覺得煩。而且還能感覺到每天都有收獲。
下面給嵌入式初學者一些自己的我個人建議。
1、嵌入式涉及到很多的基礎知識
c語言,關于C語言要知道基本的語法,什么是結構體,什么是共用體,有什么區(qū)別,不用強記一些二級考的東西,因在實際中用的很少。
c++要知道什么是類,怎么定義,繼承,接口,要深刻理解,當然基本語法也是必不可少的。
操作系統(tǒng)原理也應該知道基本的原理的,我記得我大學沒這個課還是去電信學院蹭別的專業(yè)的課呢,后來學習發(fā)現很多的東西都是在這個課上學到的。什么時間片啊,任務調度啊,都是在那里知道的。
Linux基本命令的使用(vi編輯器必須會用,因為在終端改文件的時候只能用這個),我們現在很多的人都習慣用鼠標了,很少用到命令,我們學習嵌入linux可要改改這個習慣了,linux用命令操作一是效率高,二是功能非常強大,遠非圖形界面能比的了的,其實我們用圖形界面的操作都要轉化為命令傳給硬件的。
Linux文件系統(tǒng)的管理要清楚,哪個目錄存放是什么東西,有什么用,文件權限管理等 Shell編程也要了解一些,在這給大家推薦一個教程,周朝劍的 shell編程,也就七八講吧,講的很全面。初學者看前4講就可以了。Linux設備驅動的架構要了解,初學者可以以米爾的MYD-AM335X開發(fā)板上的led驅動分析一下,結合原理圖和linux設備驅動相關書籍把每一行代碼都分析明白。關于驅動給大家推薦一本書《LINUX設備驅動程序》中國電力出版社出版的,很經典的,初學者看可能看不太明白,不過要堅持看,最次也得把前6章看完了。
2、看書不要希望一次就會
一次就明白是什么意思,也不要死記硬背,看不明白也沒關系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就記住了,遇到的少的,忘記也就忘記了。還有,不要直接閱讀linux內核源代碼,看一些自己把頭撞破也想不明白的事,會打擊初學者的積極性,要循序漸進,今天學個做個led,明天做個串口,后天說不定就做硬件編解碼了。
3、你可以不接受培訓,但是不能不買開發(fā)板
如果你想學習嵌入式一定要買塊學習板,現在的開發(fā)板很便宜了,給我們初學者減輕了很多經濟負擔。看再多的視頻,看再多的書,也不如自己動手試一下,看著很簡單的東西,做起來就可能遇到很多的問題,遇到問題找到原因,解決問題,只有這樣才能學到東西,記得我第一次寫led的驅動,想自己試一下,網上也有人寫過相關的代碼,可是自己一試,就出了好多的問題,那個led弄了我一天才把led燈點亮。所以不要眼高手低。
還有關于培訓,現在的培訓機構很多,講的也不錯,老師也很好,但是有一個問題,太集中了,而且學生動手的機會也不太多,記得我們公司還招了一個在北京某個培訓機構培訓半年的員工呢,花了一萬多,來了之后也沒感覺有多高,問他都學了什么,也就是我前邊說的那些基礎知識,很多的東西還是不知道的,照著書弄個helloworld模塊驅動兩天沒搞定。不是培訓不好,但我個人見解效果并不是很好。記住:只有自己動手做過的東西才是自己的。
現在買一塊開發(fā)板很便宜,飛凌的OK6410的開發(fā)板就不錯,源碼完全開放,而且資料也很豐富,完全能滿足初學者學習用,有人說友善的板子也不錯,我個人覺得友善的板子不錯,但是不適合初學者,因為他的很多的東西是不給代碼的,用過友善的板子的同學經常有這樣的痛苦,想學一個東西,去找他的代碼的時候,卻找不到,很多友善提供的代碼中很多的都是封裝好的,只提供給客戶一個庫,初學者想要找代碼的時候就不知道怎么辦了。
4、不要好高騖遠,要腳踏實地
對于初學者,還有一點小建議,我們拿到一個開發(fā)板,很興奮也很激動,想法自然也很多,想用開發(fā)板實現自己的這個想法,實現那個想法,然后又不知道從何下手,然后就去論壇中發(fā)一個貼,“那個什么什么怎么實現啊,哪位大俠能詳細說一下啊,跪求!”然后等著別人去回復。見沒人回復就抱怨。有想法是好的,我們要實現自己的想法也是有前提的,首先,我們對這部分知識了解嗎?如果不了解就去google一下(最好別用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到問題,再去發(fā)貼問,這樣也顯得咱們有水平。比如自己連串口是什么都不太清楚呢,就問串口通信怎么做啊,就是人家把代碼給咱,咱也不明白是怎么回事啊。
5、多看代碼,多寫代碼
見多識廣,熟能生巧。多看代碼,要從代碼中讀出代碼的意思來。自己平時也要多寫代碼,多練習(這一點我做的不好,寫的少)。寫完已經晚上兩點了,思路有些亂,有些也是個人的見解,在有些人看來可能是錯誤的,每個人有每個人的學習方法,但是我們的目的只有一個——希望我們學到更多的知識。嵌入式學習心得【2】
還記得老師第一次將一塊天祥的2440開發(fā)板放到我面前時,我心里覺得這太神奇了,好漂亮的板子,怎么弄呢?老師大體給我講了一下,但是以前連51單片機操作都不熟的我如何記得住老師說的呢?板子拿到手里,左手拿不知到怎么開始,右手拿也不知道如何入手啊。
然后我決定上網查一查這個東西如何轉起來呢?搜到了天祥的視頻教程,但其是加密的,唉......我大概就在網上搜了將近一周的時間,后來老師過來詢問我的板子玩的如何了,我連工作環(huán)境都沒有搭建起來,老師說我那里有視頻,我覺得老師啊,你不早說啊。也許老師是故意的,因為將近一周的時間我了解了三星公司的芯片S3C2440A,知道了天祥開發(fā)板的原理,包括的外設,有了整體的認識。
我拿到視頻后跟著視頻一步一步地開始了我的嵌入式之旅...