Eugen.S schrieb:
> Ich lese mit Hilfe der Lib von Peter Danneger (im Anhand) ein String von
> bis zu 9 Byte ein. Diese werden in seine Lib im rx_buffer angelegt.
> Meine Idee war ein konstantes Array anzulegen und diese mit dem
> rx_buffer zu vergleichen. Dann das Ergebnis des Vergleich in einem
> String über rx wider heraus zu senden.
Nein das funktioniert nicht.
Die UART Routinen verwalten einen Ringbuffer. Der geht dich nichts an.
Du musst schon über die offizielle Funktionsschnittstelle gehen um dir
dort die einzelnen Bytes zu holen und in einem eigenen Array
zusammensetzen. Der von den UART Routinen verwaltete Ringbuffer ist nur
dazu da, dein Programm in sofern zu entlasten, dass du kein Byte
verlierst während dein Programm anderweitig beschäftigt ist und momentan
keine Zeit hat, die eintrudelnden Bytes abzuholen. Dann werden sie von
der Interrupt Routine in diesem Ringbuffer zwischengeparkt. Der ist
sozusagen der Postkasten, in den der Briefträger deine Post steckt, wenn
du nicht zu Hause bist und die Tür nicht öffnest.
Vergiss die Idee. Du hast 2 Funktionen. Die eine sagt dir, ob ein
Zeichen vorrätig ist. Die andere holt dir das jeweils nächste Zeichen,
wenn eines da ist. Mit denen arbeitest du. Was die UART Funktionen
intern machen geht dich nichts an, und ist nicht dein Bier.
1 | int main()
|
2 | {
|
3 | char c;
|
4 | char receivedString[80];
|
5 | unsigned char receivedCnt;
|
6 | ....
|
7 |
|
8 | receivedCnt = 0;
|
9 |
|
10 | while( 1 )
|
11 | {
|
12 |
|
13 | if( ukbhit0() ) // es gibt ein nächstes Zeichen
|
14 | {
|
15 | c = ugetchar0(); // hole das Zeichen
|
16 |
|
17 | if( c == '\n' ) // das vereinbarte Ende der Übertragung, zb '\n'
|
18 | {
|
19 | receivedString[receivedCnt] = '\0';
|
20 | receivedCnt = 0;
|
21 |
|
22 | // mach was immer du mit dem String machen willst
|
23 | // zb
|
24 | if( strcmp( receivedString, "hallo" ) == 0 )
|
25 | uputs0( "Dir auch ein hallo\n" );
|
26 | else
|
27 | {
|
28 | uputs0( "Ich verstehe nicht, was du mit '" );
|
29 | uputs0( receivedString );
|
30 | uputs0( "' meinst!\n" );
|
31 | }
|
32 | }
|
33 |
|
34 | else // kein Übertragungsende. Zeichen in den Buffer und somit
|
35 | // den String aufbauen
|
36 | {
|
37 | if( receivedCnt < sizeof(receivedString) )
|
38 | {
|
39 | receivedString[receivedCnt++] = c;
|
40 | }
|
41 | }
|
42 | } // end if( ukbhit0() )
|
43 |
|
44 |
|
45 | } // end while
|
46 | }
|