Compiler Abstraction

Gast #2681600
Lesenswert?

Hallo,

es gibt einen ähnlichen Begriff HAL (Hardware Abstraction Layer) den man 
gewöhnlich nur bei Betriebssystemen findet. Dieser HAL gewährleistet 
dass man Programme (einfach gesagt) unabhängig von der im Rechner 
eingebauten Hardware schreiben kann.

Bei Embedded Systemen, die ja meist kein Betriebssystem haben, ist es 
nicht so einfach quasi hardwareunabhängige Programme, vielleicht sogar 
für verschiedenen CPUs, zu schreiben.
Hier kommen dann bestimmte Compiler/Linker zu Hilfe.
Gibt man hier z.B. die verwendete CPU an dann weiss der Compiler von 
sich aus wie er das Programm in einen lauffähigen Code übersetzten muss, 
welche Startup-Files er einbinden muss, welche Bibliothek er verwendet 
und so weiter.
Diese Compiler stellen auch Techniken (Makros, defines usw.) zur 
Verfügung um diese Fähigkeit selber weiter auszubauen etc.

Kurz gesagt, diese Compiler/Linker abstrahieren !!!
Gast #2704769
Lesenswert?

Die Compiler Abstraction abstrahiert die Implementierung von 
verschiedenen Compilern. Dabei geht es nicht (wie von Stefan ++ 
vermutet) darum, jede Software hardwareunabhängig zu machen (bei 
Hardwaretreibern meist unmöglich), sondern darum ein Softwaremodul mit 
verschiedenen (für eine bestimmte Zielplatform erhältlichen) Compilern 
compilieren zu können.

Bei AUTOSAR findest Du eine Spec für eine Compiler Abstraction, da sind 
auch Beispiele drin:
http://www.autosar.org/index.php?p=3&up=1&uup=2&uuup=7&uuuup=0&uuuuup=0

Dabei werden keine 'neuen' Makros definiert, sondern durch einen Satz 
von Makros werden bestimmte Compiler-Spezifika berücksichtigt, z.B. die 
Reichweite von Pointern/ Memory Mapping (Stichwort: Paging) oder die 
Reihenfolge von Compiler-Keywords. Am deutlichsten zeigt sich dieser 
Unterschied wohl bei den Compilern von Freescale und Cosmic für die S12* 
Platform...

Kurzes Beispiel, wie das in der Software aussieht:

- ohne Compiler Abstraction:

uint8 MeineVariable;
uint8 MeineFunktion(uint16 Parameter);

- mit Compiler Abstraction (AUTOSAR Style):

VAR(uint8, MY_VARS) MeineVariable;
FUNC(uint8, MY_CODE) MeineFunktion(uint16 Parameter);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren