初嘗Linux下的AVR單片機(jī)開發(fā)
Posted on 2009/04/02 by PT — 7 Comments ↓
原帖地址:
此前接觸過AVR單片機(jī),發(fā)現(xiàn)無論是書店里面的教材,還是網(wǎng)上一大堆的中文資料,無一例外都是說windows下使用WinAVR、ICCAVR之類的,Linux方面的簡直只字不提,難道這就是傳說中的中國國情?外國情況可很不一樣,玩單片機(jī)的Geek一般都很哈Linux,做單片機(jī)開發(fā)的軟件一應(yīng)俱全,當(dāng)然還是開源的。
昨天從淘寶重新買了條USB的下載線,回來一看是USBasp的設(shè)計(jì),附送的光盤當(dāng)然也是win下的驅(qū)動和說明了,忽略。
插上下載器,lsusb,認(rèn)倒是認(rèn)出來了,叫做VOIT,那怎么用呢?上網(wǎng)一搜,原來USBasp是德國人的設(shè)計(jì),GPL的,其中提到AVRDUDE支持USBasp,當(dāng)然也有源碼下載。不過我用的是Ubuntu,發(fā)揮超級牛力的時候到了:sudo apt-get install avrdude,恩,幾秒鐘搞定,讓他們?nèi)ゾ幾g吧!
Linux下做單片機(jī)開發(fā)當(dāng)然首選GCC,就如這些英文教程說的,下載源碼?No,No,APT has Super Cow Powers,繼續(xù)sudo apt-get install gcc-avr binutils-avr avr-libc
幾分鐘裝完,很好,估計(jì)那些下載源碼回來編譯的同學(xué)要去喝兩個小時茶才能用了。
萬事俱全,先寫個單片機(jī)的HelloWorld,借用micahcarrick的源碼:
#define F_CPU 1000000UL /* 1 MHz CPU clock */
#include
....保存為toggle_led.c
命令時間:
avr-gcc -mmcu=atmega48 -Wall -Os -o toggle_led.o toggle_led.c是不是似曾相識?平時用gcc就這么用的,這里除了把gcc改成avr-gcc,沒多大區(qū)別。-mmcu定義了目標(biāo)CPU的類型,我用的是atmega48;-Os是優(yōu)化選項(xiàng),減少程序的大小。這就是傳說中的交叉編譯。
接著把目標(biāo)代碼翻譯成可以燒錄到芯片上的hex文件:
avr-objcopy -j .text -j .data -O ihex toggle_led.o toggle_led.hexavr-objcopy的-j參數(shù)限定轉(zhuǎn)換的程序段,-O設(shè)定hex的輸出格式,ihex即Intel Hex file
[Update: 本例子中,-j .data這個選項(xiàng)沒作用,因?yàn)?data區(qū)根本沒有數(shù)據(jù);.data是存放初始化數(shù)組、字符串等數(shù)據(jù)的段,如果程序用到了,記得加上]
搞定,開燒:
sudo avrdude -p m48 -c usbasp -e -U flash:w:toggle_led.hex因?yàn)橹苯幼x寫USB接口,所以不給權(quán)限的話會提示找不到編程器,當(dāng)然配置USB權(quán)限最好,這里暫時用sudo。avrdude的-p指定目標(biāo)CPU,-c指定下載器,如果不知道所用的下載器是什么型號,敲avrdude -c會列出所有支持的下載器型號及其描述。-e即燒錄前清空,-U參數(shù)指定刷寫類型以及刷寫文件。
[Update:可參考virtualbox使用usb的配置,把當(dāng)前用戶加入usbfs組,就可以直接使用avrdude了]
回車后下載器的指示燈閃了下,跟著單片機(jī)上的小燈開始閃爍,Hi, Hello World.
當(dāng)然問題不是完全沒有,我用avrdude下載完后默認(rèn)的校驗(yàn)老是無法通過,說讀取錯誤,只好加個-V來跳過校驗(yàn)。可能跟個別機(jī)器有關(guān)。
當(dāng)然實(shí)際開發(fā)很少這樣敲一大堆命令來編譯程序,一般都用Make搞定。
對比起Win下滿是GUI的程序,我第一次接觸WinAVR都搞了半天,如何如何配置一個Project,哇那個屬性窗口真讓人眼花繚亂,使用gcc來開發(fā),則可以循序漸進(jìn),未了解到的參數(shù)就不用,簡潔,明了,但不失其功能強(qiáng)大。
資源:
USBasp主頁:
AVR-GCC Programming Guide:
Linux Atmel AVR Tutorial:
Micah Carrick -- AVR(非常推薦,但是需要翻墻) :
AVR Libc User ManualLib Reference:
評論
查看更多