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!!
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];
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;
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)!!!
(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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.