Forum: Mikrocontroller und Digitale Elektronik Compiler Abstraction


von Tiffy (Gast)


Lesenswert?

Was ist eine Compiler Abstraction ?

von Klaus W. (mfgkw)


Lesenswert?

Ohne jetzt deinen Zusammenhang (also deine Hausaufgabe) zu kennen, kann 
man das nicht sicher sagen.

Vermutlich ist das eine Art Zwischenschicht (Layer, Satz von Makros 
o.ä.) um Quelltexte vom verwendeten Compiler unabhängig zu machen.

von Stefan ++ (Gast)


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

von Tiffy (Gast)


Lesenswert?

Sind es also Mikrocontroller eigene Macros, die es in C nicht gibt?

von Chris (Gast)


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);

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.