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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.