Forum: Mikrocontroller und Digitale Elektronik call by value funktioniert nicht


von Soenke H. (soenke)


Lesenswert?

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

von Der inoffizielle WM-Rahul (Gast)


Lesenswert?

schon mal mit
volatile unsigned char var = 0xDC;
probiert?

von Soenke H. (soenke)


Lesenswert?

volatile habe ich schon ausprobiert, ändert leider nichts am Ergebis.

von Karl heinz B. (kbucheg)


Lesenswert?

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.

von Soenke H. (soenke)


Lesenswert?

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
Noch kein Account? Hier anmelden.