[vz-dev] MacGyver goes Volkszaehler !

Harald Koenig koenig at tat.physik.uni-tuebingen.de
Sat May 29 11:46:44 CEST 2010


On May 28, Harald Koenig wrote:

>      strace -ttt -e read cat  < /dev/ttyUSB0 > /dev/null 
> 
> 	1275071653.195588 read(0, "\0", 4096)   = 1
> 	1275071681.731568 read(0, "\0", 4096)   = 1

ein kurzes update zu den time stamps von strace:  hier liegt noch ein kleiner "off by one" design-fehler,
denn der time stamp ist zunaechst der vom *start* des read calls, und nicht der zeitpunkt zu dem der puls 
angekommen ist, sondern (sehr) kurz nachdem der *vorletzte* puls ankam (plus null-byte nach /dev/null schreiben;).

ABER das spielt wirklich nur fuer den letzten/aktuellen timestamp bzw. die zeitdifferenz 
der letzten zwei pulse eine rolle: man bekommt diese differenz so immer erst um einen puls verzoegert
(z.b. mit meinem awk test code).  fuer die datenbank ist das natuerlich kein thema (modulo letzter eintrag
der eben nicht wirklich aktuell ist sondern der timestamp vom vorletzten puls).


es gibt jedoch eine ganz einfach abhilfe: statt des timestamps vom read() nimmt man den timestamp vom write() call
der das zeichen dann wieder rausschreibt, denn das kommt ja sofort nach dem einlesen des zeichen/pulses
und ist damit aktuell -- so sieht ja der komplette strace output aus:

	1275125653.120554 read(0, "\0", 4096)   = 1
	1275125750.614324 write(1, "\0", 1)     = 1
	1275125750.614389 read(0, "\0", 4096)   = 1
	1275125753.846105 write(1, "\0", 1)     = 1
	1275125753.846170 read(0, "\0", 4096)   = 1
	1275125757.069194 write(1, "\0", 1)     = 1


eine andere alternative (ohne das write) waere, sich von strace noch die kernel-verweildauer im read() system call 
mit option "-T" mit anzeigen zu lassen, dann muss man eben noch die letzte zahl in der zeile zum timestamp addieren;

	1275125919.832407 read(0, "\0", 4096)   = 1 <3.151374>
	1275125922.983918 read(0, "\0", 4096)   = 1 <4.444875>
	1275125927.428934 read(0, "\0", 4096)   = 1 <16.266506>

puristen ziehen dann nochmal ~200 msec ab, den solange haben ja die 8 daten- plus start- und stop-bits
bei 50 baud gebraucht und die startflanke des pulses (== starbit) kam ja entsprechend frueher (minus verzoegerung
durch usb2serial, minus .... ;-)



gruesse,

Harald
-- 
"I hope to die                                      ___       _____
before I *have* to use Microsoft Word.",           0--,|    /OOOOOOO\
Donald E. Knuth, 02-Oct-2001 in Tuebingen.        <_/  /  /OOOOOOOOOOO\
                                                    \  \/OOOOOOOOOOOOOOO\
                                                      \ OOOOOOOOOOOOOOOOO|//
                                                       \/\/\/\/\/\/\/\/\/
Harald Koenig                                           //  /     \\  \
koenig at tat.physik.uni-tuebingen.de                     ^^^^^       ^^^^^


More information about the volkszaehler-dev mailing list