mikrocontroller.net

Forum: Compiler & IDEs C Problem


Autor: Runner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: Runner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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];

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Runner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)!!!

Autor: Runner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier der Sourcecode zum Problem

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joerg

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.