Forum: Mikrocontroller und Digitale Elektronik Fehlererklärung


von Mark L. (lavoine)


Lesenswert?

hallo,
ich arbeite gerade an STK500 mit ATMEGA16. Beim kompilieren von mehrere 
Quellcodes werden immer wieder diese Fehler gezeigt.
ie Quellcodes sind getestet.

Die Fehler sind:

In file included from C:/WinAVR/avr/include/inttypes.h:37,
                 from ../test.c:1:
C:/WinAVR/avr/include/stdint.h:157: error: conflicting types for 
'uint_least8_t'

C:/WinAVR/avr/include/stdint.h:152: error: previous declaration of 
'uint_least8_t' was here

C:/WinAVR/avr/include/stdint.h:167: error: conflicting types for 
'uint_least16_t'

C:/WinAVR/avr/include/stdint.h:162: error: previous declaration of 
'uint_least16_t' was here

make: *** [test.o] Error 1
Build failed with 4 errors and 0 warnings...

Beispiel:
#include <inttypes.h>                                               // 
Allgemeine Bibliotheken
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

#define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))
#define cbi(ADDRESS,BIT) ((ADDRESS) &amp;= ~(1<<(BIT)))

void warte(uint16_t t) {                                            // 
Funktion "Warteschleife"
        uint16_t i, j;

        for (i=0;i<t;i++) {                                         // 
Verschachtelte Schleife mit Befehl NOP="Tue nichts", damit
                for (j=1;j<200;j++) {                               // 
die Schleife nicht wegoptimiert wird.
                        asm volatile ("nop");
                }
        }
}

int main (void) {
        uint8_t lauflicht;

        DDRB=0xFF;                                                  // 
Port B auf Ausgang
        PORTB=0xFF;                                                 // 
Alle Ausgänge auf 1

        DDRD=0xFF;                                                  // 
Port D auf Ausgang
        PORTD=0xFF;                                                 // 
Alle Ausgänge auf 1

        lauflicht=1;
        for (;;) {                                                  // 
Endlosschleife
                PORTB=~lauflicht;                                   // 
Untere 8 Bit auf PORT B ausgegeben
                lauflicht=lauflicht<<1;                             // 
Lauflicht um 1 Bit nach links weiterschieben
                if (lauflicht==0)                                   // 
Wenn Lauflicht durchgelaufen ist, dann wieder am Anfang beginnen
                lauflicht=1;
                warte(3000);                                        // 
Warten
        }
}
kann mir jemand sagen wie ich diese Fehlern aufheben kann.

von Johannes M. (johnny-m)


Lesenswert?

Indem Du die Headerdatei, in der die uint...s definiert sind, 
einbindest. Versuchs mal mit #include<stdint.h>...

Es ist übrigens ziemlich unsinnig, die Fehlermeldungen zu posten ohne 
den Code, der sie verursacht hat. In diesem Fall ist es recht eindeutig, 
aber ansonsten gibts ein heiteres Rätselraten.

von Karl H. (kbuchegg)


Lesenswert?

Schmeiss mal den
#include <inttpes.h>
raus.

von Mark L. (lavoine)


Lesenswert?

Nix passiert....

von Thomas (Gast)


Lesenswert?

poste den code nochmal mit codetag! kann man so ja net lesen =P
und ein bischen mehr

von Mark L. (lavoine)


Lesenswert?

Diese Programm ist für die Steuerung der LEDS in der STK500 geschrieben.

von Karl H. (kbuchegg)


Lesenswert?

Dein Code hat mit den Fehlermeldungen nichts, oder nur sehr
wenig zu tun.

Die Fehlermeldung bezieht sich darauf, dass über den
include von stdint.h 2 miteinander im Widerspruch stehende
Defintionen (wahrscheinlich typedefs) von uint_least8_t bzw.
uint_least16_t generiert werden.

In den meisten Fällen ensteht dieses Problem dadurch, dass
ein Headerfile über Umwege mehrfach includiert wird.
In deinem Fall (bezogen auf den Originalcode) geschieht dies
dadurch, dass stdint.h von inttypes.h includiert wird und
danach nochmal von deinem Code.

Wenn also dafür gesorgt wird, dass stdint.h nur einmal
includiert wird (normalerweise sorgen sog. Include Guards
dafür) dann sollte dieser Spuk eigentlich verschwinden.

Dein Programmanfang sollte also so aussehen
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <avr/interrupt.h>
4
5
...

und dann sollten diese Fehler eigentlich verschwinden.

Wenn nicht: Welche Compiler-Version benutzt du?

von Mark L. (lavoine)


Lesenswert?

Compiler von AVR Studio 4.12

von Johannes M. (johnny-m)


Lesenswert?

AVRStudio hat keinen Compiler.

von yalu (Gast)


Lesenswert?

Die sich widersprechenden Typdeklarationen stehen lt. Compilermeldung
beide in stdint.h, aber an verschiedenen Stellen. Das erscheint mir
komisch. In meiner avr-libc 1.4.6 gibt es jede Typdeklaration
jedenfalls nur einmal.

Vielleicht kannst du die fragliche Datei

  C:/WinAVR/avr/include/stdint.h

mal posten, aber bitte als Dateianhang, um den Thread nicht mit über
600 Zeilen Code zuzumüllen.

von Rolf Magnus (Gast)


Lesenswert?

Da hast du wohl irgendwie eine kaputte Version der Header-Datei 
erwischt. Bei mir sehen die Zeilen 152 bis 167 so aus:
1
typedef int8_t   int_least8_t;
2
3
/** \ingroup avr_stdint
4
    unsigned int with at least 8 bits. */
5
6
typedef uint8_t  uint_least8_t;
7
8
/** \ingroup avr_stdint
9
    signed int with at least 16 bits. */
10
11
typedef int16_t  int_least16_t;
12
13
/** \ingroup avr_stdint
14
    unsigned int with at least 16 bits. */
15
16
typedef uint16_t uint_least16_t;

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.