單片機、ARM、嵌入式開發、Android 底層開發有什麼關係?

本專業會學單片機的,個人對 Android 感興趣。學過 C,Java,有一點 Android 應用開發基礎,想在學習單片機之後可以深入研究一下 Android 底層方面的。

還有就是去學這些在就業方面會有什麼好的方向,比如適合什麼崗位?期待更多建議,謝謝。


作為一個編寫過ARM教程和Android產品開發者而言。你在單片機的相關知識,在Android底層是絕對有用的。

這個裡底層是指內核介面以下的程序。以上包括Android HAL驅動(就是linux C程序編寫,跟硬體控制項沒太多直接聯繫),Android 的框架和Android的應用。這一類開發對你而且是全新的東西。

而底層的程序包括,內核,bootloader和驅動。基本開發Android硬體產品公司主要需要這一類人。

而不同產品中,內核和bootloader變化較小,主要的工作量是在驅動之上。驅動相當於 單片機程序+linux內核介面。

但是從單片機轉型為Linux驅動開發的,幾個主要問題的,是代碼量急劇增加,在單片機中有一些習慣在驅動開發里變成致命的陷阱。比如不喜歡用宏,在驅動大量用到內核複雜結構而單片機往往自寫,還有一個並發處理,也是一個難點。 我教過很多想單片機轉型成Linux的工程師。這一些東西往往很難改變,有時難得有人就放棄,還是回去做單片機開發了。


謝邀!

我是從51單片機開始學習的,電賽之後因為國項的原因就直接轉向ARM-LINUX-嵌入式的學習。

從我目前的見識來看:

單片機是個系統(比如:51、AVR、PLC...),其中包含了去除了輸入輸出之外的運算器、控制器、存儲器,我們用程序可以非常直觀的控制引腳電平的高低。

ARM就像@白峰所說的,就是個高級點的單片機,但是它和單片機有個本質的區別,單片機是個系統,而ARM是個微處理器(僅包含了運算器、控制器,並不包含存儲器)(類似的有MIPS,PowerPC...),如果我們用的話就需要給其加上存儲器。在應用方面,可以當做高級單片機直接使用,但為了高效的管理資源(軟硬)以及擴展的方面,通常給其運行操作系統,這樣就把所有的硬體包裝起來,不是很方面直接控制硬體,這裡就有了驅動工程師的事情(為上層操作系統提供統一的介面)!

嵌入式廣義上來說包含一切和電子有關係的device,目前來看像DSP、FPGA、ARM都是嵌入式的範疇,但是通常我們提到嵌入式,很多和微處理器操作系統打交道!

工作方面:

有關嵌入式的硬體工程師、驅動工程師、系統工程師、當然還有頂層的應用工程師!

對於Android系統,雖其屬於Linux,而且我也時常瞎搞,但對其編程方面不甚了解,所以不便談論!但我想學習Android系統和學習Linux系統基本上一樣的,可以先搞一搞Linux,把它玩熟,我想對Android也會很快上手,因為我看過Android中各個目錄,發現和Linux基本一致,畢竟Android繼承於Linux...


看這個,可能比較清楚 比較好的回答前輩學51單片機的感悟是怎麼樣的?說說看 - 肖沛的回答


應邀回答:

單片機和android基本沒有什麼聯繫,那只是你的一個本科專業課而已;

目前比較火的是移動互聯網和雲,移動互聯網裡面有app開發(java、C),html5開發(html+css+javascript),語言只是工具,更重要的是創意和堅持,但在你沒有足夠的行業經驗和創意之前,還是先把工具學好;

如果換個思維,目前比較火的都是大家看得到的,等你花大量精力學了很多比較火的行業知識和技巧,準備大幹一場的時候,下一個潮流又要來了,所以還是踏踏實實先把內功練好;

很多時候機遇和運氣對成功也占很大的成分,,,


安卓底層是Linux,嵌入式系統Linux基於ARM平台,其實會嵌入式,安卓底層也不難


本專業會學單片機的,個人對 Android 感興趣。學過 C,Java,有一點 Android 應用開發基礎,想在學習單片機之後可以深入研究一下 Android 底層方面的。
還有就是去學這些在就業方面會有什麼好的方向,比如適合什麼崗位?期待更多建議,謝謝。

首先樓主你要明白嵌入式是一個方向,學習嵌入式包含單片機、arm、Android底層開發。所以說你學習的都是為找嵌入式工作而準備。 嵌入式首先確保自己的C語言過關,然後可以從系統編程入手,在深入到裸機開發、系統移植、驅動開發 等。這是大致的學習方向。嵌入式是屬於今年開始火爆起來, 嵌入式需要懂得的一些基本有,Linux,C語言,數據結構,文件IO,並發程序設計,進程間通信,網路編程,資料庫開發,在線詞典,ARM-4412,系統移植,驅動開發,Android系統開發。 還可以在群里20103091多交流, 所以說你現在基本上是把嵌入式學了一個大概,但是還不是很精通,沒有按照方向系統的學習,學過C語言,java還是需要加深的,因為嵌入式不只是硬體上的提升,軟體的操作更是必不可少,所以未來你可以選擇當一個嵌入式開發工程師。


有單片機基礎,懂C 了解JAVA , 可以做 android驅動工程師


單片機是ARM的基礎,或者說ARM就是複雜一點的單片機。

Android的底層是Linux,而Linux開發一般包括驅動開發、內核開發、模塊開發、應用開發等,所以Android底層開發可以說等同於Linux開發,只是受到具體硬體的限制。

嵌入式開發包括的面很廣:硬體、軟體等等,其中Linux開發算是嵌入式開發的一部分基礎。

要學Android底層開發,可以從Linux開發方面入手。如果覺得內容過多,可以研究一下busybox或uboot或uCOS,基本的操作系統原理知識是需要的。

只有單片機基礎,對於搞Android開發還是太容易,需要增加硬體驅動方面的經驗。

就業方面:本科畢業的話,可以找一些測試、產品、銷售方面的職位,如果想做開發,就得繼續讀個研究生。


ARM只是一個Core,讓它RUN起來不需要太多的東西,往往IC廠商從ARM公司買來CORE的IP,然後會有一些外圍的bus,register,通信口,別的功能模塊,整個MCU或者MPU才能起來,你說的單片機傳統意義上的是體系結構比較簡單的MCU,現在的一個趨勢是MCU廠商都轉向ARM核,一方面是ARM的低功耗 還有就是市場因素


android手機都採用arm架構的cpu,搞移植的時候需要懂點arm彙編。

android驅動層 HAL和linux嵌入式驅動沒什麼區別。

android底層還是用C寫的,應用層使用dex虛擬機運行java程序。


本科畢業,搞安卓底層沒人要啊,自己喜歡這一行,又不想考研。


推薦閱讀:

Android L 發布,新安卓系統在安全方面有哪些變化?
如何看待 Google I/O 大會推出的Android Studio?單純開發 Android 方面能取代 Eclipse 嗎?
Android程序員,最常用的20%技術有哪些?
安卓系統的後台是怎樣的?
拿到一個apk包後,怎麼判斷其是否加殼了?是否做了代碼混淆?

TAG:ARM | Android開發 | 嵌入式系統 | 單片機 | Android開發入門 |