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



Einen Kommentar schreiben: