Forum: Compiler & IDEs .c Datei kompilieren (krieg ich einfach nicht hin)


von Marco Hedemann (Gast)


Angehängte Dateien:

Lesenswert?

Hallo erstmal,

in leichter bis mittelschwerer Verzweiflung wende ich mich auch mal ans 
Forum.

Im Anflug blinder Bastelwut habe ich im Urlaub mir wohl ein Projekt 
ausgesucht was ich nicht gedeichselt krieg.

Im Forum "Microcontroller und Elektronik - cd-wechsler Protokoll" 
rumgestöbert, cdcemu gefunden, Hardware gebastelt für mein altes VW 
-Gamma, Hardware läuft. Alles Top.
Ich krieg aber dieses C-File nicht kompiliert. Leider versteh ich die 
Einstellungen nich so wirklich von AVR Studio.
Kann mir bitte jemand helfen? eingestellt ist ATmega8 wie man sieht, 
aber attiny12 währe auch nicht schlecht.

Wahrscheinlich ist das einfach zu schaffen, aber ich Dinosaurier kriegs 
nicht "in my Brain".

hier das makefile

######################################################################## 
#######
# Makefile for the project cdcemu
######################################################################## 
#######

## General Flags
PROJECT = cdcemu
MCU = atmega8
TARGET = cdcemu.elf
CC = avr-gcc

CPP = avr-g++

## Options common to compile, link and assembly rules
COMMON = -mmcu=$(MCU)

## Compile options common for all C compilation units.
CFLAGS = $(COMMON)
CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char 
-funsigned-bitfields -fpack-struct -fshort-enums
CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d

## Assembly specific flags
ASMFLAGS = $(COMMON)
ASMFLAGS += $(CFLAGS)
ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2

## Linker flags
LDFLAGS = $(COMMON)
LDFLAGS +=  -Wl,-Map=cdcemu.map


## Intel Hex file production flags
HEX_FLASH_FLAGS = -R .eeprom -R .fuse -R .lock -R .signature

HEX_EEPROM_FLAGS = -j .eeprom
HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load"
HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings


## Objects that must be built in order to link
OBJECTS = main.o

## Objects explicitly added by the user
LINKONLYOBJECTS =

## Build
all: $(TARGET) cdcemu.hex cdcemu.eep cdcemu.lss size

## Compile
main.o: ../main.c
    $(CC) $(INCLUDES) $(CFLAGS) -c  $<

##Link
$(TARGET): $(OBJECTS)
     $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) 
-o $(TARGET)

%.hex: $(TARGET)
    avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@

%.eep: $(TARGET)
    -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0

%.lss: $(TARGET)
    avr-objdump -h -S $< > $@

size: ${TARGET}
    @echo
    @avr-size -C --mcu=${MCU} ${TARGET}

## Clean target
.PHONY: clean
clean:
    -rm -rf $(OBJECTS) cdcemu.elf dep/* cdcemu.hex cdcemu.eep cdcemu.lss 
cdcemu.map


## Other dependencies
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*)


 und die c.datei

Vielen Dank erstmal

von Peter D. (peda)


Lesenswert?

Marco Hedemann schrieb:
> Ich krieg aber dieses C-File nicht kompiliert.

Und wie soll man da helfen?
Du mußt schon die Fehlermeldung zeigen!

Und laß das Makefile in Ruhe, das macht das AVRStudio schon richtig.

Ich vermute mal, das ist Mumpitz:
1
#define pSS  B2 (0x04)
2
#define pDATA  B3 (0x08)
3
#define pCLK  B5 (0x20)
Streich das B2, B3, B5 weg.


Peter

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Im AVR Studio hast du normalerweise keinen direkten Kontakt mit einem 
Makefile. Du setzt ein Projekt auf und wählst aus dem Menü Build.

Das Projekt setze ich bei einfachen Projekten wie folgt auf:

AVR Studio starten, AVR GCC Compiler auswählen, Verzeichnis auswählen, 
Projektnamen auswählen (es wird ein entsprechender Ordner im angegebenen 
Verzeichnis angelegt).

Ziel-µC auswählen. Programmierhardware auswählen (AVR Simulator).

Bestehenden Quellcode per Copy&Paste in das leere Editorfenster 
kopieren. Speichern.

In AVR Studio im Menü unter der Projekt Konfiguration noch die Taktrate 
eintragen und die Optimierung anschalten.

Jetzt sollte ein Build funktionieren. Das Ergebnis kann man im Simulator 
prüfen oder mit entsprechendem Programmieradapter zur µC-Schaltung 
übertragen.

Das war es im Groben.

Wenn du Probleme hast, kannst du den Projektordner zippen und an deine 
nächste Frage anhängen.

von Marco Hedemann (Gast)


Lesenswert?

Danke erstmal für die schnellen Antworten. Ich probiers mal aus. 
Makefile habe ich auch in Ruhe gelassen, ist von avr-Studio.

@peda

OK. Kann sein das das Mumpitz ist. kommt aber so aus dem Forum. Probier 
ich aus.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Marco Hedemann schrieb:

> OK. Kann sein das das Mumpitz ist. kommt aber so aus dem Forum. Probier
> ich aus.

Tipp: Setze nächstens einen Link zum Original. Das kann die Fehlersuche 
enorm erleichtern oder beschleunigen.

von Marco Hedemann (Gast)


Lesenswert?

@Stefan,

hmmm, stimmt. hier der link.

Beitrag "CD Wechsler Protokoll"

beitrag vom 23.03.2008 20.44 Uhr Andreas Watterott

Wenn du lust hast kannst du dir das ja mal anschauen. Nachdem ich pedas 
Ratschlag umgesetzt habe und B2 B3 und B5 , dazu noch aus der main.c die 
//init ports gestrichen habe funktionierte auch ein Build. War aber nach 
dem Übertragen auf die Hardware nicht funktionsfähig. Ich werde mich in 
die AVR Programmierung nochmal versuchen einzulesen. Gerade dieses 
einfache Programm sollte ich (irgendwann) wohl durchschauen.
Nochmals Danke. ich lad später mal die gepackten Dateien von AVR-Studio 
hoch.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Damit ist schon dieser Teil klar

1
#define B2 (0x04)
2
#define B3 (0x08)
3
#define B5 (0x20)
4
5
#define pSS    B2
6
#define pDATA  B3
7
#define pCLK   B5

Bzw. mit moderner Schreibweise

1
#define pSS    (1<<PB2)
2
#define pDATA  (1<<PB3)
3
#define pCLK   (1<<PB5)

> dazu noch aus der main.c die
> //init ports gestrichen habe funktionierte auch ein Build.

Die beiden Anweisungen unterhalb //init ports sind aber wesentlich für 
die Funktion des Programms.

pDATA und pCLK müssen auf Ausgang geschaltet werden. Und der interne 
Pullup-Widerstand am Eingang pSS muss angeschaltet werden.

Ohne diese Zeilen kann es niemals funktionieren.

Wenn die Zeilen Übersetzungsfehler produzieren, dann diese Fehler mit 
Copy&Paste zeigen damit sie verbessert werden können.

von Marco Hedemann (Gast)


Lesenswert?

Vielen Dank für die Hilfe.
werde ein wenig probieren.

von Marco Hedemann (Gast)


Angehängte Dateien:

Lesenswert?

Wieder da,

erstmal nen Spaziergang gemacht. An der frischen Luft kommen einem ja 
bekanntlich die besten Ideen.
Bei anderen...

Naja hab angehängtes File durchlaufen lassen mit avr studio.

Diese Meldungen sind erschienen:

Build started 30.11.2010 at 17:54:09
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -Os 
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP 
-MT main.o -MF dep/main.o.d  -c  ../main.c
In file included from ../main.c:4:
e:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: 
#warning "This header file is obsolete.  Use <avr/interrupt.h>."
In file included from ../main.c:6:
e:/winavr-20100110/lib/gcc/../../avr/include/avr/delay.h:36:2: warning: 
#warning "This file has been moved to <util/delay.h>."

../main.c:14: error: expected ')' before 'c'
../main.c: In function 'main':

../main.c:46: warning: implicit declaration of function 'send'
make: *** [main.o] Error 1
Build failed with 1 errors and 3 warnings...

Nur noch ein Fehler Stefans Tipp bzw Hinweis hat was gebracht

von Karl H. (kbuchegg)


Lesenswert?

Marco Hedemann schrieb:

> ../main.c:14: error: expected ')' before 'c'


Die typedef
1
typedef int8_t     INT8;   //char
2
typedef uint8_t   UINT8;  //unsigned char
3
4
typedef int16_t   INT16;  //int
5
typedef uint16_t   UINT16; //unsigned int
6
7
typedef int32_t   INT32;  //long
8
typedef uint32_t   UINT32; //unsigned long
9
10
typedef int64_t   INT64;  //long long
11
typedef uint64_t   UINT64; //unsigned long long

hättest du drinnen lassen sollen.
Jetzt weiss dein Compiler nicht, was ein UINT8 ist

und kann daher mit
1
void send( UINT8 c )
2
{
3
 ...
4
}

nichts anfangen

> Nur noch ein Fehler Stefans Tipp bzw Hinweis hat was gebracht

Schön langsam hasse ich mich dafür.
Aber am meisten würde es was bringen, nicht blauäugig in ein µCProjekt 
zu gehen und zu glauben "Ich krieg das schon hin" wenn man keine einzige 
Zeile selber programmieren kann, sondern erst mal eine 
Programmiersprache lernen.

von Marco Hedemann (Gast)


Lesenswert?

@ Moderator

Das ist das Ergebnis auf das ich auch gekommen bin. Ich dachte ich nehm 
mir das File aus dem Forum, kompiliere das und gut. Aber es geht halt 
nicht ohne Verständnis.
Naja ist halt lernen angesagt.

Vielen Dank

gruß marco

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.