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) &= ~(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.
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.
poste den code nochmal mit codetag! kann man so ja net lesen =P und ein bischen mehr
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.