Kapseln von globalen Variablen

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

 

Veröffentlicht von

Jürgen

Ich bin Software Ingenieur und habe meine Schwerpunkte in allen Aktivitäten, die zur Software Entwicklung gehören. Am längsten bin ich als Software Entwickler von Embedded Software in C tätig.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.