call by value funktioniert nicht

OP #349056
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
OP #349060
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!

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.