Forum: Mikrocontroller und Digitale Elektronik winavr Fehler beim compilieren


von Chris123 (Gast)


Lesenswert?

Hallo,

wollte folgenden Code mit WinAVR compilieren:

#include <inttypes.h>                                          #include
<avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

  DDRB=0xFF;
  PORTB=0xFF;

  int lauflicht;

  lauflicht=1;

void main(void){

  if(;;){
  PORTB=lauflicht;
  lauflicht=lauflicht<<1;
  if (lauflicht==0)
    lauflicht=1;
  }
}


Bekomme folgende Fehlermeldung:

> "make.exe" all

-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 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.


Linking: lauflicht.elf
avr-gcc -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL  -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=  -std=gnu99 -MD -MP -MF
.dep/lauflicht.elf.d  --output lauflicht.elf
-Wl,-Map=lauflicht.map,--cref    -lm
C:/WinAVR/bin/../lib/gcc/avr/3.4.3/../../../../avr/lib/avr4/crtm8.o(.ini 
t9+0x0):
undefined reference to `main'
make.exe: *** [lauflicht.elf] Error 1

> Process Exit Code: 2



Kann mir jemand weiterhelfen?


Grüße Chris

von Detlef Wilken (Gast)


Lesenswert?

Grob drübergeschaut vermute ich ein Problem im Makefile !

Wenn Du nur eine C-Datei hast, solltest Du diese main.c nennen. Im
Auswahlfeld "C/C++ Source file(s)" solltest Du keinen Eintrag haben.
Das Häkchen "include main.c" muß gesetzt sein.

Im Makefile sollte u.a. in etwa folgendes stehen:
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = main
# List C source files here. (C dependencies are automatically
generated.)
SRC = $(TARGET).c

Bitte um Info, wenn das geklappt hat

Gruß
Detlef

von Detlef Wilken (Gast)


Lesenswert?

Hab mir Dein Programmcode genauer angesehen.

Du scheinst noch nicht oft programmiert zu haben !

Du hast Zuweisungen vorgenommen, die ausserhalb jeglicher Funktion
existieren !

Die If-Anweisung mit den beiden Simikola ist glaube ich nonsens !

Ich schau mir gerade mal die Logik an und schicke Dir mal eine
korrigierte Version (Soll nicht besserwisserisch klingen !)

Gruß
Detlef

von Chris123 (Gast)


Lesenswert?

Danke,

der Fehler lag im Makefile...

Die Zuweisung des Main-Files war nicht korrekt!

von Olaf (Gast)


Lesenswert?

Es ist egal wie die Sosse heisst, man muss halt nur sein Makefile
entsprechend programmieren.

Probier es aber mal mit

int main(void)

Olaf

von Detlef Wilken (Gast)


Lesenswert?

@Chris 123: Schön dass es geklappt hat. Aber konntest Du wirklich
fehlerfrei compilieren ? würde mich wundern, wenn der compiler den Code
so schlucken würde. Wie wärs damit:


#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

int main(void){

/* Hier Variablen deklarieren */
int lauflicht = 0x00;

/* Hier Vorinitialisierungen */
lauflicht = 0x01; /* Bit 0 zunaechst eingeschaltet */
DDRB = 0xFF; /* Port B auf Output stellen */

While(1)
{
PORTB = lauflicht;
lauflicht = (lauflicht<<1);
    if (lauflicht == 0x00)
       {
        lauflicht = 0x01;
       }
}
}

Gruß
Detlef

von Chris123 (Gast)


Lesenswert?

Fehlerfrei compilieren nein,
allerdings beziehen sich die Fehlermeldungen jetzt auf den Code...
Ist schon eine Weile her, als ich  Student war, und C // C++ gelernt
habe :-)

Danke für deinen Code...

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.