Hallo, mir gelingt es nicht, eine variable als Übergabeparameter an eine Funktion zu übergeben, dort kommt immer 0x00 an. Beispielcode folgt: --------------- main.c extern void TransmitByte(unsigned char); main() { unsigned char var = 0xDC; TransmitByte(var); // Bei der Funktion kommt nur 0x00 an TransmitByte(0xAA); // Hier wird tatsächlich 0xAA übertragen } -------------- serial.c void TransmitByte(unsigned char); void TransmitByte(unsigned char zeichen) { /* Funktion sendet zeichen an serielle Schnittstelle */ } --------------- Ich habe auch schon versucht, var explizit nach NEAR oder FAR zu verlegen, ohne Erfolg. Ich verwende einen ST10F276 mit einem externen RAM und den C166 Compiler von Keil. Das Adressfenster für den externen RAM ist entsprechend konfiguriert. Danke für Antworten, Sönke
volatile habe ich schon ausprobiert, ändert leider nichts am Ergebis.
einen Fehler in diesem Teil /* Funktion sendet zeichen an serielle Schnittstelle */ kannst du mit Sicherheit ausschliessen? Ansonsten: An Deinem geposteten C-Code ist nichts falsch. Das sollte so funktionieren.
Die Senderoutine funktioniert- im Prinzip. Da war vor dem Sendevorgang noch eine kleine Verzögerungsschleife untergeracht, und damit bin ich auch auf den Kern des Problems gestoßen, die Variablen überschreiben sich gegenseiten. Bei a = 0x01; b = 0x02; printf a; // kommt 0x02 heraus Der Zähler in der Warteschleife die Übergabeparameter platt gemacht. Scheint also ein Problem mit dem Speichermanagement zu sein. Trotzdem Danke für den Hinweis!
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.