1. 程式人生 > >關於嵌入式系統的學習路線圖

關於嵌入式系統的學習路線圖

  • 嵌入式開發入門之經典
    開始進入嵌入式世界,真是一頭霧水,不知道如何入手!也不知道該如何學習,學習什麼,最近從網上轉載這篇文章,對我啟發很大,對於初始進入嵌入式的人們很有幫組,好多嵌入式大俠都說這是入門的最好文章.
    1、抓住51開發ARM
      這幾個月來我一直都爬在51的問題,自己都有一點笑自己了,用了4個月的時間,來鞏固51的原理和程式,還好我自己算是走過來了,自己笨,身邊的高才生又看不上51的原理,他們都比較“牛”,說51過時了,你問那個做什麼???我比較鬱悶!過時嗎?我有一點懷疑?
      他們不願意說有他們自己的理由,沒有人強求,靠自己好了。
      我自己個人的觀點:51是一個基礎,而且還很重要,這是再我看了ARM之後感覺到的。它可以加速你的ARM學習速度,真得!不相信你試一試好了。
      凡是要求一個速度、效率,不要做一些無用功,抓緊身邊的每一個一分鐘,人是活的,東西(知識、書)是死得,想要做的事情因此就簡單了。

    2、在網上看到的一篇很不錯的ARM文章,貼上過來,為了和像我一樣在很少有人幫助的情況下自學ARM的難兄難弟們

    ? ARM怎麼入門?

    ? 我不是高手,仍然是菜鳥。但是回想起自己當時的迷茫,特意寫了這篇東西,當作給和我一樣的兄弟姐妹的幫助吧。問這個問題的人多半不是已經工作的工程師,而是和我一樣是學生,所以這篇筆記就把看家當成我一樣的菜鳥,高手勿怪。

      首先宣告:本人還沒有找工作,事實上處於研究生剛畢業,還沒開始找工作的空閒時間,44B0只是興趣所在,打發時間。

      所有看法完全是自己的感受,不代表任何他人。錯了的觀點各位幫我糾正。再次補充:很多朋友看了上面的話就問我為什麼研究生畢業了還不找工作:)說是打 發時間,其實是因為研究生的時候帶了一個專案,申請提前畢業以後專案還有塊尾巴,答應導師把專案做完再走:)就這麼簡單。男人總點負點責,呵呵

      以下問題常被問到,我就想到哪說到哪吧:

    一、首先說說ARM的發展

    ? 可以用一片大好來形容,翻開各個公司的網站,招聘裡面嵌入式佔據了大半工程師職位。廣義的嵌入式無非幾種:傳統的什麼51、AVR、PIC稱做嵌入式 微控制器;ARM是嵌入式微處理器;DSP;FPGA。客觀的講,工作需求量上DSP的需求比ARM要多,而ARM和FPGA差不多。DSP因為數字處理 與通訊領域的空前發展而火暴,小到MP3 射象頭,大到我們軍品裡的控制器,應用面很廣。

    ? FPGA的兄弟一般做ANSIC(特殊晶片設計,好象是這麼翻譯的)。而ARM單純說來並不比一個微控制器強多少,但是它的獨特就在於不斷下降的價格和提升的效能。這完全依靠於ARM公司的戰略,厲害!!很佩服他們的戰略眼光!!

      值得注意的是:在找工作中,企業(著名的,小的不算)對單純的ARM硬體開發工程師並不比微控制器重視,很少有大企業的職位裡寫“從事過ARM開發優先”。寫的多的是什麼?“嵌入式LINUX”到這相信大家看出來了吧,需要的是硬體中的軟體。

    二、ARM是硬體還是軟體

      很難說,ARM是硬體,LINUX是軟體。ARM的硬體多半已經模組化了,像我這樣把板子改成這樣的就算動的多的了,這同樣是ARM公司的戰略,再次佩服。實際中的LINUX的開發工作更多,更耗時。從這方面說ARM應該算是軟體了。

      在找工作中更是這樣,舉個例子,聯想裡和ARM最接近的是“BIOS工程師”是軟體,MOTO裡接近的是嵌入式LINUX工程師是軟體。而其他很多公 司把嵌入式產品開發歸為硬體。所以,不要討論這個,好好玩轉自己的板子才是關鍵。實在不爽你就把自己叫“嵌入式開發工程師”。

    三、要不要買開發板&買哪家
       
    ? 我的答案是“在你個人的學習方法”,但是如果看家是需要看這騙筆記的水平,個人推薦還是買現成的。

    1、買

      買板子可以把注意力集中在軟體開發上,軟體開發(尤其是驅動)可以不必擔心自己硬體上的問題,我就是以便除錯一邊寫驅動和程式,每次寫驅動前就要先確 認硬體沒問題。另外,買板子更省錢和時間,我自己做的板子,原理圖PCB花了2周以上!製版又15天,回來以後焊接44B0160個腳!那叫一個麻煩~~ 花了多少錢呢?2層板,製版費就300塊!當然我把介面都外引了,還做了個20X18的LCD背板,板子比較大。總體下來 元件+LCD 屏+PCB=11XX塊!
    2、做

      自己做可以更瞭解底層硬體,可以按照自己的要求加東西,比如我就加了GPS模組、 GPRS模組 、SD卡模組,擴了個IIC的35個鍵子的鍵盤、把 LCD介面按照買的LCD改裝了,可以用FPC線直接連線。做的很爽的。玩一把嗎。當然,你可以有策略的做,比如像我一樣,把RAM和ROM,網路都保持 和某現成的板子一樣,這樣他們的資料你就可以拿過來直接用,給自己留個退路。其他的如SD了 什麼的自己做。都達到了~~就是費錢,費時間。再有就是給做 的朋友幾點建議:儘量拿到現成的板子,儘量多蒐集其他板子的全套資料,一定要拿到一張沒問題的原理圖。網上流傳的原理圖多數是龔俊03年畫的,再這裡對龔 俊表達一下我的敬意!!牛人!但是那個圖有個小BUG,我指的是03版的,後來的沒這問題了。8019那地址線和地址有問題。還有人仿照他的PDF圖畫的 SCH,更是漏洞百出!譴責!順便譴責把龔俊板子偷賣的人。

    3、買哪家

    ? 個人感覺分3類吧:

      1)首先是上海無線龍的,資料非常的全,感覺他是真正想教你怎麼開發ARM,而不是像有的公司自己技術都沒做好就做個板子出來賣錢UCLINUX。價 格也合理,一個ARM開發板也只要幾百塊錢,ARM9最適合做工業控制,ARM普及,銷量都是怎麼來的?都是ARM9來的。但是,這裡如果你看中的是為工 作做準備,還是選能跑UCLINUX的吧。但是仍然作為第一個推薦,因為菜鳥時期,合適的資料太重要了!!在這裡被無線龍的務實精神感動!你看人家那程式碼 寫的。

       2)感覺立宇泰的也不錯,硬體沒別的,就是資料比較全的說,不像有些家,原理圖直接拿人家的,還錯的~~

       
    四、要不要有51 AVR等微控制器基礎

    ? 有更好,但沒有也無所謂。兩個月以前,我只是看別人做,耳濡目染~~,本科學過微控制器,從來沒做過。我們這的技術主幹做AVR和51,我就跟他們調過 C語言程式。你看出來了?我是個不折不扣的菜鳥吧?但是做這個之前我特意找了ZLG的兩本書,看了裡面的例子和原理圖,這很重要。例程裡有彙編有C,都看 懂了就OK,不用自己現寫!

    五、開發都需要學習哪些軟體

    ? 總結起來最主要的有以下幾個吧:

    1、ADS除錯用

    ? 確切的說是ADS+AXD。ADS裡包含AXD。原來都用SDT後來ARM公司停止對SDT支援了,改支援ADS了,還是用ADS吧。
    有的人的程式釋出的仍然是SDT版本的,但基本都可以找到相應ADS的,新人在這裡不要發矇。ADS是編譯器,AXD是偵錯程式。便宜成AXF以後再在ARM的RAM裡除錯。

    2、PLASHPGM

    ? FLASH燒寫的軟體。AXD在RAM裡除錯,掉電就沒有了,方便程式修改。除錯好的程式再下到FLASH裡,上電直接執行。
    同類的軟體還有很多,什麼FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人還問FLASH不支援BIN格式檔案的問題就要看我寫的PLASHPGM使用了。

    3、BANYANT除錯代理(不知道名對不,起這麼個難記的,我一般都叫它“半羊”因為知道它那幾天剛吃了烤羊)

    ? 除錯代理就是用它幫你使用更簡單的JTAG(便宜啊)來實現原本1K才賣的JTAG模擬器的大部分功能。JTAG除錯原理看我另一篇筆記。簡單的就可 以把他理解為你自己做的JTAG的驅動就行了。除錯代理還有很多種,什麼H-JTAG了、ARM7了(不知道具體叫什麼,就記得可執行檔案叫 ARM7.EXE)都是,BANYANT比較好。需要注意的是,沒種除錯代理安裝方法雖然都簡單 但都不一樣,需要看說明。而且AXD除錯之前都要執行。 省錢了,就別怕麻煩了。

    4、ARM-ELF-TOOLS工具鏈

    ? 裡面是UCLINUX開發用的工具比如ARM-ELF-GCC只類的。工具鏈就是把很多工具打包在一起釋出的方便你開發的東西。具體安裝方法看我另一篇筆記。另外如果你開發LINUX就要用ARM-LINUX-TOOLS,不一樣,不通用。

    5、U-BOOT

    ? 大名鼎鼎的BOOTLOADER生成工具,同類的好象還有VIVI(名字很曖昧~~),生成的BOOTLOADER燒到FLASH裡,然後就可以用 BOOTLOADER下載燒寫其他了。有了BOOTLOADER才能下UCLINUX。BOOTLOADER就像電腦上的BIOS。當然UCOS的不用這 個,用什麼我不知道:)最新版本是1.1.4 具體使用方法看我另一篇筆記吧。

    6、UCLINUX包

    ? UCLINUX的原始碼包,不用多說了吧?建議大家用現成的先體會一下,然後再自己編譯,裁剪。因為單獨UCLINUX的編輯技術上比較簡單,但涉及的方面還是比較廣的。

    7、VMWARE

    ? 老牌的虛擬機器軟體,在一個機器上虛擬出一個機器裝LINUX(PC上用的),省得你來回開關機了。記得裝VMWARE-TOOLS,安裝方法在我另一篇筆記裡。

    六、有哪些書推薦

    ? 主要推薦ZLG的三本書,有這3本再加網路就不用別的書了,其中主要推薦前2本,3是介紹體系結構的,也不錯:

    1、ARM嵌入式LINUX系統構建與驅動開發,北航版,驅動寫的很詳細,前期開發介紹也很好
    2、ARM 嵌入式系統實驗教程(二),北航版,有ZLG2200的原理圖,實驗程式和註釋,瞭解人家是怎麼開發的。
    3、ARM嵌入式系統基礎教程,最重要的是體系結構,彙編部分介紹,看看吧,增加理論素質。
    4、44B0資料手冊,寫在這裡是強調它的重要。

    不推薦ZLG早期出的紅色皮的ARM什麼體系結構~只類的,寫的太多,看煩了。其他的書沒了幾本,沒看見好的,大家有看過的推薦吧。

    七、選UCOS?UCLINUX?LINUX?VXWORKS?還是當微控制器用

    1、搞開發,工程設計,用UCOS,小巧,多程序,簡單,體現了ARM7的精髓。
    2、LINUX 正根的嵌入式系統,LINUX消費與通訊領域用的比較多,但缺點是必須ARM9才能跑,ARM9的板子自己做就不行了,6層板太貴。買開發板1K達底吧。但是還是推薦選ARM9+LINUX
    3、UCLINUX 算投機嵌入式系統:)ARM7上可以跑,由有LINUX近親,學好好可以比較方便的轉向LINUX,像我一樣的窮鬼用吧,呵呵
    4、VXWORKS,學好後可以找到高薪工作,但工作機會本身並不比LINUX好找。
    5、當微控制器用,不推薦,雖然我景仰的ZLG一直號召這麼幹。因為對於學習來說多程序的系統設計才是ARM7的玩頭,至少你也要整個UCOS啊:)

    ? 有朋友問我先學這個當基礎不行嗎?那當然可以~~但我當時就用了1周搞定,就是我先的ADS在RAM中除錯的筆記。後來我清空FLASH用的小段程式 還是當時寫的LED閃爍程式呢。另外1周裡其中還因為自己過於菜,沒把OM設定好導致晶陣不陣哈哈。這個是必須做的,但一帶而過。目標放的遠一點。

    八、學習要用多長時間

    ? 我從菜鳥到現在兩個多月,中間被打擾數次。仍然搞定了PCB設計與製版,RAM除錯,FLASH下載,UBOOT移植和下載UCLINUX(沒剪裁, 用現成的),LCD驅動。再次坦誠的說:我確實比較菜,說這些不是讓大家羨慕,只是告訴你們“你們應該比這個更好”,我相信良好的態度+合適的方法+及時 的總結=成績!

    九、ARM都玩什麼

    就幾點:
    1、硬體設計
    2、系統移植
    3、驅動開發
    4、應用開發

    沒了。其中推薦把注意力放在後兩個上,3有難度,4比較靈活,最重要的是都是找工作的砝碼。

    十、我用的什麼板子

    很多人問我這個問題,我特意寫過一個的。再說一次吧。我是自己做的,RAM、ROM、8019等比較麻煩而當時的自己不理解的都按照龔俊的做的。保持其他不便的情況下做了如下改動。

    1、加了串列埠通訊的GPS模組、 GPRS模組,一個UART0,一個UART1,當與要用超級終端時用跳線切換。
    2、SD卡,和7843觸控式螢幕,同時掛在SPI總線上,因為SPI只能掛一個裝置,同時還做了I/O模擬的準備,把兩個裝置又通過跳線掛在4個IO上。
    3、擴了個IIC的35個鍵子的鍵盤,用的ZLG的7290,不佔用CPU,最大支援64個鍵子,只上了35個,其他留介面。
    4、把LCD介面按照買的LCD改裝了,可以用FPC線直接連線。
    這種開發板國內有很多,做的比較規範的是上海無線龍有限公司<script> &lt;!-- document.write('&lt;a target=_blank rel=&quot;nofollow&quot; href=http://www.wxlsoc.com&gt;www.wxlsoc.com&lt;/a&gt;'); //--&gt; </script>www.wxlsoc.com )!

    所以改動雖然多,但真正很移植了,初期除錯有關的並沒動,就是為了現在不那麼菜的時候做準備:)

    十一、開發流程

    這裡是我的開發流程:

    1、設計原理圖(含WIGGLER的JTAG訪真器)
    2、設計PCB(含WIGGLER的JTAG訪真器)
    3、製版
    4、焊接電壓,確定電壓沒問題
    5、焊接44B0+JTAG電路+WIGGLER的JTAG訪真器+周邊電路,用BANYANT+模擬器連線,BANYANT提示錯誤,但可以顯示44B0編號,好象是0X0F0F0F0F只類的,說明44B0沒問題
    6、焊接晶體+RAM+ROM+周邊電路,用BANYANT+模擬器連線,可以顯示正確的44B0了
    7、用BANYANT+模擬器連線,開AXD,在命令列視窗操作RAM,看可不可以修改,可以的話(用記憶體視窗看RAM地址)RAM就沒問題,可以用這個 命令“setmem 0xc000000,0xffffffff,32”,我的RAM掛在BANK6上 所以地址是0XC000000,你要是改了就也得 改。
    8、用我寫的《自己寫了個C工程模板又寫了個使用說明 》裡的方法除錯程式吧,寫個簡單的,我當時寫個LED閃爍的。看好使不。
    9、把程式按照《FLASH燒寫總結 》裡的燒到FLASH裡,測試一下
    10、按照《UBOOT 移植操作》移植UBOOT?
    11、按照《UCLINUX下載簡單說明》下個UCLINUX
    12、看看驅動開發的方法,自己寫個驅動看看
    13、還有很多事東西著你玩 呵呵

    十二、關於JTAG訪真器

    ? JTAG訪真器現在用的多是簡板的,一個244那種,用的沒什麼不好。按照並口定義不同分幾種,建議選WIFFLER定義的,因為支援的軟體多。這個 網上多的是,不多說了。值得提的是有的JTAG訪真器原理圖上有跳線用來使能復位訊號,這個一般不跳上。就是不用復位訊號,因為JTAG協議裡本身也可以 控制44B0復位。當然,板子上的復位訊號跳線也不用跳。

    十三、哪個公司的ARM

    這個是問題比較簡單:

    1、ARM9主要就幾個公司,本人覺得上海無線龍(www.wxlsoc.com)的不錯
    2、ARM9,這個玩2480和2430的多吧,現在2430還比較火啊 可以考慮買個了,作為學習來說反到和不錯,推薦整一個:)其實ARM9用的最多 的領域應該是消費電子,比如手機PDA,而這上面用的多的應該是INTEL的和TI的吧。但是INTEL的TI的入門材料少,價格高,自己看情況定吧。 QQ:741066980