I/O Port auf existenz prüfen
-
Hallo,
ich habe in meinem OS ein Routine die üverprüft, ob Laufwerke am ersten IDE Port, jeweils Master und Slave, sind. Dazu schick ein Lesebefehl an den enstsprechenden Port und Werte anschließend aus, ob es eine Fehlermeldung gab oder nicht. Funktioniert alles soweit, SOLANGE es einen IDE Primary und IDE Secondary gibt. Mein Notebook hat aber nur einen Primary IDE, keinen Secondary. Die Folge, das Notebook friert an der Stelle ein, wo der Secondary Port geprüft wird, weil es diesen I/O Port ja dort gaar nicht gibt. Meine Frage nun, gibt es irgendeine Möglichkeit zu prüfen ob ein I/O Port vorhanden ist, bevor man Befehle dort hinschickt? Danke!
-
Hi.
Grundsaetzlich "existieren" an jedem Rechner alle I/O-Ports. Die Frage ist nur, ob ein Geraet auf die jeweilige Addresse lauscht/antwortet oder nicht. Gelesen werden kann zumindest also schonmal immer - sollte dabei auch nichts abstuerzen (solange du die betreffenden Schleifen mit einem timeout versehen hast, versteht sich
).
Tjo, und da bin ich auch noch am gruebeln, wie man das zuverlaessig feststellen kann, ob ein Port belegt ist oder nicht. Ich habe fuer einen ISA-PnP-Algo (fuer Systeme ohne PCI/Plug&Play-Unterstuetzung) eine Routine verwendet, die in einer Schleife die zu pruefenden Ports ausliesst und prueft, ob eine Zeit lang nur FFh zurueckgegeben wird (sollte eigentlich so sein, wenn sich an dieser Addresse nichts meldet). Ist dummerweise sehr unzuverlaessig. Mein PCI/PnP-loses 486-Board gibt da manchmal einfach irgendwelche scheinbar zufaelligen Werte zurueck.Wie auch immer:
Wenn du nicht fuer solche Uralt-Systeme programmierst, wuerde ich dir raten, PnP oder PCI zu nutzen, um 1. festzustellen, was fuer Geraete in deinem System verfuegbar sind und 2. welche Hardware-ressourcen ihnen zugeordnet sind - das kann naemlich von System zu System sehr unterschiedlich sein.Sind weder PCI noch PnP verfuegbar, solltest du bei solchen Sachen wie dem IDE-Controller aber auf jeden Fall nochmal nach den Docs zum Zielchipset suchen - die verklickern dir oft auch ohne solche grossen Umstaende, wieviele Kaele zur Verfuegung stehen, bzw. wie du den Controller (und damit seine Besonderheiten) identifizieren kannst.