Ich entwickle ein UART-Protokoll basierend auf ASCII-Codierung. Die Kommunikation erfolgt zwischen einem PC und einer STM32-Karte. Das Paketformat ist wie folgt: Paket: {STX,DATA,ETX} Wobei STX und ETX sind 0x02
und Ox03
in ASCII.
Beispiel:
STX HELLO ETX in Hex wäre: 0x02 0x48 0x45 0x4c 0x4c 0x4f 0x03
Meine Frage ist, wo genau ist die Position des \0
Zeichens in meinem Paket? ist es nach ETX so: STX HELLO ETX \0 oder nach HELLO so: STX HELLO\0 ETX ?
Sie geben Ihr Paketformat als {STX,DATA,ETX} an.
Der gesamte DATA-Inhalt des Pakets ist im DATA-Feld zwischen STX und ETX enthalten.
Wenn Sie sich entscheiden, NUL-terminierte Zeichenfolgen in Ihren Paketen zu senden, ist die NUL Teil der Zeichenfolge - Teil Ihres DATA-Felds.
Sie würden also senden: STX HELLO\0 ETX
es hängt von den DATEN ab (das Wort „HALLO“ in Ihrem Beispiel):
--wenn es sich um eine nullterminierte Zeichenfolge (eine C-Zeichenfolge) handelt, in der eine Zeichenfolge durch ein Array von Zeichen dargestellt wird, das mit einem Nullzeichen '\0' endet,
oder:
--wenn es sich um ein "normales" Array von Zeichen handelt.
Das Paket kann also sein:
-- STX HELLO\0 ETX für das nullterminierte Zeichenarray: [ 0x02 0x48 0x45 0x4c 0x4c 0x4f 0x00 0x03 ]
oder:
-- STX HELLO ETX für das normale Zeichenarray: [ 0x02 0x48 0x45 0x4c 0x4c 0x4f 0x03 ]
oder:
--das Null-Zeichen kann überall im Paket sein! ... es ist Ihr Protokoll, wie colin-s kommentierte;
Colin
\0
if du endest immer mitETX
?Chris Stratton