初學者怎麼學習微控制器

  成為一名嵌入式工程師,簡單的微控制器基礎學習與應用是不可缺少的。怎麼學習微控制器呢?下面小編分享了學習微控制器的方法,供你參考。

  學習微控制器的方法

  1*** 鸚鵡學舌

  剛出生的孩子叫“爸爸”“媽媽”的時候,他甚至不知道“爸爸”“媽媽”是什麼意思,更不會理解這些聲音是什麼意思,但是我們帶著孩子見到他爸爸就讓他喊“爸爸”,見到媽媽就讓他喊“媽媽”,見到爺爺就喊“爺爺”„„慢慢的你會發現,次數多了,孩子就知道誰是爸爸,誰是媽媽,誰是爺爺,誰是奶奶了。

  大家剛開始接觸微控制器的時候,也屬於微控制器行業的新生兒。微控制器的樣子,微控制器外圍的各種器件,微控制器內部的各種結構,微控制器使用 C 語言的程式設計方法,初學者可能都沒有見過,腦子裡全無概念。沒關係,有些概念和方法你不理解也沒有關係,甚至不需要你去理解,你只需要跟著我去鸚鵡學舌式的學習,第一遍學習某一節課的內容時,對於程式,大家就可以完全跟著抄下來,甚至抄兩三遍,過一段你會發現,好多東西你也認識了,好多概念你也慢慢的理解清楚了,你也能大概看懂別人的小程式了,切忌覺得自己看會了,而簡單複製貼上。

  2*** 照葫蘆畫瓢

  很多同學學習的時候喜歡看,看我做的視訊,看我寫的程式,甚至看別人的程式,都能看懂,覺得自己就會了,等到自己寫程式的時候,感覺就是老鼠啃天,不知道從哪裡下手了,這是初學者很容易犯的“眼高手低”的毛病,所以第二步的內容就非常重要了。

  我的要求是,每一位同學,在學完了當前課的內容,把第一步順利完成以後,然後關掉視訊教程,關掉原始碼,自己通過看電路圖和查詢非原始碼的其他任何資料,把當節課我寫的程式程式碼重新默寫出來,邊寫邊多少理解那麼一點點,不是純粹的背誦,應該說是背誦加理解的結合體。甚至學過幾節課以後,可以回頭把前邊曾經這樣實現過的課程,再按照這種方法做一遍。千萬不要認為這一步沒必要,這一步是你能否真正學會微控制器的一個關鍵,在學完本教程之前,每一課內容都要這樣做,如果每一個程式你都能夠完美的完成,那麼可以說,當節課的內容,百分之七八十你已經掌握了。

  3*** 他山之石,可以攻玉

  微控制器技術的最大特點就是可以通過修改程式來實現不同的功能,因此舉一反三的能力就必不可少了。每一節課的例程後邊,我一般都會佈置幾個作業,大家儘量去獨立完成這個作業。在完成這個作業的過程中,都可以參考我的程式思路,在這個基礎上通過動腦思考去構建你自己的程式框架,最終將程式完成。

  在我們工程師實際產品研發的時候,很多種情況下也是如此。比如一個產品,我們如果從零起步的話,可能會走很多彎路,遭遇很多前人已曾遭遇過的挫折,所以我們通常的做法是尋找購買幾款同類產品,然後先研究他們的各自優缺點,學習他們的長處,然後在同類產品基礎上再來設計我們自己的產品,這就是“他山之石,可以攻玉”。

  初學者在學習的時候,往往遇到的問題很多,你應該想到,你遇到的問題,可能前輩們早就遇到過了,所以遇到問題後,不要慌張,首先利用谷歌或者百度這些搜尋引擎在網上搜一下,要做什麼新東西,先去網上找相關資料瞭解一下,不管是程式設計還是硬體設計,多多參考別人的東西,只要把別人的東西分析明白了,自己用起來了,也就成為自己的知識了。

  4*** 理論實踐結合,溫故知新

  當大家把所有的課程都按照前邊三步完成後,這個時候不妨再把書開啟,再看看書,經過了自己的實戰經歷,再看書的時候,對很多知識點會有一種恍然大悟的感覺。甚至視訊教程、書籍都可以反覆看幾遍,可能有的知識點當時學習的時候不明白,過了一段時間,回過頭來再學習的時候,一下就明白了。

  微控制器C語言優化技巧

  1、程式的書寫結構

  雖然書寫格式並不會影響生成的程式碼質量,但是在實際編寫程式時還是應該尊循一定的書寫規則,一個書寫清晰、明瞭的程式,有利於以後的維護。在書寫程式時,特別是對於While、for、do…while、if…elst、switch…case 等語句或這些語句巢狀組合時,應採用“縮格”的書寫形式,

  2、識別符號

  程式中使用的使用者識別符號除要遵循識別符號的命名規則以外,一般不要用代數符號***如a、b、x1、y1***作為變數名,應選取具有相關含義的英文單詞***或縮寫***或漢語拼音作為識別符號,以增加程式的可讀性,如:count、number1、red、work 等。

  3、程式結構

  C 語言是一種高階程式設計語言,提供了十分完備的規範化流程控制結構。因此在採用C 語言設計 微控制器應用系統程式時,首先要注意儘可能採用結構化的程式設計方法,這樣可使整個應用系統程式結構清晰,便於除錯和維護。於一個較大的應用程式,通常將整個程式按功能分成若干個模組,不同模組完成不同的功能。各個模組可以分別編寫,甚至還可以由不同的程式設計師編寫,一般單個模組完成的功能較為簡單,設計和除錯也相對容易一些。在C 語言中,一個函式就可以認為是一個模組。所謂程式模組化,不僅是要將整個程式劃分成若干個功能模組,更重要的是,還應該注意保持各個模組之間變數的相對獨立性,即保持模組的獨立性,儘量少使用 全域性變數等。對於一些常用的功能模組,還可以 封裝為一個應用程式庫,以便需要時可以直接呼叫。但是在使用模組化時,如果將模組分成太細太小,又會導致程式的執行效率變低***進入和退出一個函式時保護和恢復暫存器佔用了一些時間***。

  4、定義常數

  在程式化設計過程中,對於經常使用的一些常數,如果將它直接寫到程式中去,一旦常數的數值發生變化,就必須逐個找出程式中所有的常數,並逐一進行修改,這樣必然會降低程式的可維護性。因此,應儘量當採用預處理命令方式來定義常數,而且還可以避免輸入錯誤。

  5、減少判斷語句

  能夠使用條件編譯***ifdef***的地方就使用條件編譯而不使用if 語句,有利於減少編譯生成的程式碼的長度。

  6、表示式

  對於一個表示式中各種運算執行的優先順序不太明確或容易混淆的地方,應當採用圓括號明確指定它們的優先順序。一個表示式通常不能寫得太複雜,如果表示式太複雜,時間久了以後,自己也不容易看得懂,不利於以後的維護。

  7、函式

  對於程式中的函式,在使用之前,應對函式的型別進行說明,對函式型別的說明必須保證它與原來定義的函式型別一致,對於沒有引數和沒有返回值型別的函式應加上“void”說明。如果果需要縮短程式碼的長度,可以將程式中一些公共的程式段定義為函式,在Keil 中的高級別優化就是這樣的。如果需要縮短程式的執行時間,在程式除錯結束後,將部分函式用巨集定義來代替。注意,應該在程式除錯結束後再定義巨集,因為大多數編譯系統在巨集展開之後才會報錯,這樣會增加排錯的難度。

  8、儘量少用全域性變數,多用區域性變數。因為全域性變數是放在資料儲存器中,定義一個全域性變數,MCU 就少一個可以利用的資料儲存器空間,如果定義了太多的全域性變數,會導致編譯器無足夠的記憶體可以分配。而區域性變數大多定位於MCU 內部的暫存器中,在絕大多數MCU 中,使用暫存器操作速度比資料儲存器快,指令也更多更靈活,有利於生成質量更高的程式碼,而且區域性變數所的佔用的暫存器和資料儲存器在不同的模組中可以重複利用。

  9、設定合適的編譯程式選項

  許多編譯程式有幾種不同的優化選項,在使用前應理解各優化選項的含義,然後選用最合適的一種優化方式。通常情況下一旦選用最高階優化,編譯程式會近乎病態地追求程式碼優化,可能會影響程式的正確性,導致程式執行出錯。因此應熟悉所使用的編譯器,應知道哪些引數在優化時會受到影響,哪些引數不會受到影響。