Zugriff auf Variablen von Struct funktioniert nicht



  • Moinsen,

    hab grade einen Fehler gefunden in meinem C-File (glaub ich zumindestens).

    In meinem Headerfile hab ich ein typedef struct wie folgt definiert.

    typedef struct  {
        unsigned int   Addr;                                          	//                                
        unsigned int   status;                                        	//                                
    } *p_Descriptor;
    

    Innerhalb des dazugehörigen C-Files greife ich auf dieses Struct wiefolgt zu:

    Global definiere ich einen Pointer auf dieses Struct.

    volatile p_Descriptor const p_rxBD = (p_Descriptor)0x21000000;
    

    Lokal greife ich auf die beiden Variablen des Structs zu:

    for(i=0; i< NB_PACKETS; i++)
    	{
       		p_rxBD[i].Addr = (unsigned int)pPacket; // 		
                      p_rxBD[i].status = 0;
    		pPacket +=SIZE;   
    	}
    

    Wobei SIZE sozusagen den Versatz der einzelnen Elemente zwischen mehreren structs darstellt bzw. deren Inhalten und pPacket einfach nur den Inhalt besitzt für Addr.

    Wenn ich jetzt für p_rxBD die watch-Funktion benutze, hat der Ptr p_rxBD eine feste Addr (die stimmt), der Wert auf den der Pointer zeigt ist 0x21000000 (wie ich es oben definiert habe). Nur die Werte für Addr und status ändern sich überhaupt nicht - die bleiben immer gleich (so als ob ich gar nicht draufzugreifen würde)?
    Haben zu beginn einen otopisch hohen Wert von z.b. Addr 0xFFFFFFFF und Status hat 0x6000FFFF - ist der ZUgriff auf diese beiden Variablen falsch?

    Gerhard



  • Was steht denn am Anfang der Schleife in pPacket?

    Ansonsten: Hast du überhaupt die nötigen Berechtigungen, um in diesen Teil des Speichers zu schreiben? (was soll denn überhaupt an der angegebenen Adresse liegen?)



  • pPacket steht zu Beginn:

    #define RxPacket (0x21000000 + (8 * NB_PACKETS))
    

    wobei NB_PACKETS = 2 ist.

    Im C-file wird for der for-Schleife pPacket als Pointer darauf deklariert:

    char *pPacket =(char *)RxPacket;
    

    Eigentlcih soll alles ab der Adresse 0x21000000 stehen / ist die Startaddresse von einem SDRAM Baustein. Nur die Werte für Addr und Status ändern sich während der for-Schleife auch nicht, was ja bei der Addr sein müsste...

    Und der Wert für Status müsste eigentlich Null sein - ist es aber nicht...

    Gerhard



  • ok, also der Inhalt der Variablen Addr und Status stimmen - aber die Speicheradresse ist nicht definiert --> wie kann ich diese Speicheradresse ändern bzw. festlegen??

    Ich arbeite mit einem Mikrocontroller und der Speicherbereich 0x90000000 ist undefined (Abort), so dass beide Variablen sich dort drinnen befinden.

    Gerhard


Log in to reply