Zkoušel jsem ve svým projektu použít funkci sprintf() kvůli práci s LCD a narazil jsem na problém při kompilaci.
Problém dělá řádek sprintf( buffer, “%d”, temp) ;
Kód vypadá takhle:
Pokud to kompiluju ručně přes vlastní Makefile, tak se vše v pohodě zkompiluje a program funguje.
V těch linkách byl jeden post s částečným řešením, ale týkalo se to zabordelení nastavení linkeru Code::blocksu a mám z toho trošku strach. Prosím vyřešil někdo tento problém? Vím, že tu spoustu lidí code::blocks používá, je to fajn IDEčko, ale nerad bych rezignoval na notepad a příkazový řádek.
Nene, lze tam zalozit AVR projekt a podporuje to mnoho CPU. Nektere veci jsou lepsi nez AvrStudio, ale nektere mi tam chybi. Jako nahravani do CPU musim pouzivat AVRDude a neni tam to konfortni naklikavani fusez a lockbitu, tak tam mam na to udelany tooly.
Takže je tam i poslední verze AVR GCC toolchainů a knihovny libc? To co je ve WinAVR je asi dost zastaralé…
Upravuje to nějak nastavení systémové PATH nebo to funguje samostatně od sebe bez zásahu do okolí?
Bohuzel nejsem tak zkuseny abych zjistil, co to pouziva za verzi kompilatoru, nicmene jsem zkusil kompilovat s WinAVR, AvrToolchan a v CodeBlock a v Codeblock to ma nejmensi velikost. Je to stahovaci program, ktery nepotrebuje instalaci, pouze se spusti a do PATH nezasahuje co vim. Funguje to bez zasahu okoli
no až mě zabanují z code::blocks fóra, že nevím jak si nastavit Linker v jejích C::B (což není přece vyšší dívčí že?), tak to vyzkouším.
Prozatím jsem to vyřešil externím Makefilem.
Dík za upozornění
Je to jeste aktualni?
V project build options si dej do “Other linker options”:
-Wl,-u,vprintf
a do “Link libraries” si dej:
printf_flt
A zkus to tak. Urcite to nebude problem C::B. Pokud ti to jde s Makefile, tak to musi jit i tady. Koukni se jak vypada prikazovej radek linkeru a nastav ho v C::B stejne jako se pouziva v Makefile.
Pokud jde o verzi kompilatoru. Pouzit tam muzes jakykoliv. C::B je jen IDE. Koukni se do Settings/Compiler Settings, vyber GNU AVR GCC compiler a na karte Toolchain se koukni kde je kompilator, kterej pouziva. Pak staci vlezt do te slozky a na prikazovem radku zadat prikaz (slozka bin tooolchainu)
avr-gcc --version
Me to vypise:
avr-gcc (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
díky kuto…tohle určitě pomůže, až budu zas používat full Code::blocks a ne ten doporučovaný a upravaný pro AVR/Arduino, na kterým je právě zastaralý WinAVR.
Akorát teď sem narazil na jinej problém a to je generování .eep hexáče. Když opět to kompiluju přes svůj Makefile (který ale dělá asi o 60 B víc jak Codeblocks, stejný nastavení, nechápu proč), tak mi to eep soubor vytvoří, ale jakmile to dělám přes IDE, tak ten soubor má pořád 13 B a je prázdný.
Přitom podle build logu, by mělo bejt vše ok
avr-objcopy.exe -O ihex -R .eeprom $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).hex
avr-objcopy.exe -O binary -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 $(TARGET_OUTPUT_FILE) $(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).eep.bin
To prvni udela intel hex a druhy cistej bin. Ten tvuj by ale mel asi fungovat taky.
Psal jsem, že pokud to kompiluju přes externí Makefile, tak to eep správně vytvoří. Program programátoru mi i správně přečte hodnoty z toho souboru.
Kdyžtak se na to vykašli.
Mohl bys prosím naprintscreenovat nastavení kompilátoru (Global compiler settings). Si zkusím až bude čas nakonfigurovat C::B na poslední AVR-GCCčko s libc.
Jestli mam posledni nevim, ale ty toolchainy se v nastaveni nelisej.
Ja mam to nastaveni kompilatoru trochu jinak. V Global compiler settings nemam skoro nic. Nastavuju to v sablone projektu. V Global mam jen toto:
Other Settings/Compiler logging: Full command line
Pak jen nastavene cesty v Toolchain executables.
Tady mas vytah z CBP souboru projektu. Screenovat se mi to nechce. Samozrejme si musis nastavit spravne cesty na disku podle toho kde mas toolchain. F_CPU a typ MCU si nastavuju pres Custom variables, nechce se mi to vzdycky lovit v tom mnozstvi fajfek v nastaveni.