Klassen für Hardware-Resourcen - alles static oder was?



  • Ich muss ein (C++) Programm für ein embedded System schreiben.
    Die Hardware-Rsourcen (Display, Controller, Touch, ...) sind ja nur einmal vorhanden, es darf also immer nur genau eine Instanz geben, die den Zugriff darauf hat.
    Mit weiteren Klassen möchte ich möglichst einfach auf die Hardware-Klassen zugreifen können.
    Außerdem wäre es gut, wenn so viel wie möglich davon im Programmspeicher und nicht auf dem Heap oder im Stack liegt.
    Was ist da am Besten?
    Alles static, anonyme Klassen, oder eine übergeordnete Systemklasse die die Hardware-Klassen als Member hat, oder geht das ganz anders?
    😕
    Ich bin mir über die Vor- und Nachteile der einzelnen Lösungen nicht so ganz im klaren.
    Tipps dazu wären super, denn ich bin noch am Anfang des Projektes - nachträgliche Änderungen sind oft sehr schwierig.



  • wenn es immer nur eine Instanz einer Klasse geben darf, dann kommt eigentlich immer das Singleton-Pattern in Frage. Vielleicht setzt du das ein. alles static ist nicht gut, weil du die initialisierungsreihenfolge der statischen member nicht bestimmen kannst.



  • Warum überhaupt Klassen dafür? Was brauchst du an Statusinformationen, dass du freie Funktionen ausschließt?



  • Maxi schrieb:

    wenn es immer nur eine Instanz einer Klasse geben darf, dann kommt eigentlich immer das Singleton-Pattern in Frage. Vielleicht setzt du das ein. alles static ist nicht gut, weil du die initialisierungsreihenfolge der statischen member nicht bestimmen kannst.

    Danke für den Hinweis.
    Nachdem ich mir das Singleton-Pattern angeschaut habe, weis ich jetzt mehr über die Nachteile bescheid. Durch den private-Konstruktor ist meine Überlegung die Hardware-Initialisierung durch den Konstruktor zu machen, hinfällig.
    Aber da diese Initialisierung ja nur einmal im Programm durchgeführt werden muss, ist es ja kein Aufwand eine Init-Routine aufzurufen.



  • Ehm, warum hinfällig? Der Konstruktor wird doch trotzdem aufgerufen und somit ist darin auch eine init möglich. Der private Konstruktor wird halt von der statischen Memeber "aufgerufen".



  • .filmor schrieb:

    Warum überhaupt Klassen dafür? Was brauchst du an Statusinformationen, dass du freie Funktionen ausschließt?

    Vielen Dank für deinen Einwand.
    Z.B. für den Microcontroller möchte ich einige Status-Variablen, da die Werte in der Hardware nur als verschachtelte Bitmuster vorliegen und deshalb nur umständlich auszulesen sind. Auf diese Status-Variablen sollte kein direkter (Schreib-)Zugriff möglich sein.
    Für andere Hardware-Teile werde ich mir jeweils überlegen, ob ich einen Status wirklich brauche.



  • BarnieGeroellheimer schrieb:

    Ehm, warum hinfällig? Der Konstruktor wird doch trotzdem aufgerufen und somit ist darin auch eine init möglich. Der private Konstruktor wird halt von der statischen Memeber "aufgerufen".

    Uups - du hast recht, daran habe ich nicht gedacht.



  • Für welchen µC soll denn das ganze sein?? ARM, AVR, PIC ???

    grüüße



  • zeusosc schrieb:

    Für welchen µC soll denn das ganze sein?? ARM, AVR, PIC ???

    grüüße

    Leider weder-noch: Für einen NEC V850ES-Controller
    und (noch mehr leider) IAR-Compiler.

    Grüße


Anmelden zum Antworten