从单片机初学者迈向单片机工程师第二版第一章 究竟该如何学习
??? 走進圖書城,面對整排的單片機類技術書籍,看著一個個陌生的單片機型號,你是否茫然不知如何選擇?就單片機內核體系結構而言,有51單片機,AVR單片機,PIC單片機,MSP430單片機, ARM系列內核等等。除了這些廣為人知的之外,還有很多兼容上述某些內核體系的單片機。選擇何種單片機作為入門學習的對象,往往成為困擾初學者最大的問題。我們可能道聽途說,某某型號的單片機功能很豐富,某某型號的單片機市場使用量大,某某型號單片機抗干擾強。這些信息都可能導致先入為主的觀念,對初學者選擇單片機型號進行學習產生影響。是否有必要把這些單片機都學習一遍,才能信心滿滿的去面對工作中的挑戰?答案是否定的。
??? 單片機的學習并不能拘泥于某一體系的具體某種型號的單片機。而是通過某一種單片機的學習,掌握單片機程序設計的思想。從而在后續的開發工作中,以不變應萬變。如果掌握了具體的程序設計思想,學習一種新的單片機只是需要了解其相應的寄存器設置即可。對于底層硬件驅動程序以及上層應用程序的編寫均可以套用以前學習過的思想。這樣無論未來工作中接觸到何種單片機,均可以在很快的時間內上手掌握。只有達到了這樣的地步,方能真正稱之為掌握了單片機。
? 對于編程語言的選擇,也是困擾初學者的一個大問題。君不見,電子專業論壇上面,每每時隔不久就會冒出“單片機編程到底是選擇匯編語言還是C語言?”之類的帖子。而且這些帖子一旦出現就會成為眾生爭論之地,但除了一番口水戰,最終無法給出一個確切的定論。匯編語言由于是直接操作硬件,在對時序要求精確以及代碼精簡和講究極端效率的地方可以派上大大的用場。但是這也并不是表明用匯編語言編寫出來的程序就一定是最優的程序。程序的優與否取決于程序編寫者的實際能力,優秀的程序員才能編寫出高質量的代碼。就好像一把寶劍在手,但是還是需要功夫厲害的人才能發揮它的作用。雖然匯編語言可以完全控制底層的操作,知曉單片機每一步指令的執行流程,但由于它艱澀難懂,對于復雜數據結構操作以及算法實現非常繁瑣,因此在需要定義復雜數據類型以及實現各種算法時候往往會選擇另外一種高級語言:C語言。C語言恰好彌補了上面匯編語言所表現出來的缺陷,在對復雜數據結構定義和操作運算以及編寫各種算法的時候,編寫的代碼可讀性非常好。此外,C語言更大的好處在于其良好的可移植性。不管是何種體系結構的單片機,只要它的開發環境支持C語言開發,那么我們編寫的程序模塊就可以在不同的單片機之間進行移植。(雖然不同體系結構的單片機C語言編譯器或多或少的對標準C語言進行了擴展,但一般都是兼容標準C,只要在設計軟件模塊的時候盡量避免使用這些語言擴展功能,那么編寫出來的代碼的就是可移植的)。然而匯編語言卻沒有這個優點,這是因為每一種體系結構的單片機匯編語言都是不同的,這就注定了它只能專用于某一特定體系結構的單片機。因此對于初學者的建議就是選擇C語言進行單片機的開發。在對C語言熟練掌握后再去了解學習匯編語言,以便在需要C語言和匯編語言混合編程的場合使用。
??? 對在校生而言,掌握單片機應用技術對于未來的工作來說可謂至關重要。而對于已經工作的工程師如果因為工作需要使用到單片機,如何才能最快的拿下它,卻也是頗為頭疼的事情。幾乎絕大多數的人都會選擇一款市面上出售的單片機學習板(我頗不習慣稱它們為開發板,因為它們中的大多數教授給你們的實戰開發技術實在太少)。對于經驗豐富的工程師來說,這是最快的上手方法。因為他已經具備豐富的單片機應用經驗,面對一款新的單片機,唯一的區別在于外設資源的多少,寄存器如何配置,開發環境如何搭建等等,通過學習板可以很快的了解到這些,從而應用到新的項目中去。而對于在在校生和初次需要使用單片機的工程師來說,這并非是最好的辦法。君不見眾多買了學習板的人,僅僅只是跑了幾個demo例程之后就扔在一邊吃灰去了,抑或是發現做完了所有的外設實驗依然發現自己頭腦里面沒有一點概念,面對實際的工作需求,無法將其轉換到具體開發設計思路上面。一方面是由于單片機應用與具體的應用聯系非常緊密,并非獨立存在,需要眾多的基礎知識作為支撐,如模擬電子,數字電子,PCB LAYOUT等知識在設計電路板的時候均需要有一定程度的掌握,方能設計實際可工作的電路系統出來。此外,因為單片機系統需要編寫程序去控制整個系統的運轉,因此,又需要扎實的的C語言,數據結構與算法,操作系統原理等等基礎知識,方能設計出優秀的控制程序出來。綜上總總,學習單片機應用技術并非是一蹴而就,而是一個反復實戰應用,總結,反思歸納的過程。掌握的東西越多,看待同樣一個東西眼光就會不一樣。正如修禪一樣,初始時候看山是山,看水是水,一段時間后,看山不是山,看水不是水,而最終有所悟的時候看山還是山,看水還是水。因此對于基礎了解不是那么全面的在校生以及工程師來說,難度不可謂不大。另外一方面,市面上面為了推銷自己的單片機學習板從而喊出的十天學會單片機,十天學會XXX的口號,讓整個氛圍都變得異常浮躁。學習者以為真的就是如此簡單,在發現并非如此之后,往往會學習勁頭銳減。因此,若是真的想從事電子相關的行業,一定要摒棄此浮躁心態,不積跬步,無以至千里,不積小流,無以成江河。
??? 我時常在論壇看到有如此初學者發的帖子,大意如下:照著學習板例程手冊學完了整個單片機學習板上面的例程,還是感覺沒有底,還是覺得自己啥都沒有學會,到底該如何學習單片機。歸根到底,就是實際應用的太少,總結反思的太少,想急于求快求成,而忽略了太多基礎的東西。偶爾閑暇的時候,我也會回想起我的學習過程中的那些點點滴滴。那個時候大一,在圖書館了解到有如此一個東西之后,立即被吸引,興趣大增。立即自己動手買齊了搭建最小系統的元器件,搭建了第一個單片機的最小系統。當第一行匯編代碼被燒寫進單片機,洞洞板上面的LED按照程序邏輯被點亮時候,那個欣喜的心情至今仍然記得。也許現在的初學者永遠也體會不到我們當年的那個興奮勁。不管怎么說,興趣始終應該是第一個老師,尤其是在知識更新非常快的電子技術領域,如果沒有足夠的興趣,很難夠靜下心來去學習繁雜紛呈的電子技術知識點。所謂初生牛犢不怕虎,隨后校里面組織的電子設計大賽,我自己選題,搭建電路,第一次學習用C語言來編寫控制程序(之前都是匯編),在短短十來天的時間里面,掌握了基本的C語言用法,以及一些程序上面的設計思想(當然是后來總結時候才意識到的,當時就想著如何能夠實現系統所需要的功能),至此便走上了C語言的康莊大道。不得不說,有時候有壓力才能夠更有沖勁。也許沒有給自己設定參加電子設計大賽的目標,我還僅僅只是一個愛好者,后來的進步也許就沒有那么快。
??? 今天的學習者是幸福的。因為你們踩在前人的肩上。網絡上有足夠多的入門學習所需要的資源。而你只需要投入一腔的熱情以及持之以恒的努力,定當會有所收獲。對于在校的學生來說,因為時間比較充裕,建議最好自己動手搭建整個學習中所涉及到的電路模塊,這樣既可以加深認識,又可以提高動手能力和解決分析問題的能力。而對于工程師來說,也是盡可能的多動手,紙上得來終覺淺,踐行相較之下會提高整體認知能力。
??? 至于選擇何種單片機的問題,我覺得這個問題并不是太大,畢竟單片機應用的精髓在于軟硬件配合,電路的設計,軟件設計的技巧與思想方法才是至關重要的。而單片機只是一個載體罷了。只要精通熟悉了一種,掌握了這些思想與方法,任何單片機的應用都不是問題。因此,51,AVR, PIC或者MSP430都是不錯的入門選擇對象,在熟悉了這些之后,可以考慮學習CORTEX-M3內核的32位單片機,擴寬知識面,在工作中應用更加得心應手。至于是否學習ARM9及以上的內核的微控制器,則因人而異了。如果你以后想從事嵌入式linux開發,則可以自行選擇某公司芯片進行學習,涉及ARM9以上的微控制器時候一般都會跑操作系統,如linux系統或及其變種系列或者CE系統等等,注意這里一般會分兩個方向,一是底層驅動開發,二是上層應用開發。按自己喜好選擇,底層驅動開發則會涉及到系統內核驅動層,以及具體的硬件知識,而上層應用開發則與PC程序設計無太大區別,當然會有很多資源上面的區別,如在設計上層開發時候,系統的效率,內存的占用都是需要考慮的。不建議初學者一上來就學習ARM9 以及操作系統,萬丈高樓平地起,先把基礎打扎實,再去學習則會事半功倍,否則學習過程中很多坎坷會大大打擊你的積極性。
???? 這一系列的文章不會是簡單的帶你入門認識單片機,已經有很的資料可以幫助你完成這個入門過程。而我要做的是,讓你更快的轉變思想,從工程師的角度,實際工作開發應用的目的來帶你進階。因此如果有很多概念你不清楚,則你需要自行尋求資料弄明白,這個過程也是學習的過程,只有通過這個過程才會將基礎打扎實。所以我假定你至少對單片機有所了解,對C語言有所了解,基本的電子電路知識。剩下的,只需要緊跟我的教程,一步一步的學習。
??? 學習是一個苦并快樂的過程,貴在持之以恒,那么,收拾好心情,準備好興趣,讓我們拋掉畏難的心理,一起叩開單片機程序設計的大門,走向工程師之路。
??? 從單片機初學者邁向單片機工程師之路正式啟程……
??? 我在等你。
??? PDF版本:點擊打開鏈接
?
總結
以上是生活随笔為你收集整理的从单片机初学者迈向单片机工程师第二版第一章 究竟该如何学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GitHub 上 6 款好看的后台模板
- 下一篇: 基于Stm32的充电桩系统