-
-
Guten Abend zusammen,
erstmal frohes neues Jahr allerseits!
@Sternthaler: leider kenne ich mich mit dem tiefsten inneren von einem C-Programm nicht sooo genau aus. Ich hatte das immer so verstanden: wenn ich irgendeinen String senden möchte, muss der irgendwo im Flash abgelegt sein und entsprechend kann man einen Pointer übergeben. Da im Flash, kann nix nicht überschrieben werden. Dabei habe ich nicht mit "echten" Variablenwerten gerechnet, und funktioniert auch bei lokalen (automatischen) Variablen ganz schlecht.
Hm, bleibt nur die übliche Vorgehensweise mit einem Puffer, in den die Daten geschrieben werden und damit vor Veränderungen sicher sind. Das kostet aber wieder Bytes...
Du sprichst noch einen anderen Punkt an: die zeitliche Zuordnung zwischen UART-Ausgabe und Hauptprogramm geht bei Interruptnutzung flöten. Heute wartet das Hauptprogramm mit der weiteren Arbeit, bis die Daten versendet sind. Fürs debugging ist das sicherlich einfacher als wenn ("in Zukunft") die Daten zwar zeitnah, aber nicht notwendigerweise synchron verschickt werden. Außerdem könnte das Hauptprogramm soviel Fahrt haben, dass es Sendedaten schneller in einen Puffer schreibt, als gesendet werden kann - noch so etwas, worauf man heute nicht achten muss.
Die Sendefunktion sollte also auf jeden Fall einen Rückgabewert besitzen wie "Puffer voll"; vielleicht wäre auch eine "Prüfen ob Puffer voll"-Funktion nicht schlecht. Mit der ließe sich dann die zeitliche Kopplung wieder herstellen: einfach warten, bis der Puffer leer ist, dann schreiben und weitermachen.
Auf diese Weise lässt sich die Interruptgeschichte dann flexibel nutzen: wenn nötig, wird auf die serielle Schnittstelle gewartet, wenn nicht erforderlich, nicht.
Mal weiter drüber nachdenken...
Gruß
Rakke
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen