AVR與傳統(tǒng)類型的單片機相比,,除了必須能實現(xiàn)原來的一些基本的功能,其在結(jié)構(gòu)體系,、功能部件,、性能和可靠性等多方面有很大的提高和改善。
但使用更好的器件只是為設(shè)計實現(xiàn)一個好的系統(tǒng)創(chuàng)造了一個好的基礎(chǔ)和可能性,,如果還采用和沿襲以前傳統(tǒng)的硬件和軟件設(shè)計思想和方法的話,,是不能用好AVR的,甚至也不能真正的了解AVR的特點和長處,。
功能越好的器件,,需要具備更高技術(shù)和能力的人來使用和駕馭它。就象一部好的F1賽車,,只有具備高超技術(shù)的駕駛員才能充分體會到車的特點,,并能最大限度的發(fā)揮出車的性能。
AVR具有上手入門快,,開發(fā)方便簡單的特點,,但要充分體會和發(fā)揮AVR的優(yōu)點,還需要應(yīng)用工程師本身的硬軟件設(shè)計開發(fā)能力的不斷學習,、實踐提高。
“外行看熱鬧,,內(nèi)行看門道”,,對于有一定基礎(chǔ)的嵌入式和單片機系統(tǒng)設(shè)計開發(fā)的工程師,不妨先簡單嘗試一下AVR,。
開發(fā)環(huán)境與工具:PC+下載線+實際的系統(tǒng)板
PC上的開發(fā)軟件:
AVR Studio(Free)匯編+匯編調(diào)試+高級語言調(diào)試+軟件仿真
ICC,、CVAVR、BASCOM-AVR 高級語言程序開發(fā)+程序下載,。其中一個購買正版全功能,,作為主要的開發(fā)環(huán)境,其它使用DEMO版,作為輔助及參考,。
AVR ISP下載線:
STK200 and STK200+ and STK300 ISP programmer,。通過PC的打印機口,采用ISP技術(shù)將系統(tǒng)運行代碼(HEX,、BIN)和數(shù)據(jù)寫入AVR芯片的Flash和EEProm中,,編程AVR的配置熔絲位和加密位。支持決大多數(shù)的AVR芯片,、以及ATMEL的51兼容芯片89S8252,、89S52等。在ICC,、CVAVR,、BASCOM-AVR、BASCOM-8051中都內(nèi)含對該下載線的支持程序,。免費專用的下載程序:SLISP,、PonyProg2000等。
盡量不使用仿真器的建議:
在開發(fā)和調(diào)試系統(tǒng)程序時,,有許多人完全依賴于仿真器,,一旦離開了仿真器時就感覺無從下手。其實,,由于AVR的Flash存貯器可方便的使用ISP技術(shù)在線的多次擦寫,,因此建議盡量不使用(依賴)仿真器來開發(fā)和調(diào)試程序。
在實際開發(fā)過程中,,程序的調(diào)試可以從下幾方面入手:
現(xiàn)在的高級語言編譯器(如C編譯器)可以產(chǎn)生效率很高的機器代碼,,因此建議大家盡量使用高級語言編寫系統(tǒng)程序。
使用Atmel公司提供AVR Studio軟件模擬仿真環(huán)境,,以及其他的軟件模擬仿真環(huán)境(BASCOM-AVR),。
盡可能使用高級語言編寫系統(tǒng)程序。
利用目標板上的LED,、LCD或異步串口,。見附件“沒有仿真器的情況下如何開發(fā)AVR”的介紹。
提高硬件設(shè)計的合理性:
盡量合理和充分使用AVR片內(nèi)的資源,,如EEPROM,、A/D、內(nèi)部的RC振蕩源,。
盡量采用串口通信連接的外圍器件,,大容量的存儲器、LCD控制器,、打印機,、不用8279(LED數(shù)碼管+鍵盤)而使用7279等,。除了必須外擴RAM(如語音和圖象),一般不提倡使用并行擴展(573+譯碼電路),,減小硬件和連線以及PCB板上錯誤的出現(xiàn)概率,,同時也提高了系統(tǒng)的可靠性。并行擴展向串行擴展是發(fā)展趨勢?,F(xiàn)在有大量的新的外圍器件采用高速的串行接口,,如A/D、D/A,、RTC,、存儲器等。
盡量使用以及在目標板上預留ISP程序下載接口,,或使用IAP技術(shù),。
優(yōu)點:ISP接口與I/O的兼容性比JETAG好。
缺點:不能在線調(diào)試
注意和掌握AVR配置熔絲位的使用:
.系統(tǒng)晶振的選擇
.BOD的使用
.啟動延時
.Mega8的PC6引腳,,RESET與通用I/O的轉(zhuǎn)換
.JETAG接口和通用I/O的轉(zhuǎn)換
.啟動向量的轉(zhuǎn)換,,BOOT-LOAT區(qū)大小的設(shè)置
提高硬件可靠性的考慮:
.盡量采用片內(nèi)晶體、采用低頻率的系統(tǒng)時鐘,、振蕩電路的輸出小幅度,。
.選擇合適的啟動延時參數(shù)
.使用BOD、片內(nèi)的看門狗
.合理休眠方式的使用
.不用I/O口設(shè)定輸出低電平
.利用內(nèi)部的EEProm和寄存器MCUCSR判斷復位標志,,進行不同的處理
提高軟件設(shè)計的能力和水平:
盡量合理采用高級語言設(shè)計編寫系統(tǒng)程序,。有許多人認為使用匯編寫程序比較精簡,而用高級語言開發(fā)會浪費很多程序空間,,其實這是一種誤解,。對一個有經(jīng)驗的,而且非常熟悉某種單片機的匯編高手而言,,他是能寫出比高級語言更精簡的代碼,。而對匯編不是很熟的開發(fā)者、或突然更換了一種新的單片機,,您能保證一定可以寫出比高級語言更簡練的代碼嗎,?
高級語言的優(yōu)越性是匯編語言不能比的:
.程序移植方便
.程序的堅固性
.數(shù)學運算的支持
.條理清晰的結(jié)構(gòu)化編程,程序的可維護性,。
.可協(xié)同開發(fā)軟件,,開發(fā)周期短。
現(xiàn)在的高級語言編譯器(如C編譯器)已可以產(chǎn)生代碼效率很高的機器代碼,,因此建議大家能用高級語言實現(xiàn)的程序盡可能使用高級語言寫,在對速度和時序要求特嚴的場合可以采用混合編程的方法來解決,。
更深入和全面的掌握各種串行通信協(xié)議的規(guī)程:
嵌入式系統(tǒng)目前以大量的使用串行接口外圍芯片和各種通信接口,,如RS232,、兩線(I2C)、三線(SPI),、單總線,、USB、CAN,、TCP/IP等,。開發(fā)人員和程序員應(yīng)了解低層協(xié)議,熟悉硬件怎樣和如何實現(xiàn)低層協(xié)議,,如何定義可靠的上層應(yīng)用協(xié)議,,以及低層協(xié)議驅(qū)動同上層應(yīng)用協(xié)議之間的接口設(shè)計(中間層軟件的實現(xiàn))等。
硬件工程師的軟件編寫能力要提高,,采用標準程序編寫方式,、完善的軟件整體框架的設(shè)計、良好的數(shù)據(jù)結(jié)構(gòu)和程序結(jié)構(gòu)系統(tǒng),。(計算機軟件專業(yè)的程序設(shè)計員對硬件不熟悉,、大部分是在操作系統(tǒng)支持下編寫軟件,對低層接口和協(xié)議的驅(qū)動層以及接口也不了解,,往往也編寫不出好的單片機系統(tǒng)程序,。)
通信接口的編寫應(yīng)盡量
.采用中斷+緩沖區(qū),
.分層+結(jié)構(gòu)化設(shè)計,,
.盡量不使用輪循方式(降低AVR的效率),。參見URAT(RS232)驅(qū)動+中間層軟件示例。
采用好的系統(tǒng)設(shè)計模式:
盡量不使用傳統(tǒng)的前后臺(中斷)系統(tǒng)設(shè)計模式,,任務(wù)之間相互影響和干擾,,無法定時操作。如設(shè)計一個采用動態(tài)掃描方式驅(qū)動的8位LED數(shù)碼管顯示+動態(tài)掃描的4*4矩陣鍵盤,。
采用TimeTip+狀態(tài)機設(shè)計+CASE結(jié)構(gòu),,實現(xiàn)多任務(wù)并行運行系統(tǒng)設(shè)計方法?;驎r間觸發(fā)式的系統(tǒng)設(shè)計,。(見:《時間觸發(fā)嵌入式系統(tǒng)設(shè)計模式》中國電力出版社 2004.6)
移植小型嵌入式操作系統(tǒng),如UCOS-II,。在網(wǎng)上有些免費的基于AVR的簡潔的操作系統(tǒng),。
提高C語言的編程能力和軟件應(yīng)用水平:
熟悉和用好C中的數(shù)據(jù)結(jié)構(gòu)體、指針應(yīng)用,、內(nèi)存管理等較高級的應(yīng)用,。
熟悉和了解你所使用的高級語言開發(fā)平臺的特點。這些平臺是針對某一類處理器的,,包含許多特殊的不兼容的語句和擴展的結(jié)構(gòu),、語句,、函數(shù)等。盡管使用方便,,但由于其不透明性和時間的不確定性,,因此要合理使用。如C中的getchar(),、putchar()等,。
AVR有多個開發(fā)平臺,每個都有其特點和不足,。能夠綜合使用這些平臺,,相互互補,能夠提高開發(fā)效率,。如通過ICC,、CVAVR的程序生成器CodeWizard學習和了解AVR的硬件設(shè)置,簡化計算,,快速的生成程序基本模塊,,如“一個URAT(RS232)低層驅(qū)動+中間層軟件示例”。