Ich muss ein ziemlich einfaches Bash-Skript erstellen, um Bytes einzeln aus einer Binärdatei abzurufen, eine serielle Schnittstelle zu senden und dann zu warten, bis ein Byte zurückkommt, bevor ich das nächste sende. Dies ist effektiv für einen EEPROM-Programmierer, bei dem eine Standardlösung nicht funktioniert.
Ich bin meistens nicht in der Lage, die Bytes aus der Datei in eine Variable zu ziehen. Darüber hinaus weiß ich, dass ich die Werte über die serielle Schnittstelle wiedergeben und mit dd zurücklesen kann. (Gibt es auch einen besseren Weg, das zu tun?)
Danke für die Hilfe!
bash
shell-script
serial-port
binary
Minifigur 666
quelle
quelle
xxd -ps
undxxd -r -ps
. Es wäre sicherer.Antworten:
Verwenden Sie
dd
oderxxd
(Teil von Vim), um beispielsweise ein Byte (-l
) mit dem Offset 100 (-s
) aus der Binärdatei zu lesen. Versuchen Sie:Um Hex-Offsets zu verwenden, können Sie in Bash diese Syntax verwenden
$((16#64))
, z.Hiermit wird das Byte im Offset gelesen
FC
und im Dezimalformat gedruckt.Alternativ verwenden Sie
dd
wie:Dadurch werden Rohdaten von 5 Bytes mit Hex-Offset ausgegeben
FC
.Dann können Sie es einer Variablen zuweisen, es funktioniert jedoch nicht, wenn Ihre Daten NULL-Bytes haben. Daher können Sie sie entweder überspringen (
xxd -a
) oder als Problemumgehung im einfachen hexadezimalen Format speichern.Zum Beispiel:
Lesen Sie 10 Bytes bei Offset 10 in eine Variable ein, die Bytes im Hex-Format enthält:
Dann schreiben Sie sie in eine Datei oder ein Gerät:
Hier sind einige nützliche Funktionen in Bash:
Beispielnutzung:
quelle
Ich bin mir nicht sicher, ob ich das Gesamtbild Ihrer Anfrage verstehe, aber ich habe einige Ansätze, die Sie möglicherweise in Betracht ziehen sollten:
Verwenden
dd
Sie diese Option , um Ihre Eingabedatei zu lesenVerwenden Sie
od
diese Option, um Ihre Eingabedatei zu verarbeitenquelle
Dies ist wahrscheinlich einfacher mit einem winzigen C-Programm oder einem (fast) einzeiligen Programm in einer Skriptsprache wie Python oder Perl.
Die Unix-Shell ist ein Interpreter für Benutzerbefehle , der (zur Erleichterung des Schreibens sich wiederholender Befehle) rudimentäre Programmiermöglichkeiten bietet. Es wird oft (falsch) verwendet, weil eine Version der Bourne-Shell garantiert auf jedem Unix-System verfügbar ist, nicht weil es eine besonders gute (oder sogar halbwegs anständige) Programmiersprache ist.
quelle
Sie können
perl
stattdessen verwenden:quelle