Forum: Compiler & IDEs Externes Makefile in Studio 5 oder 6


von Bruno M. (brumay)


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.

von Bruno M. (brumay)


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ß?

von Oliver (Gast)


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

von Bruno M. (brumay)


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.

von Oliver (Gast)


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

von Bruno M. (brumay)


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.

von Oliver (Gast)


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

von Bruno M. (brumay)


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!

von Oliver (Gast)


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

von Bruno M. (brumay)


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.

von Stefan E. (sternst)


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.

von Oliver (Gast)


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

von Bruno M. (brumay)


Angehängte Dateien:

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.

von Frank M. (ukw) (Moderator) Benutzerseite


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

von Bruno M. (brumay)


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.

von Oliver (Gast)


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.

1
------ Build started: Project: GccApplication1, Configuration: Debug AVR ------
2
Build started.
3
Project "GccApplication1.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
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):
6
  Using "RunCompilerTask" task from assembly "C:\Programme\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
7
  Task "RunCompilerTask"
8
    C:\Programme\Atmel\Atmel Studio 6.0\make\make.exe -C "C:\Dokumente und Einstellungen\sce\Desktop\Transistortester-Original\default" -f "Makefile" all 
9
    make: Entering directory `C:/Dokumente und Einstellungen/sce/Desktop/Transistortester-Original/default'
10
    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
11
    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
12
    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
13
    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
14
    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
15
    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
16
    avr-gcc -mmcu=atmega168 -Wl,-Map=TransistorTester.map lcd-routines.o main.o swuart.o wait1000ms.o CombineToLong.o ReadADC.o    -o TransistorTester.elf
17
    avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  TransistorTester.elf TransistorTester.hex
18
    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
19
    avr-objdump -h -S TransistorTester.elf > TransistorTester.lss
20
    AVR Memory Usage
21
    ----------------
22
    Device: atmega168
23
    Program:    9508 bytes (58.0% Full)
24
    (.text + .data + .bootloader)
25
    Data:         95 bytes (9.3% Full)
26
    (.data + .bss + .noinit)
27
    EEPROM:      472 bytes (92.2% Full)
28
    (.eeprom)
29
    make: Leaving directory `C:/Dokumente und Einstellungen/sce/Desktop/Transistortester-Original/default'
30
  Done executing task "RunCompilerTask".
31
  Using "RunOutputFileVerifyTask" task from assembly "C:\Programme\Atmel\Atmel Studio 6.0\Vs\Compiler.Task.dll".
32
  Task "RunOutputFileVerifyTask"
33
    
34
    Display Output File Size Skipped due to : Output File not found
35
  Done executing task "RunOutputFileVerifyTask".
36
Done building target "CoreBuild" in project "GccApplication1.cproj".
37
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
38
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):
39
Done building target "Build" in project "GccApplication1.cproj".
40
Done building project "GccApplication1.cproj".
41
42
Build succeeded.
43
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========


Noch Fragen?

Oliver

von Bruno M. (brumay)


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.

von Bruno M. (brumay)


Angehängte Dateien:

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:
1
------ Build started: Project: GccApplication1, Configuration: Debug AVR ------
2
Build started.
3
Project "GccApplication1.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
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):
6
  Task "RunCompilerTask"
7
    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 
8
    Der Befehl "sed" ist entweder falsch geschrieben oder
9
    konnte nicht gefunden werden.
10
    make: Entering directory `D:/Documents/Elektronik/Mikroprozessoren/GCC/Projekte/LCD_con_320x240/GccApplication1'
11
    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 \
12
      | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > uart.d; \
13
      [ -s uart.d ] || rm -f uart.d
14
    Der Befehl "sed" ist entweder falsch geschrieben oder
15
    konnte nicht gefunden werden.
16
    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 \
17
      | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > lcd.d; \
18
      [ -s lcd.d ] || rm -f lcd.d
19
    Der Befehl "sed" ist entweder falsch geschrieben oder
20
    konnte nicht gefunden werden.
21
    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 \
22
      | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > main.d; \
23
      [ -s main.d ] || rm -f main.d
24
    "-f" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
25
    ECHO ist ausgeschaltet (OFF).
26
    -------- begin --------
27
    avr-gcc (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
28
    Copyright (C) 2011 Free Software Foundation, Inc.
29
    This is free software; see the source for copying conditions.  There is NO
30
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
31
    make: *** [sizebefore] Error 255
32
    make: Leaving directory `D:/Documents/Elektronik/Mikroprozessoren/GCC/Projekte/LCD_con_320x240/GccApplication1'
33
  Done executing task "RunCompilerTask" -- FAILED.
34
Done building target "CoreBuild" in project "GccApplication1.cproj" -- FAILED.
35
Done building project "GccApplication1.cproj" -- FAILED.
36
37
Build FAILED.
38
========== 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.".

von Oliver (Gast)


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

von Bruno M. (brumay)


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.

von Oliver (Gast)


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

von Bruno M. (brumay)


Angehängte Dateien:

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.
1
------ Build started: Project: main, Configuration: Debug AVR ------
2
Build started.
3
Project "main.cproj" (default targets):
4
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
5
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):
6
  Task "RunCompilerTask"
7
    C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all 
8
    In file included from .././lcd.c:6:0:
9
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\8x12_horizontal_MSB_1.h(1,1): unknown type name 'prog_char'
10
    Building file: .././lcd.c
11
    Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
12
    "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" 
13
    .././lcd.c: In function 'lcd_init':
14
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.c(25,2): large integer implicitly truncated to unsigned type [-Woverflow]
15
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]
16
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.h(10,6): expected 'char *' but argument is of type 'const char *'
17
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]
18
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.h(10,6): expected 'char *' but argument is of type 'const char *'
19
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]
20
D:\Documents\Elektronik\Mikroprozessoren\GCC\Projekte\LCD_con_320x240\main\lcd.h(10,6): expected 'char *' but argument is of type 'const char *'
21
    make: *** [lcd.o] Error 1
22
  Done executing task "RunCompilerTask" -- FAILED.
23
Done building target "CoreBuild" in project "main.cproj" -- FAILED.
24
Done building project "main.cproj" -- FAILED.
25
26
Build FAILED.
27
========== 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.

von Oliver (Gast)


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

von Bruno M. (brumay)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.