MICONOX MICONOX V1.0

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.

Warum MICONOX?

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.

Umgebung and Struktur

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.

Zugriff auf ein Gerät

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