Gast
#1628150
Hallo, ich bin derzeit am Basteln einer kleinen UART Kommunikationsroutine. Ich weiß das Thema gibts schon und ich habe auch die Suchfunktion bemüht, allerdings hab ich keinen Ansatz gefunden. Ich nutze zum Senden der Daten von PC zu µC folgendes Protokoll: STX|CMD|AL|A0|..|An|ETX wobei AL die Länge des Attributs ist und A0..An die Attributdaten. Gehandlet werden die Daten in einem struct das ich CtrlInterface genannt hab. Darin befindet sich ein State und ein FIFO Buffer für die empfangenen Daten. In der UART ISR setze ich mit STX/ETX den State auf "RECEIVE"/"COMPLETE" daneben gibt es noch den "IDLE" state in dem auf den Beginn einer Übertragung gewartet wird (wird gesetzt wenn ein Kommando abgearbeitet wurde). Die Daten möchte ich eigentlich binär übertragen und nicht in ASCII. Durch die State Machine hab ich keine Probleme mit dem Wert 0x02 (STX). 0x03 (ETX) bereitet mir jedoch Probleme, da während des Empfangens einer Übertragung keine Daten mit dem Wert 0x03 gesendet werden können, sonst wird das natürlich als Ende der Übertragung angesehen.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
Eine Möglichkeit wäre natürlich das Zählen der empfangenen Attribut Character. Das würde aber zu einem zusätzlichen Member in der CtrlInterface Struktur führen und etwas mehr Arbeit in der ISR verlangen. STX und ETX als Beginn und Ende einer Übertragung zu nutzen erscheint mir daher sauberer, mir fällt nur nicht ein wie ich das oben genannte Problem lösten könnte. Nutzt man ETX nur wenn man Daten als ASCII Zeichen überträgt? Mir fällt momentan leider kein anderer Weg ein... Viele Grüße Stefan