www.mikrocontroller.net

Forum: GCC Externes Makefile in Studio 5 oder 6


Important announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo,

hat jemand Erfahrung mit der Nutzung/Erstellung von eigenen Makefiles im 
AVRStudio 5 oder 6??
Bei mir funktioniert es nicht einmal, wenn ich ein vom System erstelltes 
Makefile in einen anderen Ordner kopiere und es dort als extern erkläre.

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Inzwischen bin ich einen Schritt weiter!

Nachdem der Compiler bisher immer nach einer Regel zur Erstellung einer 
Datei makedep.mk verlangt hat, habe ich nun die aus dem System erstellte 
Datei ebenfalls in den Ordner kopiert und dann ist er durchgelaufen.

Gibt es denn irgendwo eine Erklärung was man dabei alles beachten muß?

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bruno M. schrieb:
> Gibt es denn irgendwo eine Erklärung was man dabei alles beachten muß?

Vielleicht schaust du mal in das makefile hinein, und versuchst, zu 
Verstehen, was da drin passiert. Vermutlich benötigt das automatisch 
erzeugte makefile makedep.mk.

Dem Studio ist das alles herzlich egal, das startet in dem Fall einfach 
jedes externe makefile, das du ihm vorsetzt.

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
>
> Vielleicht schaust du mal in das makefile hinein, und versuchst, zu
> Verstehen, was da drin passiert. Vermutlich benötigt das automatisch
> erzeugte makefile makedep.mk.
>
Im Systemmakefile gibt es nur eine Zeile zu makedep.mk u.z.

OUTPUT_FILE_DEP:= ./makedep.mk

D.h. er ist davon irgendwie abhängig. Wenn ich im externen Makefile die 
Zeile ganz lösche, dann läuft es auch. Für mich noch unverständlich ist 
nur, daß das System diese Datei offensichtlich selbst anlegt, bei einem 
externen Makefile aber nicht.

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das System legt bei Nutzung eines externen makefiles überhaupt gar 
nichts an. Da ruft das Studio einfach make auf, und übergibt das 
"externe" makefile.

Das ist ja der Sinn eines Projektes mit externem makefile.

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
> Das System legt bei Nutzung eines externen makefiles überhaupt gar
> nichts an. Da ruft das Studio einfach make auf, und übergibt das
> "externe" makefile.
>
Das ist mir wohl klar. Unklar war, wozu dieses makedep.mk bei einem 
System-Makefile benötigt wird.
Inzwischen kann ich mir die Antwort aber auch selbst geben. Im Gegensatz 
zu Studio 4 muß man in 5 und 6 Dateien ganz explizit ein- oder 
ausschließen. makedep.mk enthält nun die Auflistung genau der Dateien, 
die eingeschlossen werden müssen.

>Dem Studio ist das alles herzlich egal, das startet in dem Fall einfach
>jedes externe makefile, das du ihm vorsetzt.

Das stimmt zwar, aber ein Makefile von Studio 4 läuft in 5 oder 6 z. B. 
nicht. Offensichtlich gibt es da andere Regeln, die ich gerne wüßte.

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bruno M. schrieb:
> Das ist mir wohl klar. Unklar war, wozu dieses makedep.mk bei einem
> System-Makefile benötigt wird.

Das wird benötigt, weil Atmel das halt im Studion so 5/6 macht. Möglich 
ist alles, müssen muß man gar nix.

Jedes makefile, das vollständig und korrekt ist, kannst du als externes 
makefile in sämtlichen Studios dieser Welt verwenden. Oder auch in 
Eclipse. oder in einem Visual Studio, oder ganz ohne Studio.

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
>
> Jedes makefile, das vollständig und korrekt ist, kannst du als externes
> makefile in sämtlichen Studios dieser Welt verwenden. Oder auch in
> Eclipse. oder in einem Visual Studio, oder ganz ohne Studio.
>
Wenn das so richtig wäre, dann müßte ein funktionierendes Makefile von 
Studio 4 auf Studio 5 laufen. Genau das macht es aber nicht!

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Je nun, sei mir nicht böse, aber nur, weil das bei dir nicht 
funktioniert, heisst das nicht, daß es nicht geht. Selbstverständlich 
funktionieren Studio4-makefiles genauso mit Studio 5 oder 6, wenn

Oliver schrieb:
> vollständig und korrekt

erfüllt ist. Die vom Studio4 erstellten makefile sind völlig in Ordnung, 
sonst könnte Studio4 die ja auch nicht per make kompilieren lassen.

Wenn da bei dir was nicht funktioniert, lies die Fehlermeldungen, schau 
in das makefile, und versuche, zu verstehen, was da schief geht.

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
> Je nun, sei mir nicht böse, aber nur, weil das bei dir nicht
> funktioniert, heisst das nicht, daß es nicht geht. Selbstverständlich
> funktionieren Studio4-makefiles genauso mit Studio 5 oder 6, wenn
>
Wenn das so klar und einfach ist, dann erkläre mir bitte konkret (nicht 
nur schlaue Allgemeinplätze) warum die Definitionen

UI_LANGUAGE = LANG_ENGLISH

oder

CFLAGS += -DF_CPU=$(OP_MHZ)000000UL

im Studio 4 funktionieren und im Studio 6 nicht.

In beiden Fällen handelt es sich um bereits erprobte Makefiles.

Autor: Stefan Ernst (sternst)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bruno M. schrieb:
> Wenn das so klar und einfach ist, dann erkläre mir bitte konkret (nicht
> nur schlaue Allgemeinplätze) warum die Definitionen

So ist das nun mal, wenn man nur Allgemeinplätze postet ("funktioniert 
nicht"), dann bekommt man auch nur Allgemeinplätze als Antwort. Konkrete 
Antworten können nur bei konkreten Fragen und konkreten Informationen 
kommen. Also das ganze Makefile posten und nicht nur zwei Zeilen. Und 
vor allem mal erklären, was "funktioniert nicht" überhaupt konkret 
bedeuten soll.

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bruno M. schrieb:
> Wenn das so klar und einfach ist, dann erkläre mir bitte konkret

Bitte sehr: Du hast immer noch nicht im entferntesten verstanden, was 
ein makefile überhaupt ist, und was man(n), make, und die verschiedenen 
Studios überhaupt machen. Nimm dir bitte mal etwas Zeit, google, eine 
guten Kaffee, und versuche das zu verstehen.

Das makefile aus dem trasistortester-prokejt ist kein vom Studio4 
erstelltes makefile, das hat jemand von Hand geschrieben. Du wirst es 
vielleicht nicht glauben, daber das ist tatsächlich die normale 
Vorgehensweise, so etwas zu erstellen.

Und, wie die ja schon im anderen Thread versichert wurde, funktioniert 
das problemlos mit allen Studios, oder auch ganz ohne.

Warum das bei dir nicht funktioniert, ist unklar, ebenso, ob du 
überhaupt schon einmal versucht hast, das Projekt ohne jede Änderung 
deinerseits zu kompilieren.

Oliver

Autor: Bruno M. (brumay)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Hallo Stefan,

anliegend findest Du die beiden Makefiles. Das Studio 4 File ist Dir ja 
schon vom Transistortester bekannt.

Wenn ich sage, es läuft nicht, dann heißt das:

- bei Verwendung des kompletten Makefiles kommt eine Fehlermeldung 
"***Missing Separator. Stop." mit Bezug auf das Makefile.

- da ich aber in der Zwischenzeit den Code im Studio 5 oder auch 6 zum 
Laufen gebracht habe (der entscheidende Beitrag kam von Karl-Heinz 
Kübbeler) versuche ich nun einzelne Definitionen aus dem Studio 4 
Makefile in das Studio 6 Makefile einzusetzen und zu testen. Zwei davon 
siehe oben. In diesem Fall bedeutet "es läuft nicht", daß der Compiler 
Fehler ausgibt, die erkennen lassen, daß die Definitionen nicht 
verarbeitet wurden.

Autor: Frank M. (ukw) Benutzerseite
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bruno M. schrieb:
> - bei Verwendung des kompletten Makefiles kommt eine Fehlermeldung
> "***Missing Separator. Stop." mit Bezug auf das Makefile.

Schade, dass Du die Zeilennummer, auf die sich diese Fehlermeldung 
bezieht, nicht angegeben hast.

Googlen nach "Missing Separator. Stop." gibt Dir sofort den Grund aus, 
was im Makefile kaputt ist. Ich habe jetzt aber keine Lust, danach zu 
suchen, da Du ja die Zeilennummer kennst und ich nicht.

Gruß,

Frank

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Frank M. schrieb:

> Schade, dass Du die Zeilennummer, auf die sich diese Fehlermeldung
> bezieht, nicht angegeben hast.
>
> Googlen nach "Missing Separator. Stop." gibt Dir sofort den Grund aus,
> was im Makefile kaputt ist.

die Zeilennummer hilft wenig, da es Zeile 1 ist. Google habe ich 
natürlich bemüht, aber fehlendes Tab (wenn Du das meinst) habe ich nicht 
gefunden. Außerdem läuft genau dieses Makefile (ohne die geringste 
Änderung) im Studio 4.

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Ich habe jetzt mal das Studio6 angeworfen, ein neues Projekt in einem 
leeren Ordner angelegt, da als externes makefile das aus dem 
default-Ordner aus Transistortester-Original angegeben, auf build 
geklickt, und - keine Überraschung, es kompiliert alles völlig 
problemlos.

------ Build started: Project: GccApplication1, Configuration: Debug AVR ------
Build started.
Project "GccApplication1.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Programme\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "C:\Dokumente und Einstellungen\sce\Desktop\GccApplication1\GccApplication1\GccApplication1.cproj" (target "Build" depends on it):
  Using "RunCompilerTask" task from assembly "C:\Programme\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
  Task "RunCompilerTask"
    C:\Programme\Atmel\Atmel Studio 6.0\make\make.exe -C "C:\Dokumente und Einstellungen\sce\Desktop\Transistortester-Original\default" -f "Makefile" all 
    make: Entering directory `C:/Dokumente und Einstellungen/sce/Desktop/Transistortester-Original/default'
    avr-gcc  -Wall -DWITH_SELFTEST -DWITH_AUTO_REF -DREF_C_KORR=16 -DR_MESS -DC_MESS -DCAP_EMPTY_LEVEL=3 -DAUTOSCALE_ADC -DNO_AREF_CAP -DUSE_EEPROM -DPULLUP_DISABLE -DANZ_MESS=44 -DPOWER_OFF=5 -DBAT_CHECK -DBAT_OUT=150 -DBAT_POOR=64 -DF_CPU=8000000UL -mmcu=atmega168 -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT lcd-routines.o -MF dep/lcd-routines.o.d  -c  ../lcd-routines.c
    avr-gcc  -Wall -DWITH_SELFTEST -DWITH_AUTO_REF -DREF_C_KORR=16 -DR_MESS -DC_MESS -DCAP_EMPTY_LEVEL=3 -DAUTOSCALE_ADC -DNO_AREF_CAP -DUSE_EEPROM -DPULLUP_DISABLE -DANZ_MESS=44 -DPOWER_OFF=5 -DBAT_CHECK -DBAT_OUT=150 -DBAT_POOR=64 -DF_CPU=8000000UL -mmcu=atmega168 -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT main.o -MF dep/main.o.d  -DLANG_ENGLISH -c  ../main.c
    avr-gcc  -Wall -DWITH_SELFTEST -DWITH_AUTO_REF -DREF_C_KORR=16 -DR_MESS -DC_MESS -DCAP_EMPTY_LEVEL=3 -DAUTOSCALE_ADC -DNO_AREF_CAP -DUSE_EEPROM -DPULLUP_DISABLE -DANZ_MESS=44 -DPOWER_OFF=5 -DBAT_CHECK -DBAT_OUT=150 -DBAT_POOR=64 -DF_CPU=8000000UL -mmcu=atmega168 -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT swuart.o -MF dep/swuart.o.d  -c  ../swuart.S
    avr-gcc  -Wall -DWITH_SELFTEST -DWITH_AUTO_REF -DREF_C_KORR=16 -DR_MESS -DC_MESS -DCAP_EMPTY_LEVEL=3 -DAUTOSCALE_ADC -DNO_AREF_CAP -DUSE_EEPROM -DPULLUP_DISABLE -DANZ_MESS=44 -DPOWER_OFF=5 -DBAT_CHECK -DBAT_OUT=150 -DBAT_POOR=64 -DF_CPU=8000000UL -mmcu=atmega168 -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT wait1000ms.o -MF dep/wait1000ms.o.d  -c  ../wait1000ms.S
    avr-gcc  -Wall -DWITH_SELFTEST -DWITH_AUTO_REF -DREF_C_KORR=16 -DR_MESS -DC_MESS -DCAP_EMPTY_LEVEL=3 -DAUTOSCALE_ADC -DNO_AREF_CAP -DUSE_EEPROM -DPULLUP_DISABLE -DANZ_MESS=44 -DPOWER_OFF=5 -DBAT_CHECK -DBAT_OUT=150 -DBAT_POOR=64 -DF_CPU=8000000UL -mmcu=atmega168 -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT CombineToLong.o -MF dep/CombineToLong.o.d  -c  ../CombineToLong.S
    avr-gcc  -Wall -DWITH_SELFTEST -DWITH_AUTO_REF -DREF_C_KORR=16 -DR_MESS -DC_MESS -DCAP_EMPTY_LEVEL=3 -DAUTOSCALE_ADC -DNO_AREF_CAP -DUSE_EEPROM -DPULLUP_DISABLE -DANZ_MESS=44 -DPOWER_OFF=5 -DBAT_CHECK -DBAT_OUT=150 -DBAT_POOR=64 -DF_CPU=8000000UL -mmcu=atmega168 -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT ReadADC.o -MF dep/ReadADC.o.d  -c  ../ReadADC.S
    avr-gcc -mmcu=atmega168 -Wl,-Map=TransistorTester.map lcd-routines.o main.o swuart.o wait1000ms.o CombineToLong.o ReadADC.o    -o TransistorTester.elf
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  TransistorTester.elf TransistorTester.hex
    avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex TransistorTester.elf TransistorTester.eep || exit 0
    avr-objdump -h -S TransistorTester.elf > TransistorTester.lss
    AVR Memory Usage
    ----------------
    Device: atmega168
    Program:    9508 bytes (58.0% Full)
    (.text + .data + .bootloader)
    Data:         95 bytes (9.3% Full)
    (.data + .bss + .noinit)
    EEPROM:      472 bytes (92.2% Full)
    (.eeprom)
    make: Leaving directory `C:/Dokumente und Einstellungen/sce/Desktop/Transistortester-Original/default'
  Done executing task "RunCompilerTask".
  Using "RunOutputFileVerifyTask" task from assembly "C:\Programme\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
  Task "RunOutputFileVerifyTask"
    
    Display Output File Size Skipped due to : Output File not found
  Done executing task "RunOutputFileVerifyTask".
Done building target "CoreBuild" in project "GccApplication1.cproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "C:\Programme\Atmel\Atmel Studio 6.0\Vs\Avr.common.targets" from project "C:\Dokumente und Einstellungen\sce\Desktop\GccApplication1\GccApplication1\GccApplication1.cproj" (entry point):
Done building target "Build" in project "GccApplication1.cproj".
Done building project "GccApplication1.cproj".

Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========



Noch Fragen?

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:

>
> Noch Fragen?
>
> Oliver

Eigentlich hätte ich noch jede Menge Fragen, aber die kann mir keiner 
beantworten.

Ich habe es jetzt mal genau so versucht wie Du auch, d.h. ich habe alles 
so genommen wie es das Studio vorgibt, sprich Projektname, Pfad usw. und 
siehe da es läuft.

Anschließend habe ich noch meine alten Projekte versucht und auch die 
laufen plötzlich obwohl ich das vorher schon mindestens 10 mal genau so 
versucht habe. Mit anderen Worten ich kann jetzt nicht einmal mehr 
nachvollziehen was vorher passiert war.

Was ich aber sehr gut nachvollziehen kann ist, daß Euch mein Problem 
ordentlich genervt hat. Also nichts für ungut und herzlichen Dank.

Autor: Bruno M. (brumay)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
>
> Jedes makefile, das vollständig und korrekt ist, kannst du als externes
> makefile in sämtlichen Studios dieser Welt verwenden. Oder auch in
> Eclipse. oder in einem Visual Studio, oder ganz ohne Studio.

Irgendwie scheint diese Aussage bei mir nicht zu stimmen.

Ich versuche gerade ein anderes Projekt (siehe Anlage) zum Laufen zu 
bewegen, aber leider wieder umsonst. Im Studio 4 ist es wieder kein 
Problem.

Die Ausgabe von Build ist:
------ Build started: Project: GccApplication1, Configuration: Debug AVR ------
Build started.
Project "GccApplication1.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\GccApplication1\GccApplication1.cproj" (target "Build" depends on it):
  Task "RunCompilerTask"
    C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe -C "D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\GccApplication1" -f "makefile" all 
    Der Befehl "sed" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
    make: Entering directory `D:/Documents/Elektronik/Mikroprozessoren/GCC/Projekte/LCD_con_320x240/GccApplication1'
    set -e; avr-gcc -MM -mmcu=atmega8515 -I. -g -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=uart.lst  -std=gnu99 uart.c \
      | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > uart.d; \
      [ -s uart.d ] || rm -f uart.d
    Der Befehl "sed" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
    set -e; avr-gcc -MM -mmcu=atmega8515 -I. -g -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=lcd.lst  -std=gnu99 lcd.c \
      | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > lcd.d; \
      [ -s lcd.d ] || rm -f lcd.d
    Der Befehl "sed" ist entweder falsch geschrieben oder
    konnte nicht gefunden werden.
    set -e; avr-gcc -MM -mmcu=atmega8515 -I. -g -O2 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=main.lst  -std=gnu99 main.c \
      | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > main.d; \
      [ -s main.d ] || rm -f main.d
    "-f" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
    ECHO ist ausgeschaltet (OFF).
    -------- begin --------
    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.
    make: *** [sizebefore] Error 255
    make: Leaving directory `D:/Documents/Elektronik/Mikroprozessoren/GCC/Projekte/LCD_con_320x240/GccApplication1'
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "GccApplication1.cproj" -- FAILED.
Done building project "GccApplication1.cproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========

Ich habe inzwischen schon einiges über Erstellung von Makefiles gelesen, 
aber das Problem ist, daß sie alle anders aufgebaut sind. Letztendlich 
erfüllen sie natürlich den gleichen Zweck, aber für einen Ungeübten sind 
sie damit sehr schwer zu lesen.
Da mir das Makefile vom Transistortester noch am Übersichtlichsten 
erscheint. habe ich auch schon versucht ein analoges Makefile für das 
neue Projekt zu stricken, aber es kommt wieder die übliche Fehlermeldung 
"Missing Separator. Stop.".

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Bruno M. schrieb:
> Der Befehl "sed" ist entweder falsch geschrieben oder
>     konnte nicht gefunden werden.


Tja, das ist halt Pech. So etwas passiert, wenn man sich uralte Projekte 
aus dem Netz zusammensucht. Das makefile nutzt das Programm "sed", das 
mit WinAVR mitgeliefert wird (dein Studio4 nutzt WinAVR), aber nicht mit 
der Atmel toolchain, die vom Studio5 und 6 genutzt werden. Ergo 
funktionert das mit den aktuellen Atmel ttolchains nicht mehr.

Beschwer dich bei Atmel, oder versuch, zu verstehen, was das makefile 
macht, und bau dir ein funktionierendes.

Das makefile basiert auf einem (ur-)alten makefile-Template, und sed 
wurde da benutzt, um die Abhängigkeiten der header herauszufinden. Das 
geht seit einer weile auch anders, der Compiler kann das inzwischen mit 
den passdenden Optinen im Aufruf selber. Wie, kannst du dir in aktuellen 
Studio4/5/6-makefiles ansehen.

Bleibt die Frage, warum du unbedingt immer Studio6 verwenden willst. 
Nimm für solche alten Projekte doch Studio 4, und alles wird gut.

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
>
> Tja, das ist halt Pech. So etwas passiert, wenn man sich uralte Projekte
> aus dem Netz zusammensucht.

Das ist eines der Projekte, die ich immer noch aktiv nutze.
>
> Beschwer dich bei Atmel, oder versuch, zu verstehen, was das makefile
> macht, und bau dir ein funktionierendes.

Wie oben schon beschrieben bin ich dabei das zu versuchen. Wenn ich auf 
Deine Hilfe zählen könnte, wäre das super.
>
> Das makefile basiert auf einem (ur-)alten makefile-Template, und sed
> wurde da benutzt, um die Abhängigkeiten der header herauszufinden. Das
> geht seit einer weile auch anders, der Compiler kann das inzwischen mit
> den passdenden Optinen im Aufruf selber. Wie, kannst du dir in aktuellen
> Studio4/5/6-makefiles ansehen.

Gelesen habe ich von dieser Option schon, aber die Realisierung ist noch 
ein Problem.
>
> Bleibt die Frage, warum du unbedingt immer Studio6 verwenden willst.
> Nimm für solche alten Projekte doch Studio 4, und alles wird gut.
>
Das Problem ist, daß auf meinem neuen Rechner Studio 4 nicht läuft und 
der alte wandert bald in den Schrott. Daher versuche ich die 
interessantesten Projekte umzustricken.

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
In diesem Fall würde ich kein externes makefile verwenden, sondern ein 
neues Studio-Projekt mit automatischer makefile-Erstellung in dem Ordner 
anlegen. In dem makefile passiert überhaupt nichts außergewöhnliches, 
das kompiliert und linkt einfach  main.c, lcd.c, uart.c, und lcdcon.S 
zusammen, dazu noch die Mathelib lm. Also pack die Sourcen ins den 
source-Ordner, dazu die mathelib in den linker-optionen, stell den 
Optimierungslevel auf 2 oder s, und das war es acuh schon.

Oliver

Autor: Bruno M. (brumay)
Datum:
Angehängte Dateien:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Danke für den Tip!
Ich habe das allerdings schon vorher versucht und die Einstellungen 
jetzt nochmals überprüft. Wenn ich Dich richtig verstehe, dann schließe 
ich diese 4 Dateien in das Projekt ein, die mathelib ist eigentlich 
standardmäßig drin und den Optimierungslevel habe ich jetzt auf s 
gestellt. Das Problem ist nur, daß dann der Debugger rummäkelt. So war 
das ja auch schon beim Transistortester, obwohl ja das externe Makefile 
problemlos lief. Warum das so ist, weiß ich nicht.
------ Build started: Project: main, Configuration: Debug AVR ------
Build started.
Project "main.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\Vs\Compiler.targets" from project "D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\main.cproj" (target "Build" depends on it):
  Task "RunCompilerTask"
    C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all 
    In file included from .././lcd.c:6:0:
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\8x12_horizontal_MSB_1.h(1,1): unknown type name 'prog_char'
    Building file: .././lcd.c
    Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
    "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe" -funsigned-char -funsigned-bitfields -Os -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "lcd.d" -MT"lcd.d" -MT"lcd.o"  -mmcu=atmega162   -o"lcd.o" ".././lcd.c" 
    .././lcd.c: In function 'lcd_init':
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.c(25,2): large integer implicitly truncated to unsigned type [-Woverflow]
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.c(48,2): passing argument 3 of 'lcd_string' discards 'const' qualifier from pointer target type [enabled by default]
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.h(10,6): expected 'char *' but argument is of type 'const char *'
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.c(49,2): passing argument 3 of 'lcd_string' discards 'const' qualifier from pointer target type [enabled by default]
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.h(10,6): expected 'char *' but argument is of type 'const char *'
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.c(52,2): passing argument 3 of 'lcd_string' discards 'const' qualifier from pointer target type [enabled by default]
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.h(10,6): expected 'char *' but argument is of type 'const char *'
    make: *** [lcd.o] Error 1
  Done executing task "RunCompilerTask" -- FAILED.
Done building target "CoreBuild" in project "main.cproj" -- FAILED.
Done building project "main.cproj" -- FAILED.

Build FAILED.
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========


Wie schon gesagt, habe ich mich auch schon an einem externen Makefile 
versucht (siehe Anlage), aber da sind offensichtlich noch Fehler drin.

Autor: Oliver (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Das ist jetzt kein Problem des makefiles, da mag der Compiler den C-Code 
nicht. Auch das ist teilweise ein Problem von altem (eigentlich 
fehlerhaften) Code und aktuellen Compilervrsionen, die alten gccs waren 
da nicht so pingelig. Nimm dir halt jede einzelne Meldung vor, und 
versuche, dass Problem zu lösen.

Nur durch kopieren lernt man kein C.

Oliver

Autor: Bruno M. (brumay)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
Oliver schrieb:
>
> Nur durch kopieren lernt man kein C.
>

Du hast ja soo recht!!

Trotzdem würde mich bei Gelegenheit Deine Meinung zum Makefile 
interessieren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder GIF-Format hochladen.
Siehe Bildformate
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net