Um die Verknüpfung von Komponenten über globale Variablen zu vermeiden, muss eine Entkopplung davon stattfinden. Aus den globalen Variablen werden damit Get() und Set() Routinen, die in einer eigenen C Datei zusammen mit den globalen Variablen ihren Platz finden. Die Prototypen dazu stehen dann in der zugehörigen Headerdatei.
Diese Entkopplung hat einige Vorteile:
- Ändert sich der Datentyp einer Variable, dann muss der Code an nur einer Stelle geändert werden. Implizite Typecasts werden damit vermieden.
- Kommen neue Variablen dazu, dann bekommen sie auch einen neue zugehörige Get() und Set() Routine.
- Die „globalen“ Variablen müssen nicht im RAM stehen. Wo sie sich tatsächlich befinden, im Flash, auf einem externen Server, wie z.B. MQTT, oder noch irgendwo anders, spielt keine Rolle.
- Stehen diese Variablen auf einem Server, z.B. MQTT, dann können sie als „Systemglobal“ eingesetzt werden. Das geht dann über die einzelne Hardwarekomponente hinaus.
Beispiel:
Die C Datei enthält den C Code
Aus der globalen Variable wird eine lokale (static)
// Variablen —————————————————————-
static byte tag = (byte)0;
// Die zugehörigen Funktionen für den globalen Zugriff Get() und Set()
// Funktionen —————————————————————
byte Get_Tag(void)
{
return(tag);
}
void Set_Tag(byte tg)
{
tag = tg;
}
Die zugehörige Headerdatei enthält dann die globalen Prototypen
#ifndef GLOBALS_H
#define GLOBALS_H
// globale Prototypen ——————————————————-
byte Get_Tag(void);
void Set_Tag(byte tg);
#endif
Links
Typecasting
https://de.wikipedia.org/wiki/Typumwandlung
Eine Anwendung
Messtechnik1 -> globals.cpp und globals.h