Axel Joost schrieb:
> Leider können die Datenpakete unterschiedlich lang sein, so dass ich
> keinen Zähler mitlaufen lassen kann. Außerdem kommt die Eusart nach ein
Du musst nur etwas anderes als Zeichen zählen.
Z.B.: "Finde zweite Zeile" -> "Finde Punkt" -> "8 Zeichen davor und 7
Zeichen danach sind mein Wert".
> paar empfangenen Zeichen außer Tritt, wenn ich die Daten nach jedem
> empfangenen Zeichen gleich auf das LCD packen möchte.
Empfang, Auswertung und Ausgabe am bestens getrennt behandeln und schon
gar nicht im selben Interrupt. Der dauert sonst so lange, dass du welche
versäumst.
Modulare Konzepte sind immer wünschenswert.
> So, nun kommt endlich meine Frage: Wie kann ich die empfangenen Daten in
> ein String Array packen und nachdem der Empfang abgeschlossen ist,
> wieder auslesen? Wie muß so ein Array in C deklariert werden und wie
Welchen Compiler benutzt du? Kennt der überhaupt strings?
Aber du brauchst sowieso nur ein Zeichen-Array.
Dieses Zeichen-Array befüllst du im Interrpt und wertest es in deiner
main-Funktion wie in der oben beschriebenen "Suche" aus.
1 | volatile char receive_buffer[512];
|
2 |
|
3 | #pragma interrupt
|
4 | void eusart_interrupt(void)
|
5 | {
|
6 | static short counter = 0;
|
7 | receive_buffer[counter] = RCREG0;
|
8 | counter++;
|
9 |
|
10 | if (RCREG0 == '!' || counter >= 512)
|
11 | {
|
12 | auswerten_bitte = 1;
|
13 | counter = 0;
|
14 | }
|
15 | }
|
In deiner while(1)-loop in main:
1 | if(auswerten_bitte)
|
2 | {
|
3 | auswerten_bitte = 0;
|
4 | /* suchvorgang wie oben beschrieben */
|
5 | }
|
> kann es beschrieben und ausgelesen werden? Ich hatte erst im letzten
> Jahr als "alter Assembler Sack" mit C angefangen und kann im Moment erst
> die groben Grundsachen. Ich hoffe, dass hier auch ein paar Pic Benutzer
> dazwischen sind...
Elegant lässt sich dein Vorhaben mit Zeigern umsetzen. Grundlagen dazu:
Beitrag "Re: Frage zu Zeigern"
http://home.fhtw-berlin.de/~junghans/cref/CONCEPT/pointers.html
P.S.: falsches Unterforum erwischt.