Im letzten Maerz habe ich
angekuendigt in unregelmaessigen Abstaenden ueber
die kleinen Tools zu schreiben die ich mir im laufe der Zeit fuer die unterschiedlichsten Aufgaben zusammengestoepselt habe. Vor 10 Monaten ging es um einige JavaScript Programme fuer Berechnungen aus dem Bereich der Elektrotechnik. In diesem Post will ich drei Tools vorstellen die eher in den Bereich embedded bzw. hardwarenahe entwicklung gehen.
Clifford's Tools:
http://svn.clifford.at/tools/trunk/
rpn und rpn64:
Ueber dieses Programm und das nachfolgende habe ich
2007 schon mal in aller kuerze geblogged. Rpn ist ein einfacher rechner mit 32 bit integern fuer rechenoperationen in reverse polnish notation. rpn64 ist die version fuer 64 bit integer. Das eigentliche Highlight des Rechners ist aber nicht das rechnen an sich sondern das format seiner Ausgabe:
$ rpn 42 16 shl 23 or 0xf02a0017 add
HEX: 0xf054002e, DEC: 4032036910, OCT: 036025000056
GIGA: 3.7551, MEGA: 3845.2500, KILO: 3937536.0449
BIN: 11110000010101000000000000101110
|31 24|23 16|15 8|7 0|
+---------+---------+---------+---------+
|1111 0000|0101 0100|0000 0000|0010 1110|
+---------+---------+---------+---------+
|0 7|8 15|16 23|24 31|
Wenn man oft damit zu tun hat die Inhalte von irgendwechen Registern auseinanderzuklauben oder mal schnell fuer einen test das richtige wort zusammenstoepseln muss das in ein register geschrieben werden soll, dann ist dieses tool eine wertvolle hilfe. "
rpn --help" erzeugt eine 4 seitige uebersicht ueber alle aufrufarten und operationen die rpn versteht. Unter anderem gehen einfache rechnungen und bitoperationen, ein uns ausgabe kann in binaer, dezimal, hexadezimal oder oktal erfolgen. Wenn es keine angabe zum ausgabeformat gibt wird das oben gezeigte verbose format verwendet.
Ich verwende das tool hauptsaechlich auf der kommandozeile um bitmuster zu zerlegen. machnmal ist es aber auch praktisch um z.bsp. kleine shell scripts zu schreiben die wiederkehrende berechnung/analyse von bestimmten bitmustern wie z.bsp. statusregistern zu automatisieren.
iomem:
iomem ist ein tool das man auf PCs wohl besser nicht starten sollte: es erlaubt den direkten zugriff auf memory-gemappte register. in embedded systems kann das aber sehr praktisch sein, wenn man fuer einfache aufgaben nicht gleich einen treibewr schreiben muss sondern mit iomem direkt im speicher herumpfuschen kann.
Um z.Bsp. das 32 bit register an der Addresse 0x12345678 auszulesen ruft man "
iomem r32 0x12345678" auf. Um die vier 16 bit register an der io adresse 0x100 auszulesen wuerde man "
iomem r16-port:4 0x100" ausfuehren. es gibt modi um auf registerbloecke zu lesen und zu schreiben und um mehrere lese oder schreib zugriffe auf ein fifo register zu machen. Man kann auch pollend darauf warten das ein register ein bestimmtes bitmuster annimmt. Ich empfehle aber das Programm nur zu verwenden wenn man weiss was man da tut. Es gibt einen grund warum es normalerweise kein command line tool gibt um direkt hardware register zu manipulieren..
teletype:
teletype is ein raw serial terminal. mit "raw" meine ich in diesem fall, dass es nicht versucht terminal escape codes selbst zu interpretieren sonder die bytes von der seriellen schnittstelle 1:1 an das controlling tty weitergibt. ansi, vt100, und andere escape codes muss das controlling tty selbst auswerten - oder der user bekommt den schrott halt angezeigt. das hat den vorteil, dass man alle features eines X terminal windows auch beim verwenden der seriellen schnittstelle hat. Insbesondere dass bei curses basierenden serial terminals die history funktion des terminal windows verloren geht hat mich immer sehr gestoert.
dafuer hat teleteype einige features die andere terminal-programme nicht haben wenn es um das automatisieren oder teilautomatisieren von ablaeufen geht. speziell so dinge wie mit kleinen shell scripts devices flashen geht damit recht leicht.
Wen man das programm ohne weitere parameter startet bekommt man eine uebersicht der optionen und befehle:
$ teletype
---------------------------------------------------------
Usage: teletype device [speed] [escape-letter] [command(s)]
Default speed is 9600 Baud.
Default escape letter is 'A'.
Supported speed rates:
1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
Control Key Kombos:
Ctrl-A A Send a Ctrl-A over the line
Ctrl-A B Send a break over the line
Ctrl-A 0 Send a a single zero byte over the line
Ctrl-A H Print help message (command overview)
Ctrl-A R Toggle RTS (Ready To Send) signal
Ctrl-A D Toggle DTR (Data Terminal Ready) signal
Ctrl-A T Toggle timestamp-mode and reset timer
Ctrl-A L Set slow send mode (N chars/sec, 0=unlimited)
Ctrl-A N Create network link to remote TCP/IP port
Ctrl-A E Toggle local terminal echo
Ctrl-A C Run a chat script (or any other command such as 'sx')
Ctrl-A W Wait one second (this is usefull for scripts)
Ctrl-A U Set baud rate (use with care!)
Ctrl-A S Print line status
Ctrl-A \ Exit without serial reset
Ctrl-A X Exit with serial reset
Ctrl-A . [x] Change escape key from Ctrl-A to Ctrl-[x]
Commands are in the form of '-<Key><Argument>'. E.g.:
teletype /dev/tts 9600 -b -l10 -c'chat -f myscript.txt' -l0 -u115200 -c'sx datafile.bin' -x
---------------------------------------------------------