Hi Thomas et al,
dadurch, dass ich auf dem SAMD immer an die RAM-Grenzen komme, schaue ich mir ab und zu verschiedene Sachen an, derzeit eben GroupObject. Ich hab mal den Speicherverbrauch von einem KO angeschaut (Bytes in Klammern):
Das wären 20 Bytes für ein KO an Verwaltungsdaten (ohne Nutzdaten), und da ein DPT auch noch 6 Byte groß ist und pro KO eine Instanz erzeugt wird, sind es sogar 26 Bytes, denke ich zumindest (ich bin nicht so fit in C/C++, korrigiert mich bitte, wenn ich hier falsch liege). Bei 256 KO sind das alleine schon 6656 Byte... das ist schon was.
Könnte man nicht GroupObjectTableObject _table = 0; zu einer Klassenvariablen machen? Schließlich sind alle KO definitiv in der selben Table drin. Ich würde dann in meiner Logik nur noch für unterschiedliche DPT eine Instanz erzeugen (Factory) und so mit wenigen DPT-Instanzen auskommen. Das sind dann für die meisten KO schon 10 Byte ersparnis, man hätte dann nur 256 * 16 + n * 6 = 4096 + 6n (n ist die Anzahl unterschiedlicher DPT), also rund 2.5k gespart, was immerhin rund 7% des verfügbaren RAM ausmacht.
Liege ich da komplett falsch oder ist der Gedanke gar nicht soooo blöd? Ich sage auch nicht, dass Du das machen sollst, ich würde mal wieder - bevor ich so was anfange - gerne die Sinn-Frage stellen
.
Gruß, Waldemar
dadurch, dass ich auf dem SAMD immer an die RAM-Grenzen komme, schaue ich mir ab und zu verschiedene Sachen an, derzeit eben GroupObject. Ich hab mal den Speicherverbrauch von einem KO angeschaut (Bytes in Klammern):
Code:
size_t asapValueSize(uint8_t code); (4) GroupObjectUpdatedHandler _updateHandler; size_t goSize(); (2) uint16_t _asap = 0; (1) ComFlag _commFlag = Ok; (4) uint8_t* _data = 0; (1) uint8_t _dataLength = 0; (4) GroupObjectTableObject* _table = 0; (4) Dpt _datapointType;
Könnte man nicht GroupObjectTableObject _table = 0; zu einer Klassenvariablen machen? Schließlich sind alle KO definitiv in der selben Table drin. Ich würde dann in meiner Logik nur noch für unterschiedliche DPT eine Instanz erzeugen (Factory) und so mit wenigen DPT-Instanzen auskommen. Das sind dann für die meisten KO schon 10 Byte ersparnis, man hätte dann nur 256 * 16 + n * 6 = 4096 + 6n (n ist die Anzahl unterschiedlicher DPT), also rund 2.5k gespart, was immerhin rund 7% des verfügbaren RAM ausmacht.
Liege ich da komplett falsch oder ist der Gedanke gar nicht soooo blöd? Ich sage auch nicht, dass Du das machen sollst, ich würde mal wieder - bevor ich so was anfange - gerne die Sinn-Frage stellen

Gruß, Waldemar
Kommentar