Pages: [1]   Go Down
Author Topic: Arduino MakeFile (LINUX) -- bitte um Hilfe bzgl Verständisfrage  (Read 1358 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Forum,

ich bräuchte Unterstützung bei der Verwendung von makefile für Arduino 1.0 unter Ubuntu.

Das Makefile habe ich mir von http://ed.am/dev/make/arduino-mk runtergeladen.

Die arduino.mk Datei habe ich bei mir unter /usr/src abgespeichert.

Mein Projektverzeichnis, wo alle meine Sourcen zu meinen Arduinoprojekten abgelegt sind, liegt unter
home/sdi/Dropbox/Hardwareprogrammierung/1_EigeneProjekte/Arduino

hier untergliedere ich nochmals in weiteren Unterordnern zu den einzelnen Projekten wie zB /1_Testprojekt/.
In diesem Ordner wie hier beschrieben (1_Testprojekt), liegt nun die finale Version des Arduinosketches (ino Datei)

Muss ich nun in jeden dieser Projektordner einen symbl Link von meinem Makefile setzen wie zB
ln -s /home/sdi/Dropbox/Hardwareprogrammierung/1_EigeneProjekte/Arduino/1_Testprojekt Makefile
oder kann ich das Makefile auch zentral wo ablegen?? ( ich meine dass wäre ein schöner Aufwand wenn ich zB 500
Arduino Projekte nun überall auf das Makefile verlinken muss nur weil ich unter Linux arbeiten will)

So ich habe nun mal den sym Link direkt in mein Projektverzeichnis reingesetzt.

wenn ich nun make boards in der Kommandozeile eingebe, erscheinen mir schön die Boards welche verfügbar sind.

So aber wie kompiliere ich nun einen Sourcecode um sehen zu können, ob ich Syntaxfehler enthalten habe?
make "+ welcher Befehl???"

Bitte um Info, denn an und für sich ist die Makefile Methode unter Linux klasse.... :-)))

danke

lg

Dieter


Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21488
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Als Fenstermensch kann ich Dir nur mit einem Link helfen ohne zu wissen ob die Infos hilfreich sein könnten:
http://arduino.cc/playground/Linux/Ubuntu
Grüße Uwe
« Last Edit: November 08, 2012, 05:04:54 pm by uwefed » Logged

Germany
Offline Offline
Edison Member
*
Karma: 136
Posts: 1479
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo

- Das Makefile liegt normalerweise immer im Verzeichnis der Quelldateien. Tatsächlich ist es eher eine Kopie als ein Sym/Hardlink.
- Das Makefile enthält auch alle Einstellungen: Verwendete Libs, angeschlossene Boards, etc. Es ist unwahrscheinlich, dass es ein  Makefile für alle Projekte geben kann.
- Ein Makefile muss normalerweise angepasst werden. Selten war es bei mir möglich Makefiles ohne Änderung zu übernehmen.
- Es gibt gute Makefiles (gut dokumentiert) und schlechte Makefiles (keine doku). Dieses Makefile scheint mir ganz gut zu sein, denn
  * Es beschreibt die Config-Parameter
  * Es sind die Kommandos (eigentlich: Targets) beschrieben

Lese selbst: http://ed.am/dev/make/arduino-mk/arduino.mk

Wenn man tiefer einsteigen will, kommt man nicht darum herum, sich mit Make auseinanderzusetzen. Das ist eigentlich gar nicht so schwer (http://www.gnu.org/software/make/manual/make.html).

Grüße,
Oliver
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Zusammen,

also ich bin schon etwas vertraut mit dem Makefile, bekomme aber beim compilieren von manchen Projekten bei make immer einen Fehlermeldung, jedoch nicht wenn ich diese direkt in der Arduino IDE compiliere.
Das makefile schreit kurz vor Ende ....." xxxx Function was not declared in scope"

sdi@ubuntu:~/Dropbox/Hardwareprogrammierung_Entwicklung/1 Eigene Projekte/Arduino/2 Windmessung_MFC/1_Firmware/0_Testaufbau_Firmwarefunction_aus_Einzeltestprogramme/aktuell/MFC_Siegendorf_SLAVE_v007$ ls
Makefile  MFC_Siegendorf_SLAVE_v007.ino  MFC_Siegendorf_SLAVE_v007.rar
sdi@ubuntu:~/Dropbox/Hardwareprogrammierung_Entwicklung/1 Eigene Projekte/Arduino/2 Windmessung_MFC/1_Firmware/0_Testaufbau_Firmwarefunction_aus_Einzeltestprogramme/aktuell/MFC_Siegendorf_SLAVE_v007$ export BOARD=mini328
sdi@ubuntu:~/Dropbox/Hardwareprogrammierung_Entwicklung/1 Eigene Projekte/Arduino/2 Windmessung_MFC/1_Firmware/0_Testaufbau_Firmwarefunction_aus_Einzeltestprogramme/aktuell/MFC_Siegendorf_SLAVE_v007$
estprogramme/aktuell/MFC_Siegendorf_SLAVE_v007$ make
mkdir -p .dep/./
/usr/bin/avr-g++  -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=100 -I. -Iutil -Iutility -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/eightanaloginputs/ -I/usr/share/arduino/libraries/Wire -I/usr/share/arduino/libraries/SD  -I/usr/share/arduino/libraries/Wire/utility  -I/usr/share/arduino/libraries/SD/utility  -c -MMD -MP -MF .dep/MFC_Siegendorf_SLAVE_v007.ino.dep -o MFC_Siegendorf_SLAVE_v007.o -x c++ -include /usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h MFC_Siegendorf_SLAVE_v007.ino
MFC_Siegendorf_SLAVE_v007.ino: In function ‘void setup()’:
MFC_Siegendorf_SLAVE_v007.ino:121:20: error: ‘receiveEvent’ was not declared in this scope
MFC_Siegendorf_SLAVE_v007.ino: In function ‘void loop()’:
MFC_Siegendorf_SLAVE_v007.ino:179:12: error: ‘Watchdog’ was not declared in this scope
MFC_Siegendorf_SLAVE_v007.ino:183:12: error: ‘Watchdog’ was not declared in this scope
MFC_Siegendorf_SLAVE_v007.ino: In function ‘void receiveEvent(int)’:
MFC_Siegendorf_SLAVE_v007.ino:244:9: warning: unused variable ‘x’
make: *** [MFC_Siegendorf_SLAVE_v007.o] Fehler 1


ich hab hier mal die Infos aus dem Terminal rauskopiert damit ihr es sehen könnts.
Woran könnte es liegen?

Diese Sketches wurden einstmals unter Windows 7 erstellt, dass kompilieren und uploaden in Linux funktioniert einwandfrei in der IDE.

lg
Dieter

Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

danke Forum,


habe die Ursache des Problems schon gefunden.
ich muss Protoypes für meine Functions definieren.


Für die jenigen die es nicht wissen,
ich habe vor der void setup() folgende Functionen definiert, also jene die mir make als not declared zurückgemeldet hat.

  void Watchdog();
  void receiveEvent(int howMany);


lg

Dieter
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,


leider bekomme ich bei manchen Sketches diesen Fehler beim kompilieren.
Hat jemand eine Ahnung woran es liegen könnte? (collect2: ld returned 1 exit status ????? )

estprogramme/aktuell/MFC_Siegendorf_v020/makeLinux$ make
/usr/bin/avr-gcc -Os -Wl,--gc-sections -mmcu=atmega328p MFC_Siegendorf_v021_LINUX.o .lib/arduino.a -o MFC_Siegendorf_v021_LINUX.elf
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o)smiley-small./../../libm/fplib/log.S:96: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o)smiley-small./../../libm/fplib/log.S:100: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o)smiley-small./../../libm/fplib/log.S:116: relocation truncated to fit: R_AVR_13_PCREL against symbol `__floatsisf' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_si_to_sf.o)
collect2: ld returned 1 exit status
make: *** [MFC_Siegendorf_v021_LINUX.elf] Fehler 1


danke im voraus

lg

Dieter

Logged


Germany
Offline Offline
Edison Member
*
Karma: 136
Posts: 1479
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich tippe auf ein fehlendes "-lm" beim linken.

Grüße,
Oliver
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

hi


ja aber wo fehlt das -lm ??

Bin neu im Bereich der Verwendung von Makefile und kenne mich daher nicht so aus.
Bitte um Hilfe

danke
lg
Dieter
Logged


Germany
Offline Offline
Edison Member
*
Karma: 136
Posts: 1479
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi

naja, jedes Makefile ist anders aufgebaut, aber ich tippe mal auf:
"linken" --> LINKFLAGS

einfach "-lm" hier anhängen:
Code:
LINKFLAGS := -Os -Wl,--gc-sections -mmcu=$(BOARD_BUILD_MCU)
das sieht dann so aus:
Code:
LINKFLAGS := -Os -Wl,--gc-sections -mmcu=$(BOARD_BUILD_MCU) -lm

Alternative:
Das linken direkt modifizieren: Aus
Code:
$(TARGET).elf: $(ARDUINOLIB) $(OBJECTS)
$(CC) $(LINKFLAGS) $(OBJECTS) $(ARDUINOLIB) -o $@
wird
Code:
$(TARGET).elf: $(ARDUINOLIB) $(OBJECTS)
$(CC) $(LINKFLAGS) $(OBJECTS) $(ARDUINOLIB) -lm -o $@

Grüße,
Oliver
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 68
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Oliver,

also ich habe deine Tips probiert leider ohne Erfolg.
Hier wieder der Auszug aus dem Log.

/usr/bin/avr-gcc -Os -Wl,--gc-sections -mmcu=atmega328p MFC_Siegendorf_v021_LINUX.o .lib/arduino.a -o MFC_Siegendorf_v021_LINUX.elf
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o)smiley-small./../../libm/fplib/log.S:96: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o)smiley-small./../../libm/fplib/log.S:100: relocation truncated to fit: R_AVR_13_PCREL against symbol `__addsf3' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_addsub_sf.o)
/usr/lib/gcc/avr/4.5.3/../../../avr/lib/avr5/libc.a(log.o)smiley-small./../../libm/fplib/log.S:116: relocation truncated to fit: R_AVR_13_PCREL against symbol `__floatsisf' defined in .text section in /usr/lib/gcc/avr/4.5.3/avr5/libgcc.a(_si_to_sf.o)
collect2: ld returned 1 exit status
make: *** [MFC_Siegendorf_v021_LINUX.elf] Fehler 1


Hier findest du mein Makefile .... http://ed.am/dev/make/arduino-mk/arduino.mk
Logged


Germany
Offline Offline
Edison Member
*
Karma: 136
Posts: 1479
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hmmm... also das verlinkte File hat zumindest kein "-lm"
Wichtig ist auch immer, ein "make clean" vorab durchzuführen und dann erst "make upload"

Oliver

 
Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3480
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Alternative zu make ist scons. Meiner Meinung nach die deutlich angehmere Wahl. Vor allem weil darunter Python liegt --> man kann das Teil vernünftig debuggen wenn mal was nicht klappt.

Code:
http://code.google.com/p/arscons/source/browse/SConstruct

Logged

Check out my experiments http://blog.blinkenlight.net

Pages: [1]   Go Up
Jump to: