MICONOX ist die Abkürzung für "Microcomputer Native Operating Extensions".
Zur Zeit ist MICONOX eine Schnittstelle für serielle Peripheriegeräte. Es orientiert sich am UNIX-Interface und ist konstruiert um auf Blockgeräte erweitert zu werden. Noch mehr Funktionalität wie Threading, Speicherverwaltung und weitere könnten in nächster Zeit hinzugefügt werden.
MICONOX ist von mir für meinen eigenen Gebrauch entwickelt. Ich stelle es als Freeware ohne Unterstützung oder Garantie zu Verfügung. Es darf in jedem Produkt verwendet werden, aber für MICONOX selbst darf kein Preis erhoben werden.
MICONOX soll eine standardisierte Schnittstelle zum Zugriff auf Peripheriegeräte bieten. Es können Funktionen für Serielle Schnittstellen, LCD-Anzeigen, Drucker, I2C-Schnittstelle und weitere geschrieben werden, ohne das spezielle Schnittstellen benötigt werden. Ausgaben können vom LCD auf Drucker oder serielle Schnittstelle umgeleitet werden, ohne dass das aufrufende Programm geändert werden muss.
Funktionen höherer Ebenen wie zum Bispiel das Formatierungsprogramm
printf
können geschrieben werden, die ohne Änderung mit jeder Art
Peripheriegerät arbeiten.
MICONOX ist konstruiert zur Arbeit auf Mikrocomputern mit begrenztem Speicherplatz. Überflüssige Teile in UNIX/LINUX für komplizierte Mehrbenutzer-Netzwerk-Umgebungen sind weggelassen worden.
MICONOX ist mit Hilfe des GNU C compiler für AVR in der Version von 12/2001 der AVR-Freaks entwickelt. Es kann leicht auf andere Mikrocontroller als Atmel AVR portiert werden, aber bisher habe ich noch keine derartigen Versuche unternommen.
Das Hauptprogramm ist Teil von MICONOX und ist in der Datei
"miconox.c" untergebracht. Nach der Initialisierung der Geräte
wird das Anwendungs-Hauptprogramm appl_main()
aufgerufen,
das von dir geschrieben wird. Schaue dir die Datei "test.c"
als Beispiel an.
Kern des Sytstems ist die Dateisteuerung, die in fcntl.h deklariert und in "fcntl.c" implementiert ist.
Die Dateien "config.c" und "config.h" sind die einzigen
Dateien in MICONOX die von dir angepasst werden sollten, um deine Anforderungen
zu erfüllen. In der Tabelle dir
vereinbarst du eine Liste von textuellen
Namen für deine Geräte und eine Haupt- und eine Nebengerätenummer.
Die Hauptgerätenummer wird als Index in die Zeichengerätetabelle
cdevsw
verwendet. Die Nebengerätenummer wird übergeben an Aufrufe
an die Lese- und Schreibfunktione (read/write) um eines von mehreren Geräten
zu bestimmen, die vom Gerätetreiber unterstützt werden.
Ein Gerät wird erst geöffnet (open), dann kann es gesteuert (ioctl) oder darauf geschrieben (write) und davon gelesen (read) werden. Bei Abschluss des Zugriffs wird das Gerät geschlossen (close).
Ein Gerät wird über einen Gerätenamen geöffnet. Er wird in der Verzeichnisstruktur
dir
gesucht. Die gefundenen Hauptgerätenummer und
Nebengerätenummer werden in die Dateitabelle filetable
geschrieben.
Die open-Funktion des Gerätetreibers wird aufgerufen. Der Index in der Dateitabelle
wird als Dateibezeichner fd zurückgegeben.
Bei Aufruf von read, write oder ioctl wird der Dateibezeichner übergeben. Er wird
verwendet um die Hauptgerätenummer aus der Dateitabelle zu lesen. Mit der
Hauptgerätenummer wird aus dem Eintrag in der Tabelle cdevsw
für den Gerätetreiber die entsprechende Funktion aufgerufen und dabei die
Nebengerätenummer und die sonstigen Parameter übergeben.
Die Funktion ioctl
ist Gerätespezifisch. Sie erwartet zwei Parameter
vom Typ uint8_t. Der erste Prameter ist eine Befehlskennung und der zweite
ist ein Parameter für diesen Befehl. Es wird zur Steuerung des Gerätes verwendet,
z.B. zur Einstellung der Baudrate.
Die close-Funktion führt Aufräumarbeten durch. Die Datei wird aus der Dateitabelle entfernt.
Ist der Zusatzaufwand von fcntl ein Problem für deine Anwendung, dann kannst du die Gerätetreiber auch direkt aufrufen. Rufe einfach die open-Funktion des Gerätes auf, dann beliebige read-/write- und ioctl-Aufrufe und rufe close zum Abschluss auf. Alles, was du tun musst, ist eine sinnvolle Nebengerätenummer beim Aufruf mitzugeben.
Um den Aufwand der dir
einzusparen, aber trotzdem
die dprintf-Funtkion verwenden zu können, wäre es auch möglich,
die filetable
direkt zu definieren. Man sollte dann direkt
die open
-Funktion aufrufen, um die Gerätetreiber zu
initialisieren.
Viel Spaß und Erfolg mit MICONOX!
© Mario Boller-Olfert 2002 - E-Mail: Kontaktformular - 123-Byte