筆者從事安卓底層開發(fā),工作一年,個人看法 ,處女答。個人感腳51就是就是搞嵌入式第一門技術(shù)。把c語言,模數(shù)電,硬件畫板等第一次聯(lián)系起來。在學(xué)校的時候我們的學(xué)習(xí)路線是:
1 : 51單片機(大二上學(xué)期的時候,我感覺我還是接觸的挺晚的,嵌入式)
2:stm32+ucos ii (大二下學(xué)期到大三下學(xué)期)
4.安卓驅(qū)動 ,JNI(工作,mtk平臺)
然并卵,這句話適合51,但是也是非常非常非常重要的基礎(chǔ)。如果作為學(xué)生的話,參加比賽啥的51還是不夠用的。51作為最簡單的單片機,真真的簡單。相比于linux 安卓真的太簡單。
51單片如我上文所說的,學(xué)生黨接觸的第一款單片機,答主是電子信息工程畢業(yè)的,接觸的第一個單片機也是51,然后是STM32.51和STM32 STM32比51 難一點,不過本質(zhì)上都是單片機,STM32片上外設(shè)多很多,定時器啥的復(fù)雜復(fù)雜復(fù)雜復(fù)雜復(fù)雜多的多。STM32片上外設(shè)多,功能強大,可以說學(xué)了STM32之后基本上所有的單片機應(yīng)該都能馬上上手的,雖然我也只是只接觸到51 和STM32.。大四全國電子設(shè)計大賽之后就再也沒有接觸到單片機了。后來就一直是linux,android。下面是我畢業(yè)論文的一部分。
任何計算機系統(tǒng)都是軟件和硬件的結(jié)合體,如果只有硬件而沒有軟件,則硬件是沒有靈魂的軀殼;如果只有軟件沒有硬件,則軟件就是一堆無用的字符。在底層硬件的基礎(chǔ)上,操作系統(tǒng)覆蓋一層驅(qū)動,屏蔽底層硬件的操作,通過特定的軟件接口去操作底層硬件,用戶在用戶空間可以很容易的把軟件設(shè)計目標放在策略與需求上,可以很方便的屏蔽掉底層實現(xiàn),從而很好的完成客戶功能需求。計算機系統(tǒng)是軟件和硬件的結(jié)合體。而軟件又分為應(yīng)用層軟件和驅(qū)動層軟件。驅(qū)動層軟件是應(yīng)用層軟件和底層硬件的紐帶。通過驅(qū)動層軟件實現(xiàn)對底層硬件屏蔽。
在裸機時代,比如單片機系統(tǒng),程序員往往是直接操作硬件寄存器,直接設(shè)置硬件。而在Linux操作系統(tǒng)中,硬件驅(qū)動程序中實現(xiàn)對硬件直接操作,而用戶空間,通過通用的系統(tǒng)調(diào)用接口,實現(xiàn)對硬件操作,應(yīng)用程序沒有直接操作底層設(shè)備,通過posix標準,應(yīng)用程序的系統(tǒng)調(diào)用往往是被規(guī)定和限值,用戶只能通過規(guī)定的接口實現(xiàn)對底層硬件的操作,導(dǎo)致了應(yīng)用程序在類UINIX操作系統(tǒng)具有非常好的可移植性。

圖2.1 直接操作硬件程序
上圖2.1 是裸機時代,應(yīng)用程序和硬件操作糅合在一起,應(yīng)用程序和硬件操作高度耦合的框圖,上述代碼一般很難有良好的代碼互用和移植性。往往從一個平臺移植到另一個平臺,甚至是同一平臺不同硬件配置都要求很大的代碼改動,另外從應(yīng)用層來說,應(yīng)用與驅(qū)動高度耦合,應(yīng)用程序也幾乎難以移植,甚至說是沒有應(yīng)用程序概念,原因在于應(yīng)用與驅(qū)動的糾纏不清。

圖2.2 無操作系統(tǒng)應(yīng)用程序和設(shè)備驅(qū)動程序關(guān)系
上圖2.2所示,良好的裸機代碼框架,設(shè)備驅(qū)動層和應(yīng)用層之間有良好的分層思想,用戶可以較好的實現(xiàn)策略和需求,例如:客戶要求實現(xiàn)流水燈程序,程序員在底層機制實現(xiàn)(硬件操作)的基礎(chǔ)下,可以充分在用戶應(yīng)用程序中把主要精力方法流水燈的實現(xiàn),即策略。但是在良好的裸機程序設(shè)計,代碼移植性可能從一個平臺移植到另外一平臺只需要修改少量的底層驅(qū)動,例如:LED_ON()的實現(xiàn)。但是在用戶空間,沒有系統(tǒng)調(diào)用概念,函數(shù)接口千差萬別。應(yīng)用程序移植性差。

圖2.3 Linux系統(tǒng)調(diào)用框圖
操作系統(tǒng)中,需求決定應(yīng)用程序,通過系統(tǒng)調(diào)用,調(diào)用底層驅(qū)動,此外,在驅(qū)動程序中,把一部分公用的驅(qū)動接口抽象出來,如此,程序員只需修改很少量的驅(qū)動資源,形成特定的驅(qū)動框架。導(dǎo)致用戶只需添加專用的硬件屬性作為平臺資源,在內(nèi)核中獲取資源,大大解放了設(shè)備驅(qū)動開發(fā),提高了設(shè)備驅(qū)動的通用型。在用戶空間,由于遵循posix標準,類UNIX操作系統(tǒng)中,所有操作接口基本一樣,從而方便了應(yīng)用程序的移植,應(yīng)用程序幾乎不要做修改。如圖2.3所示。
Linux操作系統(tǒng)對于所有的硬件都是當(dāng)做一個文件來操作:一切設(shè)備皆文件。Linux設(shè)備文件一般分為字符設(shè)備,塊設(shè)備,網(wǎng)絡(luò)設(shè)備。在Linux系統(tǒng)中,除了網(wǎng)絡(luò)設(shè)備之外,所有的設(shè)備都被映射到Linux的文件系統(tǒng)中。如圖2.4所示。

圖2.4 Linux操作系統(tǒng)與應(yīng)用程序關(guān)系
講講51,linux,安卓之間的差別。先申明一下,我是實際工作中沒有使用過單片機,我使用單片機僅僅是用來參加全國電子設(shè)計大賽。工作主要在android driver這一塊。我們這一行很多人說單片機是有瓶頸的,我也不是很清楚。但是實話實說,這鳥東西太簡單了,沒啥技術(shù)含量的,你要之后android的龐大。
補充一個:單片機要點亮一個led等,同樣在安卓上你點亮一個燈也要驅(qū)動的,不然怎么亮呢,只是我們只看到了app。 背后驅(qū)動,怎么實現(xiàn)的,安卓架構(gòu),跟單片機有啥區(qū)別,相同的地方。其實手機arm芯片跟單片機都是嵌入式微處理器,單片機叫做微控制器。高通,mtk啥的也是嵌入式微處理器~都是一樣的~但是難度你想想看就知道了。
51單片機大家都知道了,裸機,直接操作硬件,直觀,簡單,沒有框架,沒有系統(tǒng)。
STM32,可以學(xué)習(xí)一下RTOS了,實時的小系統(tǒng),ucos II等等許多實時系統(tǒng),STM32+ucos II這種組合學(xué)習(xí)方式還是挺好的。STM32比較難的在我印象中一個是時鐘樹,因為我們從51,沒有時鐘樹的概念12M晶振,時鐘不要你配置,而比較新的ARM框架,外設(shè)都是有時鐘的??赡軇倓偨佑|概念不是很清楚,但是也是很簡單的。另外一個是定時器,什么輸入捕獲模式,定時器模式,編碼器模式。。。。。強大的多,比起51??偟膩碚f還是簡單的。因為是沒有框架的原因,代碼量真的很少。你要知道,MTK android 5.1 所有的東西加起來 10G多,包括bootloader,linux kernel,android framework ,定制的部分。等等。我們接觸的就那些目錄,當(dāng)你去看C++,java代碼時,你就知道面向過程的代碼真的很容易看??赡苡行┡笥巡恢繿ndroid的框架,以及android 與linux之間的關(guān)系,以及l(fā)inux驅(qū)動與裸機的關(guān)系,聯(lián)系與區(qū)別。你現(xiàn)在只要知道linux驅(qū)動比較大,android框架更大。單片機簡單。單片機一般是C語言,而android一般涉及三種語言:底層linux內(nèi)核C,中間的JNI層是C++,framework和app是java。
學(xué)過51單片機的朋友知道,我們要點亮一個LED燈,是這樣子的P0 = xxx ,我們就點亮了一個,好。一燒寫,好,燈亮了。linux,上我們要亮一個燈,有點難了,有了操作系統(tǒng),沒那么容易了。一般人搞不定了。好,到android,更加難了。但是你想一想手機芯片也是ARM。亮燈這種肯定都是CPU的管腳操作。上了系統(tǒng)了,難了,點個燈都費勁的。本質(zhì)上是一樣的。很多人都知道單片機有瓶頸的。原因是會點硬件,會點C,輕輕松松就可以亮燈的。入門容易。
單片機沒有市場競爭力,沒“錢途”。沒有嵌入式linux相關(guān)基礎(chǔ)、無單片機開發(fā)經(jīng)驗、無硬件操作知識,應(yīng)該如何學(xué)習(xí)嵌入式?
韋東山ARM裸機加強版帶你深入了解嵌入式linux arm開發(fā)裸板程序,教會你一套基于arm架構(gòu)的嵌入式硬件編程方法。
課程零門檻、針對“三無”學(xué)員(無linux基礎(chǔ)、無單片機經(jīng)驗、無硬件知識),現(xiàn)場編寫代碼,課后布置鞏固作業(yè)、學(xué)員專屬講師小組、qq群答疑。
課程學(xué)習(xí)技能:
1、深入理解ARM裸板程序原理,通吃所有單片機開發(fā)
2、掌握基本硬件知識,能看懂原理圖
3、理解各種硬件協(xié)議(i2c, spi, lcd等)
4、掌握編寫程序操作硬件的方法
5、實戰(zhàn)編程操練玩轉(zhuǎn)觸摸屏和傳感器等各模塊
點擊鏈接報名-> http://t.elecfans.com/topic/20.html?elecfans_trackid=pczhichang
或掃描如下二維碼,直接報名
?
電子發(fā)燒友App












評論