- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Fehlermeldung: undefined reference to `Prozessflag'

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14

    Fehlermeldung: undefined reference to `Prozessflag'

    Anzeige

    Powerstation Test
    Hallo Leute.
    beim Compilieren eines Codes bekomme ich die Fehlermeldung: undefined reference to `Prozessflag'.

    Code
    #include "BBB.h"
    .
    .
    .
    extern uint8_t Prozessflag;
    ...
    if(Tastenabfrage()==1){
    _delay_ms(10);
    Anreiz=TasteEins;
    Prozessflag|= Benutzeroberflaeche;
    ... }

    und bei BBB.h werden die Bits eines 8Bitregisters für einzelne Prozesse reserviert.

    //Prozessflags
    #define Benutzeroberflaeche (1<<0)
    #define Tasten (1<<1)
    #define Rechnen (1<<2)

    Kann mir jemand vielleicht sagen woran es liegen kann.
    Danke im Voraus

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    40
    Beiträge
    165
    Ist doch ziemlich eindeutig.
    Dem Compiler fehlt die Deklaration der Variable Prozessflag.

    Du weisst was extern bedeutet? Wenn nicht dann gehoert es da wahrscheinlich nicht hin.
    -> C-Grundlagen nochmal verinnerlichen

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Dem Compiler fehlt die Deklaration der Variable Prozessflag.
    Es fehlt nicht die Deklaration (die steht ja da), sondern die Definition.
    Und sie fehlt nicht dem Compiler, sondern dem Linker.
    Das nur mal am Rande.
    MfG
    Stefan

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14
    extern, weil ich Prozessflag in anderen codes benutze (bereits ausserhalb des Blocks vrwendet)
    meine nächste Frage wäre, wie definiere ich Prozessflag im Linker
    merci

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    Mach das extern weg. Das extern bedeutet, dass diese Variable irgendwo anders definiert ist.
    Wenn du also von woanders auf diese Variable zugreifen willst, sollte sie dort mit extern deklariert werden. (Das macht man dann meistens in der .h Datei, in der die Variable definiert ist)

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    (Das macht man dann meistens in der .h Datei, in der die Variable definiert ist)
    Nein, man definiert in einer Haeder-Datei keine Variablen, man deklariert sie dort nur. Definiert wird sie in einer C-Datei.
    Warum? Wenn man die Header-Datei in mehrere C-Dateien inkludiert, würde die Variable sonst mehrfach definiert werden. Der GCC-Linker schluckt Mehrfachdefinitionen zwar klaglos, was es aber nicht richtiger macht.
    MfG
    Stefan

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    Ja, darum wird ja auch in der .h-Datei ein extern davor geschrieben!!

    Wenn also in main.c die Variable definiert ist, wird sie in main.h mit extern deklariert...

    War vielleicht ein Missverständnis.

    Gruß,
    Thomas

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    War vielleicht ein Missverständnis.
    Nein, es war schlicht die falsche Wortwahl deinerseits.

    (Das macht man dann meistens in der .h Datei, in der die Variable definiert ist)
    Und da genau das das Thema hier ist (Deklaration<->Definition), sollte der Satz einfach nicht so stehen bleiben.
    MfG
    Stefan

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.11.2004
    Ort
    Aachen
    Alter
    39
    Beiträge
    246
    Ja du hast ja recht, eigentlich war das auch so gemeint:

    Wenn du also von woanders auf diese Variable zugreifen willst, sollte sie dort mit extern deklariert werden. (Das macht man dann meistens in der .h Datei, in dessen zugehöriger .c Datei die Variable definiert ist)
    Um mal zum Thema zurück zu kommen:
    Funktioniert es denn jetzt?

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    24.06.2008
    Beiträge
    14
    einwandfrei
    mich verwirren auch diese Deklarationen und Definitionen.
    und wie ist es mit Funktionen, werden die dann auch in header Dateien nur deklariert mit Variblen.
    Z.B habe ich in einer Ccode einer Funtion
    double ADkanalLesen(uint8_t mux){
    ...
    }

    definiert
    sollte sie auch in der header datei deklariert werden

    double ADkanalLesen(uint8_t mux);
    ???

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests