fremden C-Code compilieren

Gast #1805500
Lesenswert?

Ich habe aus dem Netz von der Elektor einen C-Code gefunden und den 
wollte ich jetzt Compilieren.

Das programm besteht aus ein paar .c und .h Files und einem Makefile.
Mit den Makefiles habe ich noch nie gearbeitet.

Das Makefile habe ich in meinem AVR Studio in der Projektstruktur unter 
"Other Files" eingetragen und unter Projekt Options habe ich "Use 
external Makefile" angeklickt und habe das Makefile von dem Projekt dort 
angegeben.

Wenn ich dann den Code kompiliere kommt diese meldung

"
cc1.exe: error: missing argument to "-mmcu="
"

Wenn ich garkein Makefile angebe dann findet er irgendwie ein paar 
funktionen nicht dann kommen solche meldungen

../AVR-Studio/cube.c:61: error: 'CLEAR_CUBE' undeclared (first use in 
this function)
../AVR-Studio/cube.c:64: warning: implicit declaration of function 
'ani__blink_slow_to_fast'
../AVR-Studio/cube.c:66: error: 'NOT_INVERSE' undeclared (first use in 
this function)
und noch 7 weitere ähnliche meldungen

Ich habe das Makefile mal an den Beitrag gehangen weil da recht viel 
drin steht und dann muss man so im Forum scrollen.


hätte jmd ne Idee woran das kompilieren scheitert `?
Angehängte Dateien:
#1805506
Lesenswert?

Ganz am Anfang deines Makefiles

###
# Select microcontroller target
###
# MCU = atmega16
# MCU = atmega32

###
# Select cpu frequency in herz and MHz
###
# F_CPU = 1000000
# F_CPU_MHZ = 1

# F_CPU = 8000000
# F_CPU_MHZ = 8


Kommentiere jeweils die Zeile aus, die bei dir zutrifft.


Im übrigen würde ich da kein externes Makefile nehmen. Ein neues Projekt 
für den gewünschten Prozessor anfangen, AVR-Studio machen lassen. Die 3 
Source Code Files ( animations.c, graphics.c, draw.c ) zum Projekt 
hinzufügen und durchcompilieren.


> Wenn ich garkein Makefile angebe dann findet er irgendwie
> ein paar funktionen nicht dann kommen solche meldungen
>
> ../AVR-Studio/cube.c:61: error: 'CLEAR_CUBE' undeclared
> (first use in this function)
> ../AVR-Studio/cube.c:64: warning: implicit declaration of
>  function 'ani__blink_slow_to_fast'
> ../AVR-Studio/cube.c:66: error: 'NOT_INVERSE' undeclared
>  (first use in this function)

Das hat aber nichts mit dem Makefile zu tun. Das dürfte einfach nur der 
Hinweis sein, dass das besch... programmiert ist.
Gast #1805514
Lesenswert?

Moin,

ein Hinweis um welches "Elektor" Projekt es sich handelt steigert die 
Schoße auf eine Antwort, vielleicht erinnert sich dann jemand daran.

> cc1.exe: error: missing argument to "-mmcu="
da fehlt die Angabe zum verwendeten Prozessor.

lass das externe Makefile mal weg und setze ein frisches Projekt im AVR 
Studio auf.

MfG
Gast #1805518
Lesenswert?

sorry klar: es handelt sich um den 5x5x5 LED-Kubus:


Wo gebe ich denn den Prozessor noch an ? ich habe das Projekt über AVR 
erstellt und hab den ATMEGA32 angegeben. und habe dann die .c und .h 
Files in das neue Projekt eingefügt.


Das makefile hatte ich auch schon soweit geändert das sieht so aus jetzt
1
###
2
# Select microcontroller target
3
###
4
# MCU = atmega16
5
MCU = atmega32
6

7
###
8
# Select cpu frequency in herz and MHz
9
###
10
# F_CPU = 1000000
11
# F_CPU_MHZ = 1
12

13
F_CPU = 8000000
14
F_CPU_MHZ = 8

Fehler tritt aber weiterhin auf.

ich erstelle nochmal ein projekt neu ohne make file
Gast #1805545
Lesenswert?

huch irgendwie ist der halbe text verschwunden.

Also es kommen immer noch die gleichen fehlermeldungen wie in dem ersten 
Projekt.

Ohne Makefile meckert er an den Funktionen rum und mit Makefile kommt 
wieder der fehler mit cc1.exe: error: missing argument to "-mmcu="

selbst wenn ich im Makefile den Prozessor und die Frequenz angebe.


wie könnte ich das noch überprüfen?
#1805546
Lesenswert?

Zumimdest ist mir beim schnellen Drüberschauen im Makefile nichts 
aufgefallen, was AVR-Studio nicht auch hinkriegen würde.

Wenn es also noch Fehler gibt (weiter oben ist ja schon so etwas 
angeklungen), so ist diesmal nicht die Entscheidung "Makefile/kein 
Makefile" der Übeltäter, sondern es handelt sich um ganz banale Fehler 
im Code.

@Seb
Auch wenn du dich jetzt wundern magst. Es ist beileibe kein Einzelfall 
und auch gar nicht so selten, dass insbesondere ältere 
Projekte/Programme nicht auf Anhieb compilierbar sind. Meistens sind es 
aber nur Kleinigkeiten, die ein C-Kenner schnell behoben hat.
#1805562
Lesenswert?

@All

> Projekte/Programme nicht auf Anhieb compilierbar sind. Meistens sind es
> aber nur Kleinigkeiten, die ein C-Kenner schnell behoben hat.

Was denkt ihr? War der Hinweis zu subtil?


Klartext: Die noch verbleibenden Fehler haben höchst wahrscheinlich 
nichts mit dem Makefile zu tun! Du musst in den C-Source Code 
hineinschauen, um dem auf die Schliche zu kommen, was da los ist. Wenn 
du dabei Hilfe brauchst, dann poste den Source-Code (Alle 3 *.c Files, 
zugehörige Header Files)

Zippe alles zusammen und lade es hoch.
(Du kannst auch ganz einfach das komplette Projektverzeichnis zippen und 
hochladen, dann muss man nicht lange nachfragen, wenn etwas unklar ist)
#1805585
Lesenswert?

Die Lösung ist ganz einfach:
cube.c gehört gar nicht mit zum Projekt dazu.

Dein Projekt besteht aus den Dateien
monocube.c  animations.c draw.c
monocube.h  animations.h draw.h



cube.c dürfte ein Überbleibsel aus der Entwicklungsgeschichte sein. Wirf 
es aus dem AVR-Studio Projekt raus und alles wird gut.
Gast #1805615
Lesenswert?

Mhm so ma grad ein bisschen rumgespielt.
Sprich:

Neues Projekt angelegt mit atmega 32 und dann die 6 dateien
monocube.c  animations.c draw.c
monocube.h  animations.h draw.h
in das projekt eingefügt.


nun gibt er mir 12 fehlermeldungen raus:
diese wären:
1
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:120: undefined reference to `diagonal_lines'
2
animations.o: In function `ani__display_charset':
3
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:152: undefined reference to `charset'
4
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:152: undefined reference to `charset'
5
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:159: undefined reference to `charset'
6
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:159: undefined reference to `charset'
7
animations.o: In function `ani__big_bang':
8
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:203: undefined reference to `line_retangles'
9
C:\Users\Sebastian\Desktop\LED Kubus\LED-Cube\default/../animations.c:203: undefined reference to `line_retangles'
10
animations.o: In function `_delay_ms':
11
c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: undefined reference to `line_retangles'
12
c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: undefined reference to `line_retangles'
13
c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: undefined reference to `line_retangles'
14
animations.o:c:/program files/winavr/lib/gcc/../../avr/include/util/delay.h:120: more undefined references to `line_retangles' follow

irgendwie sind die Funktionnen noch nicht richtig verknüpft.
oder ?
#1805629
Lesenswert?

Detlev T. schrieb:
> Irgendwie hast du graphics.c vergessen, oder?

Das war mein Fehler :-)
Die hab ich übersehen als ich ihm die Aufstellung der Files gegeben 
habe.

> Was willst du eigentlich? Das Projekt compilieren oder dich in AVR
> Studio einarbeiten?

Es schadet nichts, wenn er lernt wie man fremden Code übernimmt und 
zumindest soweit abklappert, um aus einem Wust von Files diejenigen 
herauszusuchen die tatsächlich gebraucht werden.
#1805633
Lesenswert?

Seb schrieb:

> irgendwie sind die Funktionnen noch nicht richtig verknüpft.
> oder ?

Dann sieh nach, in welchem der C-Files diese Funktionen enthalten sind 
und füge dieses File noch zum Projekt hinzu.


Ein bischen selber mitdenken musst du schon.
So ist das nun mal bei der Arbeit mit µC. IC auf Platinen löten, 
einschalten und 'macht genau das was ich will' ohne wenigstens in 
Ansätzen zu verstehen was man da tut ... das war gestern.
µC stehen und fallen mit der Programmierung. Dort liegt das eigentiche 
Know-How. Und wenn man anpassen will, dann muss man dort eingreifen. Das 
geht aber nur dann, wenn man wenigstens ein wenig Ahnung von der Materie 
hat.
Und du wirst eingreifen wollen!
Denn schliesslich soll der Cube das anzeigen, was du dir vorstellst und 
nciht das was sich Elektor vorgestellt hat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren