現狀
不知道閱讀本文的讀者,在初學單片機時是否和我曾經一樣迷茫。看到各種新的術語,疑惑不解;不知道從何學起;照著書中的例子一步一步做都沒有問題,但是自己試著做東西,遇到各種問題卻不會解決,向別人提問,可能也沒有幾個人回答;感覺好像學完了單片機的各種模塊,但是要自己設計東西卻還是毫無思路,也不知道怎么去進一步深入學習;甚至在一開始就遇到太多困難,直接放棄了學習。
在我身邊,看到不少學習單片機的人。其中很多人學習的方法,就是通過看一些視頻或書籍教程,然后照著別人的代碼去寫,寫好了能用了,就感覺是學會了。而學的過程中,其實有很多東西不懂,但是也不知道怎么辦,就那么過去了。
有些人雖然照著那些教程學會了單片機,但是對單片機的理解仍然很淺顯。不知道怎么去設計單片機系統,也不知道怎樣進一步深入學習,搞不清到底什么才是重點,非常迷茫。
我也曾見過很多單片機學習者,發了一些帖子提問,上面貼上自己的程序,然后問這個不能工作怎么辦。問題沒有描述清楚,程序代碼很亂,也沒有電路圖,很多時候也沒有幾個人回答。有些人很可能就因此放棄了學習。甚至有不少人在一開始下載程序到單片機中就出現了問題而放棄了學習。
原因
為什么會出現這樣的情況呢?是因為這些人不愿意學習,或者學習能力太差嗎?我覺得任何人的毅力都有限,不可能一直堅持下去;而學習能力欠缺則是很多人都有的問題,特別是從小缺乏適當的教育。所以這不是主要的原因。
我覺得很大的一個原因是,沒有一個好的資料指導初學者進行單片機的學習。市面上單片機的學習資料非常多,但是真正的好資料并不多。常見的單片機學習資料有兩種,我來列舉一下。
一種是理論型的,有點像大學不少教科書的感覺。一上來就開始講寄存器、指令集、單片機內部結構,對于單片機初學者而言,一篇文章讀下來,幾乎全是晦澀難懂的專業詞匯,更談不上理解,這類書籍顯然不適合新手學習。
另一種則是重視實踐型的。這類型的學習資料,我也看過很多,但是其中很多都有一個特點,就是過分偏重實踐而幾乎不提思想、方法和原理。典型的就是市面上有很多《十天學會XXX》這類資料。用這種資料,確實可以快速學會單片機,并且充分迎合了很多人急功近利的心態,能快速學會想要的東西。但是如果僅僅靠這種資料,只能是學會單片機,但很難學好單片機。然后就出現了前面提到的諸多問題。
重點
單片機學習的重點,絕不是簡單的會用C語言給51寫幾個驅動,毫無代碼風格,拼湊一個勉強能用而bug很多、根本無從維護的系統。也絕不是把51、430、AVR等各種單片機的基本操作搞的一清二楚這么簡單。更重要的是從任意一款單片機學習的過程中,體會其中的工程思想,提煉學習方法和技巧,掌握單片機系統設計的通用方法。
程序設計經驗豐富的人都知道,編程語言只是其中最基本的東西,只是表達程序設計思想的載體,而絕不是編程的核心知識。更多的應該是程序設計的算法和工程思想。
一個較好的掌握了編程思想的人,能很快的從一種編程語言轉換到另一種編程語言;更進一步,一個掌握了優秀設計思想和學習技能的人,能更好的在不同的技術之間進行轉換。
人為什么要學習語言?語言本身并非最重要的東西,重要的在于語言是思想的載體。在語言學習過程中,我們慢慢學會了思考,慢慢有了自己的思想。如果沒有思想,語言本身就失去了意義,簡單的計算機程序也會處理文字,并且能比人做的更好,但是它卻不能像人一樣思考;而有了思想,用任何一門足夠完善的語言去表達都是可以的。
語言本身有很大的局限性,并不能表達所有的思想,而單片機也一樣有各自的局限性;另外,自然語言和人類思想,遠遠比單片機和單片機設計思想的組合要復雜;還有語言本身也能影響人的思維方式,例如美國人說話比中國人更直白,類似的,不同的單片機學習,也會影響單片機系統設計的思維(尤其是面向過程和面向對象的編程語言之間的差異更能體現這一點)。
結論
通過類比我們發現,單片機學習的核心并不是單片機編程本身,而應該是更上升一個層次的,單片機系統設計思想。而一旦掌握了單片機系統設計思想,離一個優秀的底層硬件工程師也就更近了一步。而學習這種思想,則是通過深入學習一種單片機,以及接觸多種其他單片機的方式來實現的。
網上有很多人爭論入門應該學習什么單片機,我覺得這不是最重要的問題。一旦掌握了優秀的設計思想,從一種單片機轉到另一種單片機、轉到嵌入式平臺,就輕松了很多。
但是是不是說,這種爭論就沒有意義呢?顯然也不是。還是拿自然語言來類比,如果一個住在中國的人從小學習的是英語,雖然也能培養他的思維,但是卻導致了諸多不便,因為周圍的人都在說漢語。對于這個人來說,他可以花幾年的時間再學習一下中文,但是比較費時間(自然語言太過復雜,一門新的語言可能要幾年才能學會;但是人類思想更加復雜,一輩子都在不斷積累)。
所以入門學習什么單片機的問題也是有一定的價值的,很多人不支持入門用51正是認為51已經要被淘汰了,工作時也很少會用到。不過好在單片機這種東西遠不及自然語言那么困難,精通51單片機的人,很快就能學會430單片機。
學習思路
1、注重實踐
很多中國學生,從初中甚至小學就開始學習英語了,直到大學畢業,英語水平也遠不如美國小學生的水平,我自己也是其中之一。原因很簡單,缺乏實踐。單片機的學習也一樣,沒有實踐恐怕永遠都是學不好的。
2、提煉思想
每當提到學習,我們常說“理論與實踐相結合”。然而現實中,真正做到這一點的人并不多,包括前面我也提到單片機學習遇到的各種問題。理論是從實踐中抽象出來的,而又對實踐起指導作用。理論和實踐應該是同等重要的。我們應該在學習單片機的過程中,不斷思考,提煉出單片機系統的各種理論思想,還有學習方法、技巧,為以后的進一步學習打下堅實的基礎。
3、不可急功近利
這一點不用多說。有些人一看到《五天學會***》《一周精通***》這類標題的學習資料就激動不已,實際上大部分情況下用這種資料學習,都沒有達到標題所說的效果,即使學完了,也只是了解了基本知識,并不能很好的運用。而這種東西反而容易讓人更加急功近利。如果一個知識的學習真有這么簡單,社會一定不是今天的樣子了。
4、堅持
硬件相關的學習相對來說都是比較難的,需要大量的知識和經驗積累。學習單片機也一樣,需要長期堅持。
我要做的
鑒于以上各種原因,我決定按照我的想法,自己寫一系列單片機學習的文章,幫助初學者學習。在寫這個系列教程的過程中,也有很多困難。
一是我自己的水平有限,尤其是做技術的人可能都有的通病,就是語言表達能力不足。
二是時間上的問題,這個系列的文章內容很多,整個知識結構的構思就花了我很長時間,而具體每寫一篇又都要進行構思,然后還得修改調整,整個系列我打算花一年時間來寫,需要花費我大量的精力。
三是就目前已經發表的十幾篇文章來看,還沒有達到我的期望,希望能有更多的人閱讀,特別是希望能有更多的人給我提供反饋,比如哪些地方寫的有問題、不好理解等等,這樣我才能更有動力繼續往下寫,也才能更好的對寫的不好的地方進行調整完善。
教程內容
本系列教程從最基本的入門知識開始,逐步深入介紹單片機系統設計,內容包括:
1、入門篇:單片機等基本概念、各種電子設計基本知識
2、思想篇:單片機/計算機系統設計的工程思想
3、學習篇:單片機學習過程、方法和技巧,以51單片機為例介紹,并推廣到其他單片機
4、應用篇:遵循規范的工程方法,設計單片機系統實例(計劃設計的系統有:計算器、電子表、密碼鎖、簡易手機,具體看有沒有時間再確定)
5、原理篇:從模擬電路、數字電路開始,逐步深入介紹單片機/計算機系統原理,并自行設計簡易的CPU(由于個人水平有限,這部分沒有把握寫好,具體內容視情況而定)
教程特點
1、技術知識點全面,從入門到精通
包含了各種基本知識,尤其是對單片機基本概念的介紹、為什么要用單片機等,在很多同類書籍教程中都被忽略了。同時也包含了一些深入的知識,包括原理篇考慮對單片機的基本原理進行介紹,有助于深入理解單片機。
本系列教程以51單片機為例進行介紹,之所以選用51是因為:
首先是我對51和430比較了解,而430大多是貼片封裝,不適合自己動手搭建電路,另外很多驅動官方都已經給出來了,不利于自己學習;
51是最常見的入門經典單片機,能找到的資料也最多,還能直接用Proteus軟件仿真,沒有條件購買開發板也可以學習;
51比其他不少單片機簡單,像430的時鐘模塊就相當的復雜,對于初學不好理解;
通過51介紹完單片機的基本知識,我會再把430進行簡要介紹,尤其是對比兩者之間的優缺點,讓大家很快感受到430的巨大優勢,而學習51正好為快速了解430打下了堅實的基礎。
2、除了單片機知識,還有思想、方法、技巧的介紹
本系列教程中,介紹單片機各種模塊編程知識的主要是學習篇,而學習篇只是整個教程的一部分。在學習篇中我會貫穿各種方法技巧,如何理解一些模塊功能,怎么看時序圖,嚴格遵守工程思想進行編程,程序發生了錯誤怎么調試等等。而在思想篇中會總體介紹很多重要的思想,為后面的學習做好準備工作。
3、知識先后順序的設計
單片機學習過程中,涉及大量的知識,而且很多知識之間相互依賴,關聯很強。
本系列教程對知識的先后順序進行比較明確的規劃,盡最大可能符合人的認知過程。但是實際規劃時發現,無論怎么調整知識的順序,總有一些知識之間相互依賴,關系復雜。例如開始講IO口的時候肯定會提到寄存器,而寄存器這個詞的理解,需要深厚的背景知識。但是這些背景知識在沒有進行實踐的時候也很難理解。
初學者常常就會在這樣的地方感覺疑惑不解,不知所措。而每次遇到類似這樣的知識,我會向初學者指出,應該如何對待。這個知識是應該自己去學習補充,還是等到學完原理篇再做理解,而現在又應該怎么去看待這個名詞。
另外,在整個教程的學習前,需要掌握一定的C語言等基礎知識,具體可參考教程第〇篇《序》中的相關說明
www.hainter.com/mcu-primer-0
4、語言通俗易懂
本系列教程力求語言通俗易懂,而不會用一堆新手不懂的詞語去解釋另一個不懂的詞語。但是受限于個人語言表達能力,可能有些地方表述的比較繁瑣,或者不清楚,希望大家能夠幫忙指出。
其他問題
如果覺得我寫的對你有幫助,歡迎多多反饋,包括寫的不正確、不合理、不太明白都可以指出來,這樣方便我對其進行完善。
本系列教程首發于我的個人主頁,歡迎訪問(由于是國外服務器,速度稍微有點慢,另外有些網絡條件下可能無法訪問):
www.hainter.com/category/hacker/mcu-primer
同時會將其轉發到CSDN、電子發燒友等站點,歡迎關注。
CSDN專欄網址
http://blog.csdn.net/column/details/mcu-introduction.html
電子發燒友論壇
http://bbs.elecfans.com/zhuti_mcu_1.html
轉載請注明來源:http://www.hainter.com/mcu-engineer
總結
以上是生活随笔為你收集整理的如何以学习单片机为契机,逐步成为优秀的工程师的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。