C Problem

Gast #40526
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
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
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
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
(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

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.