看到公司的老外都是用Linux編譯AVR的程序,感覺很強,而且本人也很喜歡linux,所以決定進行學習,現記錄一下學習過程:
首先安裝avr-gcc和avr-gdb:
sudo apt-get install gcc-avr
sudo apt-get install gdb-avr simulavr avrdude
1.編譯我們的算法文件,也就是老外以前發給我們這邊的關於算法的.o文件。遇到小困難,提示for' loop initial declaration used outside C99 mode
,網上查了一下,在編譯的時候加上-std=c99就OK了,聽說將for循環裏的變量放到外面也可以;
2.在編譯彙編文件的時候,出現了很多錯誤,看上去就好像編譯器把彙編文件當成了.c文件,在選項中加上-x assembler-with-cpp就好多了;
3.將各個源文件編譯成.o文件後,進行鏈接生成.elf文件,但總是提示:undefined reference to 'asm',asm是用來嵌入彙編的,找了很久,即使使用winavr相同的命令,最後鏈接的時候還是會出現這個錯誤。經過長期的和winavr之間的對比,終於發現:其實就是在第一步上面加的-std=c99有問題,winavr上使用的是-std=gnu99,將文件全部重新編譯之後,OK,最後使用avr-objcopy將.elf轉換爲.hex,Finished!