Ich habe einen C-Code entwickelt, der Befehlspakete über einen seriellen seriellen Port an einen FPGA sendet und empfängt. Im Wesentlichen liest der Code Byte für Byte vom seriellen Port und speichert die Werte in einem Puffer.Was werden Char-Variablen mit Werten unter 0x20 konvertiert?
Beispiel-Code (mein Code ist ziemlich ähnlich wie diese):
for (i = 0; i<cmd_len; i++){
buf[i] = inbyte();
Dies ist nur ein einfaches Beispiel, die Idee zu veranschaulichen und ist nicht super bezeichnend für meinen eigentlichen Code. inbyte()
stammt aus der Xilinx-Bibliothek, es liest nur aus einem Speicherregister.
Das Problem, das ich habe, wenn ich versuche, ein Byte des Befehls zu senden, der unter 0x20 ist, wird das Byte nicht ausgedruckt. Da mein Puffer ein Zeichenpuffer ist, gehe ich davon aus, dass Werte unter 0x20 in der ASCII-Tabelle nicht wirklich Zeichen sind, sondern dass diese Bytes verworfen werden. Ich habe auch versucht, uint8_t nutzlos zu verwenden, und Xilinx u8 erweitert sich zu einem unsigned Char sowieso.
Wäre es richtig zu sagen, Werte unter 0x20 werden einfach "verworfen"? Wenn ja, gibt es einen Weg dahin? Vielen Dank.
Zusätzliche Informationen: Ich benutze teraterm, um eine Verbindung zu einem COM-Port herzustellen und bin-Dateien zu senden, um die Hex-Befehle zu simulieren.
Edit: Ich habe den Puffer mit Hex-Formatierung ausgedruckt. Es scheint jedoch das Problem mit dem Empfang zu sein. Ich habe bemerkt, dass die Schleife nur für Bytes über 0x20 iteriert wird, wenn ich zum Beispiel einen 16-Byte-Befehl von 14 0x0s sende, wird die for-Schleife nur zweimal durchlaufen. Meine Vermutung ist, dass etwas mit der inbyte()
Funktion auftritt.
Diese Zeichen sind Steuerzeichen und sind unsichtbar. Die Bytes sollten in Ihrem Puffer bleiben, aber Sie können sie nicht drucken. Versuchen Sie, in Ihrem Puffer zu iterieren, indem Sie die Bytewerte anstelle von Zeichen drucken. –
_ "Wäre es richtig zu sagen, Werte unter 0x20 werden einfach" verworfen "?" _ - Nein, das wäre sehr ungenau. Werte unter 0x20 sind als "char" Werte vollkommen in Ordnung. In Ihrem Code läuft noch etwas anderes. Wenn Sie sagen, dass das Byte "nicht im Puffer angezeigt wird", wie bestimmen Sie das? Was ist stattdessen im Puffer? –
Nein, sie werden wahrscheinlich nicht verworfen, sie werden einfach nicht angezeigt. Haben Sie den Inhalt des Puffers überprüft, z. B. in Hexadezimal? –