Singleton vs. globale Klasseninstanz vs. Funktionen



  • Ich habe einen Microcontroller. Die Ansteuerung der Pins (GPIOs, I²C, ADC/DAC, etc ...) soll gekapselt werden.

    Aktuell gehe ich so vor, dass ich alles in normale Funktionen packe. Dennoch sehe ich oft, dass solche Dinge auch in Klassen gekapselt werden. Ich frage mich jedoch, wieso?

    Die Hardwareschnittstelle wird sich nicht ändern, und ich hab auch nichts davon einen Pin mehrmals zu instanzieren. Gibt es einen wesentlichen Grund warum man das trotzdem machen sollte/kann?



  • Die Frage ist nicht nur komisch, sondern so abstrakt, dass man sie nicht beantworten kann.



  • Die Frage ist nicht nur komisch, sondern so abstrakt, dass man sie nicht beantworten kann.

    Du übertreibst.
    Außerdem liegt das nur daran, dass der Threadersteller nicht weiß was er will ^^ (EDIT: Bzw das ist genau die Frage). Er braucht IMHO keine Singletons, bzw das wäre unnötiger code auf dem µC.
    Alles mit Funktionen zu machen ist eine Option, aber das geht schöner IMHO.

    Beispiele, aus meinen eigenen wrappern:

    für Bin. IO

    OutputPin <PORTB, DDRB, 2> led; // initialisiert pin
    led.set();
    led.unset();
    led.toggle();
    

    UART:

    UART u = UART(9600 /*baud*/);
    u.put('c');
    u.print("hello");
    u.sendHex('c');
    

    Analog:

    using analogIn = Pin <PORTB, DDRB, 2>;
    AnalogInput <analogIn> analog; // initialisiert adc
    analog.getValue()
    

    Finde ich persönlich viel schöner zu benutzen als puren C Kram.
    EDIT: Ich habe auch darauf geachtet dass es frei von Overhead bleibt. Der code wird ins Minimum runterkompiliert. Das ist kein Argument.



  • Dazu kommt mir gerade folgender Beitrag in den Sinn:
    https://www.youtube.com/watch?v=TYqbgvHfxjM



  • theta schrieb:

    Dazu kommt mir gerade folgender Beitrag in den Sinn:
    https://www.youtube.com/watch?v=TYqbgvHfxjM

    cooler Vortrag 👍



  • Ich habe auf dem AVR eigentlich immer Sorge, ob C++ nicht ein zu großer Overhead ist. Wenn überhaupt, dann würd ich tatsache statics nehmen. Aber eigentlich sind einfache Funktionen eher ausreichend..


Log in to reply