[gelöst] Problem mit Klasse und struct



  • Hallo zusammen,

    bin noch etwas neu in C und C++ und noch ein bisschen mit dieser Sprache am kämpfen. (Als alter Java, Javascript, PHP Nutzer).

    Zu meinem Problem:

    Ich programmiere mit der Arduino Bibliothek meine ESP8266 Controller und habe mir in C++ eine Bibliothek mit verschiedenen Klassen geschrieben.
    Nun möchte ich auch eine allgemein gültige Funktion hinzufügen, die ein struct in den EEPROM schreibt.

    Vorgegeben ist hierbei eine sehr komfortable Funktionen:

    EEPROM.put( addr, mDaten );
    

    Erwarten tut diese einen Mix aus Varibeln, die ich als struct erstelle.

    Da es sich hierbei natürlich um eine allgemeingültige Api für mich handeln soll, will ich ein individuelles struct erstellen, was ich in der Api nicht vorgebe. Sondern bei einer Funktion initConfig(struct data) übergebe.
    Leider hab ich dazu nicht viel im Netz gefunden und bin deshalb auf eure Hilfe angewiesen.

    Hier nochmal in Code verdeutlicht:

    void MiloEspApi::initConfig(struct daten) {  // <<< so soll ein beliebiges struct übergeben werden
    	_mDaten = daten;	// _mDaten soll hier ein in meiner Api globales struct sein was überschrieben werden muss 
    }
    
    void MiloEspApi::saveConfig() {
    
      int addr=0; //Adresse im EEPROM
      EEPROM.begin(512);
      EEPROM.put( addr, _mDaten );    // Hier wird nun die globale Variabel _mDaten ins EEPROM geschrieben
      delay(200);
      EEPROM.commit();                     
      EEPROM.end();
    }
    

    Problem ist halt, dass der von mir immer ein struct definiert haben will. Aber das möchte ich ja nicht 😞

    Vielen Dank für eure Hilfe

    Euer Milo



  • C und C++ sind zwei verschiedene Sprachen.

    Woher weiß die put-Funktion, wieviele Byte geschrieben werden sollen?



  • Woher weiß die put-Funktion, wieviele Byte geschrieben werden sollen?

    https://www.arduino.cc/en/Reference/EEPROMPut

    https://github.com/d00616/arduino-NVM/blob/master/src/EEPROM.h

    Die Funktion ist vorgegeben aus einer Bibliothek.

    C und C++ sind zwei verschiedene Sprachen.

    Ich dachte immer dieser Arduino vermischt das. Dann wird Arduino wohl komplett C++ sein!



  • Nachdem ich mir die Api mal genauer angeguckt hatte, die ich zuvor gespostet hatte, ist der groschen gefallen.

    <<< Stichwort template >>>

    template <typename T>
    				void saveConfig(T mDaten) {
    					//am einfachsten struct anlegen und nur diesen speichern
    					//Var in struct
    					int addr=0; //Adresse im EEPROM
    					EEPROM.begin(512);
    					EEPROM.put( addr, mDaten );
    					delay(200);
    					EEPROM.commit();                      // unbedingt nötig für ESP8266
    					EEPROM.end();
    				}
    
    				template <typename T>
    				T loadConfig(T mDaten) {
    				  EEPROM.begin(512);
    				  int addr=0; //Adresse im EEPROM
    				  mDaten = EEPROM.get( addr, mDaten );
    				  EEPROM.end();
    
    				  return mDaten;
    
    				}
    

    Damit funktioniert meine Funktion!


Log in to reply