網友評分: 9.7分
1.目標代碼效率極高;(同樣功能的程序,經由GCC 編譯后的目標代碼,通常比CVAVR的代碼短20%-50%,且運行速度更快)
2.GCC的代碼可讀性和可移植性最高;(為全球最大的自由軟件開發組織的首選開發工具,GCC是C語言事實上的工業標準,所以用GCC編制的程序,幾乎完全不必考慮移植性問題)
3.WinAVR是公開源代碼的自由軟件于有大量的高手參與它的開發,所以無論是GCC本身,還是與GCC 配套的AVR 編譯包,其更新速度和效率都是其它開發工具(accavr,avr studio)所遠不能比擬的;
1、AVRGCC不能像CVAVR或ICCAVR那樣把特殊I/O口當變量來用,怎么辦?
其實,使用 AVRGCC 的 inp(port) 和 outp(data,port) 宏就是最好的方法,但如果真的需要延續以往的使用方式,也可以照以下方式辦理:#define dPORTA (*(unsigned char *)(PORTA + 0x20))。如此,就定義了一個 dPORTA 的偽變量,可以直接用于表達式中,并且用此種方式也可以實現類似 C51 中的 sfr 變量類型……
2、AVRGCC 不能編譯帶浮點函數的程序,怎么辦?
很簡單,在工程所在目錄的makefile文件中,把LDFLAGS=項目最后加上 .-lm就可以了……
3、怎么改變目標程序的優化方式?
在makefile文件的CPFLAGS=行中,加入-Ox(x=1,2,3,s)就可以了,如果已經有了-O的項目,就改變現有的,1~3 代表優化方式,s代表按代碼長度優化……
4、AVRGCC 能不能為 AT90S1200、ATTiny 系列進行 C 語言編程?
答案是肯定的!首先,需要在 makefile 的項目中,把MCU=后面的內容改成avr2其次,需要在程序所在的 c 文件中,把#include 改成#include ,#include如此,即可以直接將編譯后的代碼用于該兩類MCU上,不過,還需要注意的是,由于該兩類 MCU 沒有軟件堆棧和 RAM,所以,程序中*禁止*使用全局變量、局部靜態變量以及中斷處理以外的函數(其實在 GCC 中,中斷處理程序叫做“信號”,不叫函數),并且,在中斷處理過程中,最好不要開放中斷,否則會引起數據錯誤并非不可以,但需要一些技巧)。