mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik call by value funktioniert nicht


Autor: Soenke Hanses (soenke)
Datum:

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

Autor: Der inoffizielle WM-Rahul (Gast)
Datum:

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

Autor: Soenke Hanses (soenke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile habe ich schon ausprobiert, ändert leider nichts am Ergebis.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

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

Autor: Soenke Hanses (soenke)
Datum:

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

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.