undeclared (first use in this function) Problem mit Headerdatei



  • Hallo

    Ich konnte mit der Suche leider keinen Beitrag finden, der auf mein Problem passt.

    Ich habe eine Headerdatei, die so aussieht(Ausschnitt):

    #ifndef _SD_H_
    #define _SD_H_
    
    #include <avr/io.h>
    
    typedef unsigned char u8;
    typedef unsigned int u16;
    typedef unsigned long int u32;
    
    /******************************** Basic command set **************************/
    /* Reset cards to idle state */
    #define CMD0 0
    #define CMD0_R R1
    /* Read the OCR (MMC mode, do not use for SD cards) */
    #define CMD1 1
    #define CMD1_R R1
    
    #endif
    

    In einer C-Datei habe ich nun einen Aufruf:

    if(SD_SEND_CMD (CMD0, CMD0_R, Argument) ==0)
    		return 0;
    

    und da kommt dann die Fehlermeldung:

    ../SD.c:81: error: 'R1' undeclared (first use in this function)

    natürlich enthält die .c-Datei die Zeile

    #include "SD.h"
    

    Ich nehme mal an, das Problem ist ganz trivial, aber ich komm nicht drauf. 😕

    Danke für Eure Hilfe



  • Ja es ist genau wie es da steht. In deiner Headerdatei ist R1 nirgends deklariert. R1 hat also keinen Wert.
    Oder besser gesagt CMD0_R hat keinen Wert.



  • Na und dann??
    Du hast jetzt die Fehlermeldung wiedergegeben.
    Gibts evtl. auch einen Lösungsansatz?

    Wieso deklariert?
    Bei einem #define muss man doch meines Wissens nach nichts deklarieren.



  • Du musst R1 einen Wert geben. Genau dafür sind defines da.
    Lösungsansatz ist, dass du dich erkundigst wo du den Wert von R1 rausfinden kannst.
    Wenn du ihn weißt, brauchst du ja nur z.B #define R1 5 schreiben, und das ganze kompiliert ohne Probleme.



  • Aber den Code hab ich aus ner Application Note gezogen und das R1 und noch ein paar ähnliche Ausdrücke sind für ne Case-Anweisung.

    Außerdem kann man mit define alles zuweisen und in dem Fall sind das einfach ein paar Alias-Namen.

    hier noch der Link zur Application-Note: http://www.cs.ucr.edu/~amitra/sdcard/Additional/sdcard_appnote_foust.pdf

    Die defines finden sich unter sdcomm_spi.h



  • Ich bin mir nicht ganz sicher, da ich schon länger nichts mehr mit dem AVR gemacht habe. R1 ist ja eines der AVR Register. Vielleicht fehlt dir die Headerdatei in der R1 definiert ist in deiner sd-Headerdatei.
    ...
    Äh vergiss es. Ich habe jetzt gerade mal in deine appnote geschaut. Ganz oben auf der Seite wo du dein Beispiel her hast steht:

    #define R1 1
    

    damit dürfte der Fall ja klar sein.



  • Aaah, tatsächlich. Das hab ich echt übersehen.

    Weil der Code ja für nen MSP ist hab ich mir erstmal nur die Teile rausgezogen, die ich für meine Anwendung brauchte.

    Aber ich dachte wirklich, dass man mit #define auch alias-Namen vergeben kann.

    Danke für den Tipp.


Anmelden zum Antworten