單片機嵌入式培訓的注意事項(xiang)
時間:2020-05-13 來源:未知
在提到單片機或者嵌入式的時候,大多學員都很頭疼,這也不是沒理由的,每天都是成堆的代碼要你來完成,并且單片機入門難度也挺大的,所以你可千萬不能在犯錯誤了,下面就先來了解下單片機嵌入式培訓的注意事項吧。

大家之所以覺得單片機學習或者嵌入式培訓會比較吃力是因為它們需要用匯編或類C來寫,屬于比較低層的東西。而中斷有外部中斷和內部中斷兩種實現模式,硬件中斷模式和軟件中斷模式相對來說比較簡單,屬于應用層面的,相比之下,內部中斷就要復雜得多,內部中斷主要是發生重起,總線出錯、溢出、校驗出錯等情況產生的,很多軟件開發人員基本上不寫對應的中斷服務程序,因為它太難了而且一般也用不到。但是一旦發生,那就是致命錯誤,因此從整個系統健壯性來考慮必須要有相應的ISR才行,單片機嵌入式培訓應該注意的點包括:
1.延時
學習嵌入(ru)式編(bian)程經常會涉(she)及到硬件(jian)的(de)(de)操(cao)作,如ADC,打(da)開(kai)或(huo)者關閉(bi)一(yi)個電流源(yuan),這些都是(shi)需要(yao)時(shi)間的(de)(de),因此(ci)當在發出(chu)這些指(zhi)令(ling)的(de)(de)時(shi)候立即(ji)讀取寄存器的(de)(de)值是(shi)得不(bu)到想要(yao)的(de)(de)結果的(de)(de),而且(qie)還(huan)找不(bu)出(chu)原因,有(you)時(shi)候需要(yao)的(de)(de)延時(shi)還(huan)比較長,達到ms級,一(yi)般情(qing)況(kuang)下us級就夠了,根據各芯片的(de)(de)時(shi)鐘頻(pin)率而定,不(bu)單指(zhi)MCU的(de)(de)總線時(shi)鐘頻(pin)率。
2.變量
不建議將所有(you)變量都(dou)定(ding)義成全局(ju)變量,這樣(yang)管(guan)理起來比較麻煩,程序一旦出(chu)錯(cuo)(cuo)(cuo),破壞(huai)性也比較大,函(han)數(shu)也是如此,全局(ju)變量和通用(yong)函(han)數(shu)一定(ding)要申明,這樣(yang)在調(diao)用(yong)的時(shi)候不容易出(chu)錯(cuo)(cuo)(cuo),而且有(you)些編譯器對(dui)于未申明的函(han)數(shu)是不會報錯(cuo)(cuo)(cuo)的,但在調(diao)用(yong)的時(shi)候又會發(fa)出(chu)類(lei)型隱含轉換的警告,在這里(li)就(jiu)不舉例(li)子了(le),總之這點要特別(bie)小(xiao)心。
3.宏(hong)定(ding)義(yi)
在程(cheng)序(xu)編寫過程(cheng)對于(yu)一(yi)些特定(ding)的(de)(de)數(shu)字(zi)應該盡量使(shi)(shi)用宏(hong)定(ding)義,這樣做有個(ge)好處就(jiu)(jiu)是比(bi)較(jiao)直觀,要不(bu)然時(shi)間久了(le)看到(dao)那個(ge)數(shu)字(zi)根本就(jiu)(jiu)想不(bu)起(qi)它(ta)代(dai)表(biao)什么意思(si),宏(hong)定(ding)義并(bing)不(bu)會(hui)給程(cheng)序(xu)帶來任何(he)負擔,因為它(ta)在編譯的(de)(de)時(shi)候就(jiu)(jiu)已經全部替代(dai)了(le),所以(yi)盡可以(yi)廣(guang)而用之。值得一(yi)提的(de)(de)是宏(hong)定(ding)義并(bing)不(bu)局(ju)限于(yu)使(shi)(shi)用常(chang)量,它(ta)可以(yi)定(ding)義函(han)數(shu),因為它(ta)是直接替換,因此避(bi)免了(le)入棧(zhan)(zhan)和出棧(zhan)(zhan),提高了(le)程(cheng)序(xu)執行的(de)(de)效率,但(dan)是同時(shi)增加(jia)了(le)代(dai)碼量,因此一(yi)般用比(bi)較(jiao)簡單(dan)的(de)(de)函(han)數(shu),它(ta)還(huan)有一(yi)個(ge)缺點(dian)(dian)是在替換的(de)(de)過程(cheng)不(bu)檢查參數(shu)類型是否(fou)正常(chang),從而增加(jia)了(le)安全隱患,解(jie)決此問(wen)題的(de)(de)方法是使(shi)(shi)用一(yi)個(ge)稱之為inline的(de)(de)內聯函(han)數(shu),它(ta)繼(ji)承了(le)宏(hong)定(ding)義的(de)(de)優點(dian)(dian),又彌補(bu)了(le)它(ta)的(de)(de)缺點(dian)(dian),是個(ge)最佳的(de)(de)選擇(ze)。
大多數低檔次的單片機都是不支持浮點運算的,因此在實際使用過程中也很少用到,因此為了降低成本,一般都去掉了浮點運算模塊,這就帶來了一個問題,如果萬一要用到浮點運算怎么辦?其實即使不具有浮點運算的單片機在仿真調試過程依然可以使用float or double的數據類型進行計算,而且結果也很準確,這是為什么呢?這個因為編譯器自動調用了庫函數來實現的,一般是通過迭代的方法,因此它的執行效率非常慢,不建議采用此方法,而通常采用的是“定點”的方法來解決這個問題,比如說一個32bit的數據,可以假定它的低8位是小數位,然后移位計算,類似于整數運算,這種方法比較復雜,但是可以非常精確,還有一種方法就是直接放大10的N次方倍進行整數的計算,可以得出近似值,因此為了不增加不必要的麻煩,應該總是盡量避免使用浮點運算,一般情況也都是可以避免的。
4.watch dog
以(yi)三(san)重watch dog為例,watch dog1檢(jian)查時鐘頻率,watch dog2監(jian)視(shi)一小段代碼(ma),它必(bi)須在(zai)(zai)一個(ge)比(bi)較短的時間里喂一次(ci),一般(ban)要(yao)求(qiu)在(zai)(zai)250us到650us之間喂一次(ci),watch dog3監(jian)視(shi)一大段代碼(ma),要(yao)求(qiu)在(zai)(zai)比(bi)較長的時間內(nei)喂一次(ci),一般(ban)是100ms以(yi)內(nei),三(san)個(ge)條件必(bi)須同時滿足才行,這要(yao)求(qiu)對(dui)代碼(ma)的執行過程非常(chang)清楚。
這(zhe)里需要向(xiang)大家(jia)強調的(de)(de)是(shi),在單片機嵌(qian)入式的(de)(de)編(bian)程(cheng)(cheng)過程(cheng)(cheng)中程(cheng)(cheng)序(xu)的(de)(de)好壞往(wang)往(wang)是(shi)由(you)細(xi)節決(jue)定的(de)(de),一個程(cheng)(cheng)序(xu)寫的(de)(de)是(shi)否詳細(xi)、靈(ling)活,是(shi)與日積(ji)月累的(de)(de)知識積(ji)累與實際磨練成正比的(de)(de)。
以上介紹的就是單片機嵌入式培訓的注意事項了,學習單片機需要你專注并且專心,單片機需要你動手能力很強,本身學習單片機就是枯燥的,但是學成之后的喜悅是無法形容的。

