mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehlererklärung


Autor: Mark Lavoine (lavoine)
Datum:

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

Autor: Johannes M. (johnny-m)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
Schmeiss mal den
#include <inttpes.h>
raus.

Autor: Mark Lavoine (lavoine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nix passiert....

Autor: Thomas (Gast)
Datum:

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

Autor: Mark Lavoine (lavoine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Diese Programm ist für die Steuerung der LEDS in der STK500 geschrieben.

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

Bewertung
0 lesenswert
nicht 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
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>

...

und dann sollten diese Fehler eigentlich verschwinden.

Wenn nicht: Welche Compiler-Version benutzt du?

Autor: Mark Lavoine (lavoine)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compiler von AVR Studio 4.12

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVRStudio hat keinen Compiler.

Autor: yalu (Gast)
Datum:

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

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast du wohl irgendwie eine kaputte Version der Header-Datei 
erwischt. Bei mir sehen die Zeilen 152 bis 167 so aus:
typedef int8_t   int_least8_t;

/** \ingroup avr_stdint
    unsigned int with at least 8 bits. */

typedef uint8_t  uint_least8_t;

/** \ingroup avr_stdint
    signed int with at least 16 bits. */

typedef int16_t  int_least16_t;

/** \ingroup avr_stdint
    unsigned int with at least 16 bits. */

typedef uint16_t uint_least16_t;

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.