[linux-l] Binärdaten in Hex und Co.
Thomas Brinker
thomas.brinker at gmx.de
Fr Okt 17 13:19:11 CEST 2003
Hallo!
Am Mittwoch, 8. Oktober 2003 16:48 schrieb Oliver Bandel:
> redet er nich mea mit uns?
Doch, doch ich lebe noch. War in letzter Zeit etwas im Stress(Semesterstart,
Umzug...) und da hatte ich diesen Threat auch schon fast vergessen.
Den PIC programmiere ich mit einem PicStartPlus, das ist so das billigste
Programmiergerät, abgesehen von dem selbst gelöteten Zeug, dass dann aber nur
eine einzige Controllerfamilie kann und deren Software läuft auch nur unter
Windows. Die IDE von Microchip(PIC Hersteller) läuft zwar auch nur unter Win
aber es gibt eine super Lösung unter Linux
picp(http://www.cosmodog.com/pic/). Solange man die Finger von dem
ConfigRegister lässt klappt das programmieren super und ist auch viel
schneller als mit der Software vom Microchip.
Dazu gibt es dann den gpasm(http://gputils.sourceforge.net/) der das
assemblieren übernimmt. Es gibt leider keine freie Möglichkeit C-Programme
zukompilieren, oder weiß jemand eine?
Dazu habe ich dann eine Platine entwickelt und produzieren lassen(sausauteuer)
auf der sich eine Schaltung befindet die die Pegel für den RS232-Port
herrichtet und etwas analogen Kram um analoge Signale mit dem AD-Wandler des
Pic zuverarbeiten. Dazu dann noch ne Menge LED's und eine
Spannungsversorgung.
Das ganze ergibt dann eine Funkuhrwetterstation. Über die Analogen Signale
lassen sich Luftdruck, Temperatur, Luftfeuchte messen, mittels Uhrenquarz
wird die Zeit gemessen, ein DCF77 Modul empfängt das Zeitsignal aus Frankfurt
und die Serielle Schnittstelle reicht das dann an den Rechner weiter. Damit
das Ding auch stand-alone-fähig ist gibt es noch ein Display 4*20
Zeichen(auch fürs debugging wichtig) und eine Tastertur.
Ausserdem Dekodierung des Zeitsignals ist soweit alles implementiert und
wartet auf die 'Endmontage' im sinne von 'eichen', benutzerführung,
Eingabemasken...(also noch ne ganze Menge nicht so schwieriges Zeugs)
Das ganze ist in ein Interruptframework eingearbeitet, das sich um das polling
und den aufruf der passenden isr's kümmert. Die isr's können dann Prozeduren
als lauffähig markieren und diese werden dann nach dem Interruptservice
entsprechend ihrer Priorität gestartet.
So gibt es z.B. einen Interrupt 'rci' 'serielle Daten empfangen'. Die
entsprechende Serviceroutine legt das Datum dann in einen Ringpuffer und
meldet die Verarbeitungsroutine als lauffähig. Sobald der Interruptservice
beendet ist wird nun geschaut ob eine Verarbeitungsroutine lauffähig ist und
wenn ja, wird sie gestartet(entsprechend der Priorität). Die
Verarbeitungsroutine für serielle Daten macht nun nix anderes als vom
Ringpuffer zulesen bis nix mehr drauf ist und alles aufs display zuschreiben.
Dabei treten natürlich ganz wunderbare Synchronisationsprobleme auf, wenn der
eine gerade den ringpuffer liest und ein Interrupt der in den ringpuffer
schreiben muss dazwischen springt.....
An dem ganzen Gedönse arbeite ich nun seit etwa einem Jahr, allerdings mit
erheblichen Unterbrechungen
Gruß
Thomas
--
Wo kämen wir hin, wenn alle sagten, wo kämen wir hin,
und niemand ginge, um einmal zu schauen, wohin man käme,
wenn man ginge.
«Kurt Marti»
Mehr Informationen über die Mailingliste linux-l