Arduino UNO 本質是 ATmega328P MCU + 預燒錄 Bootloader + Arduino IDE 預編譯庫。若只想用它作通用 AVR 開發板,需建立標準 AVR-GCC 工具鏈,繞過 Arduino IDE 編譯系統,直接產出 .hex 燒錄。
提供代碼補全、語法高亮、專案管理、Makefile 自動生成、GDB 除錯 (配合 AVR Dragon/JTAGICE3)。
錯誤:make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)
原因:Eclipse 安裝在 "Program Files" 等含空格路徑
解決:將 make.exe 複製到無空格路徑 (如 C:\make),在 Eclipse 偏好設置指向該路徑
錯誤:make: *** [Blink.o] Error -1073741502
原因:Windows 64 位下舊版 msys-1.0.dll 有已知缺陷
解決:下載 https://www.madwizard.org/download/electronics/msys-1.0-vista64.zip
替換 Eclipse 插件目錄下的 msys-1.0.dll
Arduino IDE 使用內建 Java 編譯協調器直接調用 avr-gcc,完全繞過 make,故不受 make 相關問題影響。Eclipse 插件採用標準 Makefile 流程,暴露了底層工具鏈問題。
| 設置 | 推薦值 | 說明 |
|---|---|---|
| MCU Type | ATmega328P | Arduino UNO 核心 |
| Clock Frequency | 16000000UL | 16MHz 晶振 |
| Optimization | -Os | 體積優化 (嵌入式首選) |
| C Standard | -std=gnu99 | GNU C99 擴展 |
| Programmer | Arduino (STK500v1) | 利用 Bootloader 串口燒錄 |
| Port | COMx | 設備管理器確認 |
| Baud Rate | 115200 | Uno Bootloader 預設 |
#define F_CPU 16000000UL
#include
#include
int main(void) {
DDRB |= (1 << PB5); // PB5 (Arduino D13) 設為輸出
while (1) {
PORTB ^= (1 << PB5); // 翻轉 LED
_delay_ms(500);
}
return 0;
}
hardware/arduino/avr/cores/arduino 和 variants/standard 加入包含路徑ARDUINO=10810 等宏libc.a libm.a但這失去了「純 AVR」的意義。建議:學習 AVR 寄存器直操作,查閱 ATmega328P Datasheet,建立底層驅動庫,才是嵌入式工程師核心競爭力。
Eclipse + AVR Plugin 是專業 AVR 開發的利器,但 Windows 下工具鏈整合易踩坑。核心解決:無空格路徑 + 更新 msys-1.0.dll + 正確配置 MCU/Clock/Programmer。脫離 Arduino 庫直接操作寄存器,才能真正掌握 AVR 體系架構。