[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [DDL-ML] Neues vom loconet device



> Beim erddcd? Der kommt doch prima ohne device driver aus. Kannst Du das
> mal naeher erlaeutern?

'türlich.

Für die Märklin/Motorolabahner ist das kein Problem, da die Eins und
Null Bits sowieso asymetrisch daherkommen. Das NMRA protokoll ist aber
immer symetrisch um die Null. Stell eine analoge Gleichstromlok auf
die Schienen und wenn sie Dir davonläuft ist das NMRA Protokoll nicht
wie es sein soll. Beim erddcd liegt das an dem waitUARTempty() der
die ganze schöne Schlange Bits zur Serienport rauslaufen lässt ohne
nachzufüllen. Das gibt dann jedesmal eine Pause. Eine Alternative
ist es den xmit Buffer voll zu machen, doch dann hat man immer erst 
4kbytes mit Idlesignal vor sich bis man ein Kommando rausbekommt.
Also will man so ungefär 100 Bytes im xmit Buffer haben, die Anzahl
der Bytes in xmit buffer kan man aber nur mit einem ioctl Abrufen,
der eigentlich einen struct liefert der kernelspezifisch ist. Also
muß man sich sowiso auf die Kernelversion einstellen, und dann ist
es wahrscheinlich besser gleich einen Driver anzupacken. Unter
2.2.14 habe ich das schon fast hingekriegt, doch wenn man dann den
Rechner mit anderem belastet oder viele syscalls macht (z B um
die realtime clock zu lesen) ruckelt die Analoglok wieder an.

Dann hab ich da noch folgendes von Dir aus einer alten Email:

>Zur Erzeugung korrekter
>Maerklin-Pakete ist es notwendig, dass Realtime-Eigenschaften des Linux-
>Kernels benutzt werden. D.h. die POSIX-Funktion sched_setscheduler()
>wird aufgerufen, damit nanosleep() mit der notwendigen Genauigkeit 
>arbeitet.

Ist ein Treiber nicht besser um solche kurze Zeiten genau abzumessen?
Funktioniert das mit dem Realtime im Linux Kernel wie es soll?
Verstehe mich jetzt nicht falsch, ich bin nicht von einem Treiber
begeistert um des Treibers Willen, doch sehe ich nicht wie ich auf
andere Weise ohne viel Schmerz das hinkriege. Es ist immer besser
ohne Treiber auszukommen, auch aus dem einfachen Grund daß Treiber
abschrecken (oh, ich brauche einen Treiber, das Paket ist mir zu
kompliziert).

Zum 16550: Ich habe gehört das moderne 16550 UARTs auch DMA können
sollen. Hat jemand dazu irgendwo ein Treiberbeispiel? Das wär doch
ganz fein: Irgendwo im Speicher einen Buffer füllen und dann mit
DMA zur seriellen Schnittstelle raus.

Harald.