C Problem

Gast #40526
Lesenswert?

Ich programmier gerade den Atmega16. Doch wenn ich Arrays übergebe oder
einen Sprung in ein anderes Modul mach, ändert sich die Adresse vom
Array. Somit stimmen meine Pointer im anderen Modul nicht mit der
Adresse des Arrays überein!!!

Was ist da falsch!, Wie kann ich die Arrayadresse für meinen Buffer
fest machen!!
Gast #40527
Lesenswert?

Ich hab meine Buffer folgendermaßen deklariert,
das Problem ist das sich die Adresse von RxBuf[32]ständig ändert(bei
Bearbeitung in anderen Modulen!!und die Adressen der Speicherzellen
fest bleiben!!!!!

static unsigned char USART_TxBuf[USART_TX_BUFFER_SIZE];
static unsigned char USART_RxBuf[USART_RX_BUFFER_SIZE];
static unsigned char *ReceivePtr = &USART_RxBuf[0];
static unsigned char *TailPtr = &USART_RxBuf[0];
static unsigned char *HeadPtr = &USART_RxBuf[0];
Gast #40528
Lesenswert?

Sollte so funktionieren.  Du läßt Dich auch nicht etwa bloß vom
Simulator
verarschen oder sowas?

Btw.,

static unsigned char *ReceivePtr = &USART_RxBuf[0];

ist identisch zu

static unsigned char *ReceivePtr = USART_RxBuf;
Gast #40529
Lesenswert?

Das Problem ist nun, wenn ich in ein anderes Modul springe und dort mit
RxBuf weiterarbeite, ändert sich beim Sprung die Adresse im RAM und
somit ist mein Bufferinhalt futsch(oder auf der falschen Adresse)!!!
Gast #40531
Lesenswert?

(Warum eigentlich nochmal?  Das Attachment hat doch auch funktioniert.)

Woher weißt Du denn, daß die Adresse sich ändert?  Real world, oder
nur
Simulator?  Hast Du Dir Gedanken um die Geltungsdauer von Variablen,
um
den Aufbau von stack frames usw. gemacht, vor allem bei optimiertem
Code?

Dein geposteter Code demonstriert das Problem leider überhaupt nicht,
ich sehe keine zweite Verwendung von RxBuf.  Außerdem handelt es sich
um IAR Code, Du bist aber hier im GCC-Forum -- sorry, da bist Du auf
Dich allein gestellt oder auf den Support von IAR (hast ja was bezahlt
dafür).  Keine Ahnung, wie das dort auch mit Optimierung von Variablen
in Interruptroutinen und sowas aussieht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren