Forum: Compiler & IDEs C Problem


von Runner (Gast)


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!!

von Runner (Gast)


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];

von Joerg Wunsch (Gast)


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;

von Runner (Gast)


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)!!!

von Runner (Gast)


Angehängte Dateien:

Lesenswert?

Hier der Sourcecode zum Problem

von Joerg Wunsch (Gast)


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.

von Thorsten (Gast)


Lesenswert?

@Joerg

Komisch, hier wurden aber schon oft Fragen zu IAR beantwortet...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.