Forum: Mikrocontroller und Digitale Elektronik Was kommt in die HAL?


von Elektro G. (e_g)


Lesenswert?

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?

von Andreas K. (a-k)


Lesenswert?

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.

von Elektro G. (e_g)


Lesenswert?

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?

von Rolf Magnus (Gast)


Lesenswert?

> 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().

von Andreas K. (a-k)


Lesenswert?

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.

von Nullpointer (Gast)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

> 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.

von Andreas K. (a-k)


Lesenswert?

>> 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.

von Uhu U. (uhu)


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

>>> 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.

von Gast (Gast)


Lesenswert?

also HAL = Treiber?

von Rolf Magnus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.