MSVC + PIC

Mate radi MPLAB ? Ja nie, toto prostredie sa neda povazovat za produktivne. Hladal som teda dlhsiu dobu, ako rozbehat PICovy projekt pod MS Visual Studiom. Myslim ze je to jeden z produktov od microsoftu ktory je dotiahnuty do velmi slusneho stavu a taktiez je dostupne mnozstvo pluginov zefektivnujicich vyvoj - za zmienku urcite stoji plugin VisualAssist ktory znacne zvysuje komfort programatora.

To co tu teraz ponukam je strucny pohlad na to ako rozbehat Microchip PIC projekt pod visual studiom. Ma to stale dost vela nedostatkov, ale verim ze sa mi to skor ci neskor podari sfinalizovat do takeho stavu, ze z Visual Studia bude plnohodnotny nastroj na vyvoj PIC aplikacii. Samozrejme zabudnite na srandy ako debugovanie, alebo ine specialitky.

Inspiraciu som hladal pri AVR komunite, napriek tomu ze AVR Studio sa da povazovat za komfortny a produktivny nastroj, stale su jedinci ktori sa pokusali preniest AVR projekt do MSVC a viac menej sa im to aj podarilo.

Co budeme teda potrebovat ? Ukazkovy projekt ktory tu prikladam je pre 8 bitovy mikropocitac 16F648A, jadrom celej transformacie do visual studia je tzv. makefile. Tento definuje rozne akcie - od zoznamu suborov urcenych na kompilaciu, cez jednotlive prikazy kompilatora a linkera az po napalenie vystupneho .hex suboru do mikropocitaca.

Silny doraz je na dobru commandlineovu zakladnu. Cize potrebujeme si nastudovat ako sa vola prikaz kompilatora a linkera. V mojom pripade som si velmi oblubil kompilator od spolocnosti HiTech. V MPLABE som spustil kompilaciu, rozobral som volane prikazy a navrhol som ich vo forme aby ich vedel spracovat makefile. Programator pouzivam PicKit2, je to vyborna vec a kazdemu odporucam, na stranke microchipu sa mi podaril najst velmi sikovny commandlineovy tool s ktorym sa da dokonale ovladat cely programator.

Microsoft Visual Studio 2005
 Full size

Ako silny zastanca textovych diskovych managerov a commanderov propagujem suzitie s prikazovym riadkom. Kto ma vela odvahy moze sa trapit s TotalCommanderom, a kto ma menej rozumu zvoji si zobrazenie prikazoveho riadku a moze pracovat aj tak. Moj makefile totiz definuje zopar uzitocnych prikazov, napr "nmake on" zapne napajanie vaseho zariadenia (tusim MCLR ON sa to oznacuje), "nmake off" zase vypne vase zariadenie "nmake program" naprogramuje vygenerovany .hex subor "nmake clean" pomaze vsetky priebezne subory. NMake je microsoftova napodobenina znameho make prikazu, v podstate to robi to iste, ak vas system nepozna tento prikaz dajte si vyhladat "nmake.exe" a nastavte si environment premennu PATH aby vam ukazovala aj do tohoto adresara. Snazil som sa nastavit projekt tak, aby po stlaceni F5 (spustit) vykonalo "nmake program" ale zial bez uspechu.

MAKEFILE
 Full size

Vyhody:

  • Ani nemusim spominat, jednoducho MPLAB ako editor/IDE je velmi slabo spracovany, prikazy ako "Find all occurences", "Goto declaration" velmi urychlia cely vyvoj aplikacie.
  • Zaujimave je, ze MPLAB je tak podivne navrhnuty, ze kompilaciu vyvolava pre kazdy zdrojovy kod osobitne (pravdepodobne niektore kompilery nevedia kompilovat viacej kodov naraz ?). Cize pre kazdy .c subor sa spusti prikaz na kompilaciu. To znamena: loadnutie execka kompilatora, alokovanie pamate, loadnutie potrebnych DLL kniznic, otvorenie suboru, sparsovanie, skompilovanie, unloadnutie kniznic, pozatvaranie suborov, uvolnenie pamate... Tieto vsetky aktivity sa deju pocas pustanie lubovolneho EXEcka, a ked potom proces kompilacie trva 20 sekund, nikoho to nepotesi. Naproti tomu poskytnuty makefile zavola kompilator so zoznamom vsetkych zdrojovych kodov a cele to nutne pozadie spojene so startom programu je teda vykonane iba raz. Vysledok ? Kompilacia sa skratila na 4 sekundy :)
  • Nedostatky:

  • Pri kazdom pridani noveho zdrojoveho kodu (suboru) je nutne aktualizovat makefile, pretoze tento obsahuje priamo zoznam suborov urcenych na kompilaciu. Tento proces je vsak velmi jednoduchy a pravdepodobne sa da zautomatizovat, len na to nestacia moje vedomosti.
  • Pri urcitom type zmeny v kode (napr. zmena parametrov funkcie) makefile nejako zabudne prekompilovat tento kod a jedina moznost ako tento problem vyriesit je spustit Clean a znova skompilovat.
  • Napalenie je automaticke po uspesnom zlinkovani projektu, niekedy to nemusi byt vhodne (pri testovani, ci vobec kompilacia zbehne), takze som priamo makefile vlozil do stromu projektu, aby bolo jednoduche zapnut/vypnut automaticke napalovanie. Je to ten zakomentovany riadok #, build+link vykona plnu kompilaciu, build+link+program+on okrem kompilacie aj napali vystupny hex subor a zapne napajanie. Vyborne by bolo vytvorit maly toolbox s tlacitkom Burn, alebo nejakym checkboxom ktory by ovladal makefileovy skript a urcoval ci sa ma vykonat napalovanie ci nie. Smola, ale zatial do takejto urovne kustomizovania visual studia moje vedomosti nesiahaju.
  • Bolo by dobre generovat vsetky intermediate subory niekam do adresara Debug, lebo sa len zasiera adresar so zdrojovymi kodmi.
  • Na stiahnutie: projekt, commandlineovy pickit2 tool

    Tento dokument bol napisany 09.11.2008, 16:22, a budem sa ho snazit aktualizovat hned ako v niektorom zo spomenuychy problematickych krokov dospejem ku rieseniu. Samotny kod ukazky je cast mojej diplomovej prace, dufam ze sa vam bude pacit :)