www.mikrocontroller.net

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


Autor: Marco Hedemann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define pSS  B2 (0x04)
#define pDATA  B3 (0x08)
#define pCLK  B5 (0x20)
Streich das B2, B3, B5 weg.


Peter

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco Hedemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Marco Hedemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit ist schon dieser Teil klar

#define B2 (0x04)
#define B3 (0x08)
#define B5 (0x20)

#define pSS    B2
#define pDATA  B3
#define pCLK   B5

Bzw. mit moderner Schreibweise

#define pSS    (1<<PB2)
#define pDATA  (1<<PB3)
#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.

Autor: Marco Hedemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Hilfe.
werde ein wenig probieren.

Autor: Marco Hedemann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marco Hedemann schrieb:

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


Die typedef
typedef int8_t     INT8;   //char
typedef uint8_t   UINT8;  //unsigned char

typedef int16_t   INT16;  //int
typedef uint16_t   UINT16; //unsigned int

typedef int32_t   INT32;  //long
typedef uint32_t   UINT32; //unsigned long

typedef int64_t   INT64;  //long long
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
void send( UINT8 c )
{
 ...
}

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.

Autor: Marco Hedemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
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 bestätigst du, die Nutzungsbedingungen anzuerkennen.