Sida 2 av 3
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 1 februari 2016, 00:01:18
av Magnus_K
Ahaa, så texten #warning "F_CPU not defined for <util/delay.h> är alltså vad som ska skrivas ut som varning. Nu hänger jag med.
Det du skriver sodjan låter väldigt bra och logiskt men något jag inte blir klok på är vilken ordning det kompileras.
Det är nog sett som ett litet projekt (men stort för mig) så att placera klockhastigheten i min källfil känns bra.
Testade att lägga till #define F_CPU 16000000UL till min Main.h men då klagar den på att F_CPU i Arduino.h inte är definerad.
Nästa försök var att placera definitionen där och då blir det resultatet jag visade i förra inlägget. Endast varningar men ingen error.
Det som skulle vara kul att testa är att just definera F_CPU i delay.h men där verkar det vara skrivskyddat (?).
Spontant känns det ju som att om jag definerar F_CPU det första som händer vid kompilationen så bör det inte bli några fler varningar?
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 1 februari 2016, 00:59:34
av sodjan
> Ahaa, så texten #warning "F_CPU not defined for <util/delay.h> är alltså vad som ska skrivas ut som varning.
https://gcc.gnu.org/onlinedocs/cpp/Diagnostics.html
> men något jag inte blir klok på är vilken ordning det kompileras.
Här finns det en liten komplikation. Det är väl så att Arduino miljön gör lite egna
saker som inte finns med om det vore en "ren" kompilering. Det läggs väl till
lite startupkod o.s.v. Men frånsett det så byggs väl alltid i den ordning som det
förekommer i filerna. Include filerna läggs till i den ordning som #include
förekommer o.s.v.
> Testade att lägga till #define F_CPU 16000000UL till min Main.h men då klagar den på att F_CPU i Arduino.h inte är definerad.
Ingen aning. Gör du själv #include på Arduino.h? Om inte så misstänker jag att det hör till det
som körs innan du kommer fram till din egen kod.
Man kan väl även definiera symboler på kommandoraden så att de garanterat finns med
från början. Typ "-D F_CPU=16000000UL", eller hur man nu skriver det. DEt har i princip
samma funktion som #define inne i koden...
Om man googlar "Arduino F_CPU" så finns det lite mer info om F_CPU.
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 1 februari 2016, 01:18:38
av Magnus_K
Tackar för länken. Ska läsa igenom den imorrn för nu snurrar det.
Jo precis, jag gör #include på Arduino.h i min header-fil och placerade då definitionen av F_CPU ovanför denna. Dock hjälpte det inte. Precis som att den ändå kompilerade Arduino.h före min .h.
Jag vet inte om jag ska säga att det löst sig men resultatet nu är i alla fall att det inte blir någon varning/error alls.
Efter en hel del grävande på nätet så verkade det vara allmänt vedertaget att definera F_CPU i Arduino.h, så detta gjordes.
Man skulle också gräva fram från vilken fil som gjorde #include på util/delay.h och kommentera bort denna rad.
Som jag förstår det så har Arduino delay-funktionen i sitt egna bibliotek och util/delay.h tillhör gcc:s bibliotek så det ska vara ok att kommentera bort det här.
OBS. Ovan är min egna slutsats men Delay() testad och verkar stämma med timingen och som sagt inga varningar eller felmeddelanden. Får också kommunikation med "Data Visualizer" för att underlätta debugging.
Jättesnällt av dig att hjälpa till sodjan men nu får det nog vara bra för idag. Ligger och andas i papperspåse efter 4 timmars knapprande för tillfället.
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 22 februari 2016, 13:03:03
av Magnus_K
Är det någon av er som känner igen att #import inte används i GCC längre?
Kompilerade precis mitt projekt efter ha har inkluderat ett nytt bibliotek. Alla nya filer där #import finns med ger varningen
#import is a deprecated GCC extension [-Wdeprecated].
Här verkar vara någon med samma problem och frågan är väl om det iskallt går att ersätta #import med #include?
Länk_till_annat_forum
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 22 februari 2016, 13:16:07
av sodjan
Lite snabb googling gav t.ex.
http://stackoverflow.com/questions/5301 ... clude-in-c
Varför använder du inte helt enkelt bara #include ?
Fungerar det inte?
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 22 februari 2016, 14:08:15
av Magnus_K
Det är ett bibliotek jag tagit ner från github och tänkte rensa varningarna innan testet (då det inte går att göra riktigt än). Men visst, fungera kan det ju fortfarande göra.
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 22 februari 2016, 14:18:45
av lillahuset
Använder du "vanlig C" eller är det arduinomiljön? Alltså, använder du bara arduinohårdvaran?
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 22 februari 2016, 18:47:22
av nifelheim
Läste föregående fråga om F_CPU först nu när tråden "flöt upp"
När du kör Arduinos IDE kan du ju se i "consol föstret" vad som händer,
vilka filer som länkas in osv.
till exempel med vilka växlar kompilatorn startas med en "vanlig" Arduino UNO:
\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105
och med en 3,3volt 8MHz nano:
hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega168 -DF_CPU=8000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105
klippte av slutet, hela raderan är väldigt långa, det "roliga " var ju -D
-D name=definition
The contents of definition are tokenized and processed as if they appeared during translation phase three in a ‘#define’ directive. In particular, the definition will be truncated by embedded newline characters.
edit:
inser att jag inte fick med själva poängen,
kolla lite vad ArduinoIDE använder för växlar till just ditt "board" och lägg in dom i din IDE också,
så borde det funka lite bätter att bara klippa in färdiga bibliotek.
Någonstans kan du väl definiera "standard anropet"

Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 23 februari 2016, 18:18:29
av Magnus_K
@lillahuset:
Förstår inte riktigt vad du menar så ger dig nog inget bra svar. Det är en Arduino Nano jag programmerar och biblioteke,t som nu är på tal, rör en ethernetmodul som jag ska kommunicera med.
När jag provkörde det här så programmerade jag i Arduino-miljön och då blev det inga kompilatorvarningar. Nu när jag importerat biblioteket till Atmel Studio så får jag dom.
@nifelheim:
Hänger tyvärr inte mycket av det du skriver. Vad menar du för växlar och hur ser ett "standard anrop" ut?
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 23 februari 2016, 18:23:59
av Icecap
Det nifelheim menar är att man kan ge en "projekt-define" så att den variabel är definierat för alla filerna i projektet. Så om du lägger till en sådan "projekt-definition" (F_CPU=16000000) kommer du inte att behöva bekymra dig mer om den biten.
Det är mycket vanligt att man gör sådana definitioner i ett projekt, jag använder det ofta.
Hela den sträng nifelheim anger bör du lägga in som standard i alla Arduiniprojekt du gör, då är saken biff från början.
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 23 februari 2016, 19:31:23
av nifelheim
Exakt!
Så här kan det se ut i en gammal Eclipse i projekt egenskaperna.
Compiler arg.JPG
"Compiler invocation arguments" läggs alltså till automagiskt när kompilatorn anropas med det som står i rutan "Compiler invocation command".
Och allt sker med ett klick på "Build"

Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 29 februari 2016, 21:29:07
av Magnus_K
Det här låter jätteintressant men vet inte riktigt om jag hänger med.
Vad är skillnaden att göra så här mot att deklarera variabeln i header-filen och se till att den "ligger först" när det kompileras?
Ska kika hur det ser ut i Arduino IDE:t när jag laddar ner ett program.
Är det någonstans i dessa två rutor jag ska klistra in den där raden?
Build Events.JPG
Build.JPG
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 1 mars 2016, 17:26:52
av swesysmgr
http://www.avrfreaks.net/forum/how-set-fcpu
Det är alltså under fliken Toolchain och sedan tredje raden i andra kategorin i trädet som visas (åtminstone i min version).
Sedan är detta inget bra sätt att göra fördröjningar m.m. men det är en annan diskussion

Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 1 mars 2016, 20:12:29
av Magnus_K
Kalas! Tack
swesysmgr!
Testade först att ta bort mina ändringar i header-filerna och inte göra någon #define på F_CPU alls. Givetvis gav detta en del fel vid kompileringen.
Lade sedan till nedan och det verkar ju fungera kanoners.
Det här var ju ett väldigt smidigt sätt, istället för att rota runt och ändra i massa filer.
Nej, jag har gjort mitt bästa att undvika delay() över huvudtaget men är rätt säker på att det finns i några av dom importerade biblioteken, och då vill det till att jag sagt till kompilatorn i vilken hastighet klockan snurrar på. Har ni lärt mig
Toolchain.JPG
Re: Hjälp med Atmel Studio 7 för Arduino
Postat: 1 mars 2016, 22:57:04
av sodjan
Jag ser att du även har en flagga "DEBUG" definierad. Om du inte
har för avsikt att köra debugger på koden så kan det vara lika bra
att plocka bort den.
Notera också att "Debug" är valt under "Configuration". Det ska finnas
ett val "All Configurations" också, enligt en sida jag hittade. Jag antar
att det styr vilka olika "build modes" som inställningarna gäller för...