-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: [GELÖST] Sehr komischer Compiler-Fehler

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583

    [GELÖST] Sehr komischer Compiler-Fehler

    Anzeige

    Hallo Leute,

    ich hab da mal ne Frage...

    und zwar, im AVRStudio 4 hab ich folgenden Code:

    Code:
    #include <avr/io.h>
    #define F_CPU 16000000
    #include <util/delay.h>
    
    int main(void)
    {
    DDRD |= (1 << PD6);
    PORTD |= (1 << PD6); 
    
     while(true)
     {
      PORTD   |= (1<<PD6);
      _delay_ms(500);
      PORTD   &= ~(1<<PD6);
      _delay_ms(500); 
     }
    
     return 0; 
    }
    beim kompilieren kommt diese Fehlermeldung:

    Build started 26.8.2009 at 03:54:23
    avr-gcc -mmcu=atmega128 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT MeinProjekt.o -MF dep/MeinProjekt.o.d -c ../MeinProjekt.c
    ../MeinProjekt.c: In function 'main':
    ../MeinProjekt.c:10: error: 'true' undeclared (first use in this function)
    ../MeinProjekt.c:10: error: (Each undeclared identifier is reported only once
    ../MeinProjekt.c:10: error: for each function it appears in.)
    make: *** [MeinProjekt.o] Error 1
    Build failed with 3 errors and 0 warnings...


    Für mich bedeutet das, dass er die Variable true nicht kennt, ist das richtig?
    Also es ging dann ohne Probleme als ich das true durch eine 1 ersetzt habe, aber es Verwundert mich schon stark

    Ich hoffe ihr könnt mir da weiterhelfen

    LG Pr0gm4n

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    versuchs mal mit einem #include <stdbool.h>, da drin sind true und false definiert
    So viele Treppen und so wenig Zeit!

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Es gibt in C die Schlüsselwörter "true" und "false" nicht. Und da du es auch selbst nirgendwo definiert hast, kennt der Compiler das dann natürlich nicht.
    MfG
    Stefan

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Wenn du ihm true vorher nicht definiert hast, dann kann er es auch nicht kennen. In C wird alles außer 0 als "wahr" angenommen. Dadurch ist es möglich Rückgabewerte von Funktionen ohne lästige extra Vergleiche auf 0 oder != 0 zu prüfen.

    Ein
    #define true 1 // und
    #define false 0

    könnte da bei dir Abhilfe schaffen. Aber wenn man das mit !=0 erstmal verinnerlicht hat, dann kommt man auch ohne true und false aus. Beachte bitte auch immer, dass C case sensitive ist.

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583
    Hallo,

    danke für die Antworten, ich war da von den RP6-Libraries etwas verwöhnt ja^^

    Ok, werd ich mir wohl das 0 und 1 angewöhnen, auch wenn ich in der Schule mit java immer true hernehm^^

    LG Pr0gm4n

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Öh, ich würd mir 0 und eins nicht angewöhnen ...
    Konvention ist wie schon geschrieben, dass alles was != 0 ist true ist.
    Und anstelle selbst zu definieren bindet man dann besser stdbool.h ein, wie oben schon geschrieben wurde

    mfG
    Markus

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583
    Hi markus, ich meinte mit 0 und 1 angewöhnen dass ich in dem fall einfach immer while(1) schreibe anstatt wie früher while(true)

    dass 2 und 3 genausosehr true sind ist eh klar...

    LG Pr0gm4n

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Naja, an true und false ist ja im Grunde nichts falsches. Im Gegenteil, meiner persönlichen Meinung nach tragen sie sehr zur Lesbarkeit des Sourcecodes bei, weshalb ich sie selbst ganz gerne verwende.

    Und da stdbool.h Teil der C-Standardbibliothek ist, kann man davon ausgehen daß sie bei jedem halbwegs brauchbaren C-Compiler vorhanden ist.

    Du musst dich also garnicht umgewöhnen


    Sehr praktisch ist übrigens auch die Datei inttypes.h, da drin sind nämlich diverse Integer-Typen mit fester Größe definiert. Das ist sehr sinnvoll, da ein int auf verschiedenen Plattfomen auch unterschiedlich groß sein kann. Verwendet man die Integer-Typen aus inttypes.h hat man dieses Problem nicht, denn z.B. ein uint8_t ist auf jeder Plattform ein 8-Bit unsigned int, und ein int32_t entsprechend ein 32 Bit signed int.
    So viele Treppen und so wenig Zeit!

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Schrobenhausen, München
    Alter
    24
    Beiträge
    583
    Hallo Felix G,

    ich hab da gleich noch ne Frage^^

    Hat zwar nicht direkt was damit zu tun, aber ich habe bei Oben genanntem Code jetzt keinen Fehler mehr, hab das in den µC geladen und die LEDs fangen auch schön das blinken an... nur leider VIEL ZU SCHNELL

    ich hab auch versucht durch änderung von F_CPU was zu erreichen, es ändert sich, ja aber nicht so wie es soll^^
    weder bei 1, 4, 8, 16 noch 32 MHz funktioniert es richtig

    Hast du/ihr eine Ahnung was ich da schon wieder falsch mache?

    LG Pr0gm4n

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beiträge
    1.220
    Felix: Du meinst nicht zufällig "stdint.h"

    Pr0gm4n spontan sehe ich nix, hast du evtl. ne Null vergessen?
    Ich habe in den Projekt-Einstellungen von AVR-Studio aber eine Einstellung für die Frequenz gefunden, evtl. überschreibt die dir dein F_CPU

    mfG
    Markus

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •