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.... :-)))
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
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.
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.
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):../../../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):../../../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):../../../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
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):../../../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):../../../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):../../../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
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.