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.
Schmeiss mal den #include <inttpes.h> raus.
Nix passiert....
Gast
#671930
poste den code nochmal mit codetag! kann man so ja net lesen =P und ein bischen mehr
Diese Programm ist für die Steuerung der LEDS in der STK500 geschrieben.
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 | |
2 | |
3 | |
4 | |
5 | |
und dann sollten diese Fehler eigentlich verschwinden. Wenn nicht: Welche Compiler-Version benutzt du?
Compiler von AVR Studio 4.12
AVRStudio hat keinen Compiler.
Gast
#672130
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.
Gast
#672142
Da hast du wohl irgendwie eine kaputte Version der Header-Datei erwischt. Bei mir sehen die Zeilen 152 bis 167 so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.