Hallo, ich habe ein Programm geschrieben, das einzelne Zeichen, die von einem Terminalprogramm über USB an den ATmega 328 gesendet werden, in einen C-String umwandelt und diesen auf die Serielle schreibt. Leider fehlt immer das drittletzte Zeichen des Strings und ich weiß einfach nicht warum. Die Baudrate und die Verbindung sind in Ordnung. Was habe ich falsch gemacht? Viele Grüße Jonas
In dem selbsterklärenden Programm ohne Kommentare müßtest du aber doch selbst auf den Fehler kommen.
Jonas Wühr schrieb: > Was habe ich falsch gemacht? char TxBuffer[TX_BUFFER_SIZE] geht von 0 bis 127 Im Vergleich der Indizes erlaubst du aber 128 oder mehr für TxBuffer und RxBuffer.
1 | if(txReadPos >= TX_BUFFER_SIZE) |
2 | {
|
3 | txReadPos++; |
4 | }
|
5 | ...............
|
6 | ...............
|
7 | if(rxWritePos >= RX_BUFFER_SIZE) |
8 | {
|
9 | rxWritePos = 0; |
10 | }
|
Damit schreibst du über die Grenzen deines deklarierten Buffers hinaus und überschreibst andere Variablen bzw liest Characters aus einem Bereich wo keine stehen (sollen/dürfen). Also üblicherweise lautet die Abfrage allgemein geschrieben:
1 | if (pos < BUFFER_SIZE) |
2 | {
|
3 | // was tun
|
4 | }
|
5 | else
|
6 | {
|
7 | // Fehler behandeln
|
8 | }
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.