Úvod

AVR Studio má některé nepříjemné omezení tak jsem hledal nějakou alternativu. Řešením může být univerzalní IDE s názvem Eclipse, které můžete použít pro programování C, C++ aplikaci pro AVR, ARM nebo x86 (PC). Je napsané v Jave proto je hezky multiplatformní a za jeho vývojem stojí velká modrá IBM.
Není to žádná rychlokvaška důkazem budíž to, že Eclipse používají firmy jako Xilinx či Altera či Atmel (pro postbubertálního 32bitového AVR brášku).
Klady a zápory
- Simulátor sice existuje, ale je zastaralý. Proto je víceméně nutné, pracovat se skutečným HW.
- Při ladění nemáte tak pěkně zobrazené registry jako v AVR Studiu (jednotlivé bity a jejich význam).
- Je to dost flexibilní IDE, které má hodně voleb takže ze začátku to nahání strach.
- Import a export projektu mi přijde krkolomný.
+ call stack tree - ukazuje strom volání funkcí. Dáte si breakpoint do nejake funkce a pak podle stromu zjistite kdo ji volal.
+ Prohlížení proměnných - u lokálních proměnných udělá automaticky Add Watch což se u AVR Studia musí dělat ručně.
+ Automatické doplňování kódu podle šablony - Napíšete for a nabidne vam prazdny cyklus for( ; ; ){ }
+ Indexování zdrojáku - nemusíte mít v hlavě jaký je název globální proměnné z jiného modulu C. Indexer si váš kód průběžně parsuje. Zobrazí vám ve zvláštním okně u editovaného souboru (prototypy, makra, u struktur vám nabídne jednotlivé položky). Napíšete začátek názvu funkce zmáčknete Ctrl + Space a buď automaticky Eclipse doplní zbytek nebo nabídne alternativy v rozbalovacím menu.

Návod je psán polopatě a některé kroky jsem přeskočil. Popisuju jenom důležité kroky a zákeřnosti.
Je rozdělen na dvě části.
- První pojednává o tom jak Eclipse naučit produkovat HEX soubory a jak MCU naprogramovat. Pokud vám to stačí (nepíšete programy co mají chyby a všechno vám jede na poprvé :-)) tak můžete skončit první částí.
- Druhá pojednává o tom jak Eclipse naučit Debugovat.
Je primárně psán pro rozhraní JTAG, ale změnou pár parametrů se dá použít na debugWire.
Pro obě platformy Win & Lin se liší minimálně, když tomu tak bude poznáte podle klíčových slov Windows a Linux.
Možná narazíte na problémy. Já je vyřešil pomocí Google a www.avrfreaks.net.
Osobně jsem přesvedčen o tom, že až AVR PlugIn vyroste tenhle návod už nebude potřeba :-).

Poděkování. Děkuju Pepíkovi (ctěnému Lordu Sharkusovi) za zapůjčení AVR Dragona.



Ingredience

Pekáč (počítač) vymastíme Javou.
Do pekáče dáme plátek Eclipsu. Pořiďte si "Eclipse IDE for C/C++ Developers".
Okořeníme Eclipse AVR Plug-Inem.
A jako přílohu připojené železo (AVR), přes JTAG k PC třeba tenhle já měl pujčený tenhle.
Poznamka: Pokud potřebujete jenom programovat tak si vyberte z nepřeberného množství programátorů co nabízí avrdude.

Windows:
Pokud používate Widličku použijeme balík nástrojů (gcc, gdb ...) WinAVR

Linux:
Pokud chováte tučnáky tak si nainstalujte balík nástrojů (toolchain).
Ten by měl obsahovat: GCC, Binutils, Avr-libc, GDB, Avarice.
Linux - Fedora 9
Nastavit správný repozitář a naklepat do terminálu
yum install avr-gdb
yum install avrdude
yum install avr-libc
yum install avr-gcc
yum install avr-binutils
yum install avarice


První část - Programování (JTAG, debugWire, ISP)

Spusťe Eclipse "File->New->C Project"


V průvodci pro výběr programátoru jsem nastavil tohle pro AVR Dragona (JTAG). Tady se to bude lišit podle vašeho programátoru.


Jako výstup požadujeme HEX soubor. To nastavíme v okně Project Explorer pravý klik na váš projekt, pak Properties->C/C++ Build->Settings.


Napište svůj testovací program, ideálně něco se svítící LEDkou a zkompilujte.


Zkuste svůj testovací program nahrat do MCU. Nahravání se provádí skrz SW avrdude.
!! Pozor abyste měly v Project Exploreru označený správný projekt !!


Windows:
Tak až doteď šlo všechno hladce. Pokud máte nainstalované AVR Studio tak narazíte na problém.


Problém je v konfliktu ovladačů libusb a Jungo, rešení je zde.
A magický lektvar na problém je zde.
Po instalaci toho balíčku by mělo proběhnout programovaní v pohodě az na EEPROM pamet. Vypadá to na nectnost AVR Dragona. Po každé operaci se zřejmě provádí nová Enumerace. Protože Flash update proběhne v pořádku a pokud zadám programování z příkazové řádky tak se EEPROM naprogramuje bez problémů.
Linux:
S programováním jsem neměl žádné potíže a běželo to na první klik. Tady mě Linux mile překvapil :-).


Druhá část - Debugger (JTAG, debugWire)

Ladění probíhá skrz Open Source Debugger GDB.
My se budeme snažit vytvořit řetězec Eclipse <-> GDB <-> Avarice <-> AVR(JTAG).
Popis jednotlivých prvků v řetezci:
- GDB vezme váš program (*.ELF soubor) a vyčítá z něho informace pro ladění. Komunikuje pomocí text. příkazů a myslím, že přímá práce s ním je to spravné IT sado-maso.
- Eclipse a jiné grafické nádstavby (frontend) vám ulehčí život. Překládají vaše kliky na textové příkazy pro GDB.
Eclipse CDT verze má podporu pro GDB v sobě o tu se nemusíme starat.
- GDB nedokáže přímo pracovat s AVR, ale dokáže komunikovat pomocí TCP protokolu (GDB je klient a avarice je server) a avarice si tyhle příkazy překládá na JTAG intrukce.

Zpátky ke konfiguraci Eclipse. V menu vyberte "Run->Open Debug Dialog..."

"C/C++ Local Application->New" u zalozky Debugger nastavte




Ted musíme ještě nastavit avarice aby mohl GDB přistupovat k MCU.
"Run->External Tools->Open External Tools Dialog" a nastavit:
Windows:


Linux:




Spuštění

!! Před každým laděním je nutné mít spustit avarice server přes "Run->External Tools->Start Jtag" !!
Linux:
Moje cesta k funkčnímu IDE s debuggerem po linuxem byla složitější. avarice se odmítal spustit. Pořád na mě křičel, že nemůže nalézt AVR Dragona připojeného přes USB. Ačkoli bylo, zajímavé, že avrdude (SW pro programování MCU) si s AVR Dragonem rozuměl.
Od neúspěchu mě po dni neuspěšného laborování zachránila pauza se zeleným čajem a kandovaným zázvorem mezi horní a spodní čelistí.
Řešení spočívalo v tom, že jsem se vykašlal na hotové balíčky (nemusí být vždy aktuální a u některých programů s divokým vývojem to může být vééélký problém) a zkompiloval si vlastní.
Stáhnul jsem zdrojáky (tarbally) libusb a avarice.
Smazal jsem předchozí verzi avarice a libusb.
Rozbalil do TEMPu zdrojové kódy a zkompiloval klasicky ./configure && make && make install.

A takhle vypadá ve vší parádě odvšivovač (Debugger) v Eclipsu




Problémy

- WinAVR používá knihovny Cygwin. Bohužel se mi nepodařilo rozchodit jej s nainstalovaným EDK od Xilinxu, který rovněž používá Cygwin. Tento problém sice drtivou většinu lidí trápit nebude, ale lidi co používají Cygwin, chtějí mít ve Windows svůj Unixový koutek, to bude asi nepříjemné. Řešením tohodle problému jsem se ani moc nazabýval, protože primárně jsem to potřeboval rozchodit pod Linuxem.

- Pokud chcete ladit tak si vypněte optimalizace resp. si nastavte úroveň optimalizací na -O0. Kde to nastavit viz. Tipy a triky pro Eclipse