Was packe ich alles in die HardwareAbstractionLayer mit rein? Prozessorregister usw. auf jeden fall! so, wenn ich über die Serielle Schnittstelle mit einem PC über ein Protokoll kommuniziere, kommt dann die auswertung des Protokolls mit in die HAL?
Da gehört genau und nur das rein, was direkt mit der zugrundeliegenden Hardware spricht. Der Zugriff auf die Schnittstellenregister gehört also da rein, die Analyse irgendeines Übertragungsprotokolles nicht.
OK, Danke (erst mal ;-). Und wenn ich nun ein Relais auf der Prozessorkarte setzen will! Schreibe ich die Funktion zum setzen des Relais dann in die HAL?
> Und wenn ich nun ein Relais auf der Prozessorkarte setzen will! > Schreibe ich die Funktion zum setzen des Relais dann in die HAL? Ja, aber ggf nach dem benannt, was durch das Relais geschaltet wird, also z.B. Light_on().
Der Begriff entstammt dem Bereich Betriebssysteme. Wenn du ein System hast, in dem sich die Software in einen maschinenabhängigen und einen maschinenunabhängigen Teil trennen lässt. Siehe Windows. Was spezifisch für x86 ist, gehört in den HAL (Taskumschaltung) oder in Gerätetreiber (Disk), was dies nicht ist sitzt woanders (Scheduler, Filesystem). Wie du das auf Controller abbildest bleibt dir überlassen. Auf einfache Controller-Systeme ist dieses Konzept oft nicht sinnvoll anwendbar, da auf allen Ebenen sehr hardwarenah gearbeitet wird, und/oder eine Trennung den Code bloss aufbläht. Ein HAL ist sinnvoll, wenn du dich mit dem Gedanken trägst, Controller-Anwendungen ohne grossen Aufwand auf verschiedene Controller portieren zu können. Und dadurch ergibt sich dann die Schnittstelle automatisch. Genau das was aufgrund andersartiger Hardware modifiziert werden muss gehört in den HAL. Evtl. auch Dinge, die von der Programmierumgebung abhängen (Interrupt-Support ist oft verschieden). Was dein Relais angeht: Wenn du es konsequent durchziehen willst, dann baust du eine Funktion / einen API für Portzugriffe. Wobei du das so bauen musst, dass es gleichermassen bei Ports sehr verschiedener Bauart funktioniert (8/16/32 Bits breit, mit/ohne OpenCollector, möglicherweise mit den Eigenheiten der 8051-Ports, ...). Voraussetzung hierfür ist, dass du dir vorher eine Übersicht darüber verschaffst, was die Welt da so anbietet. Bei Kleinkram wie Relais allerdings ist es eher sinnvoll, 3 Port-Makros zu definieren. Relais_Init, Relais_An, Relais_Aus.
Die HAL ist ein halbdurchgekautes Konzept das die Basisfunktionalitaet bei beliebig besserer Hardware garantiert. Der VGA modus beim PC ist ein Angelegenheit der HAL. Die superbeschleunigte 3D Darstellung laeuft natuerlich neben der HAL vorbei. Oder ein UART, das ein 16550 emuliert. Dabei ist die Hardware viel besser.
> Der VGA modus beim PC ist ein angelegenheit der HAL. Das hat nichts mit HAL zu tun. VGA-kompatible Karten sind einfach Hardware, die sich immer gleich ansprechen läßt. HAL braucht man aber erst, wenn man die Hardware hat, auf die man auf unterschiedliche Art zugreifen muß. Diese Unterschiede werden dann hinter einer Softwareschnittstelle verborgen, damit das eigentliche Programm sich darum nicht mehr kümmern muß. > Die superbeschleunigte 3D Darstellung laeuft natuerlich neben der HAL > vorbei. Nein, gerade da nicht. Man will nämlich nicht für die Karten von ATI, Nvidia, Intel u.s.w jedesmal sein 3D-Spiel komplett neu schreiben, weil jeder Hersteller seinem Treiber komplett unterschiedliche Funktionen gibt. Deshalb gibt's da ein HAL, das die Unterschiede verbirgt.
>> Der VGA modus beim PC ist ein angelegenheit der HAL. > Das hat nichts mit HAL zu tun. Doch, ursprünglich schon. Das PC-BIOS ist ein solcher HAL und wurde von DOS auch so verwendet. > Deshalb gibt's da ein HAL, das die Unterschiede verbirgt. Wobei sowas auf unterster Ebene gemeinhin als Device Driver bezeichnet wird, nicht als HAL. Das ist aber eher eine Frage der Bezeichnung, nicht so sehr des Inhalts.
Ich würde sagen, der HAL ist eine Sammlung von Lowlevel-Treibern, die direkt mit der Hardware kommunizieren und nach oben einen standardisierten Satz von Geräteoperationen bereitstellen. Darüber liegen in aller Regel noch mehr oder weniger viele, noch oben immer abstrakter werdende Treiberschichten. Darauf "sitzt" das eigentliche Betriebsystem.
>>> Der VGA modus beim PC ist ein angelegenheit der HAL. >> Das hat nichts mit HAL zu tun. > > Doch, ursprünglich schon. Das PC-BIOS ist ein solcher HAL und wurde von > DOS auch so verwendet. Stimmt, DOS hat per BIOS auf die Grafikkarte zugegriffen. Allerdings ändert das nichts daran, daß die Grafikkarten registerkompatibel zur VGA sind und man daher auch ohne Zugriff über das BIOS die VGA-Modi aller Karten auf dieselbe Art anspricht. VESA ist da schon eher ein HAL.
Nicht unbedingt. Ein HAL ist eine Abstraktionsschicht. Die kann in einem Treiber implementiert sein oder auch in einer höheren Ebene. Treiber sind halt sehr hardwarenah. Sie sollen erstmal nur die Funktionen der Hardware auf ein Software-Interface mappen. Da gibt's dann meistens noch einige Unterschiede. Ein HAL soll aber alle Funktionen, die spezifisch für eine Hardware sind, hinter einem einheitlichen Interface wegkapseln.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.