Das Problem mit fixen Arrays ist der limitierende RAM...
Ein 32u4 hat nur 2,5kbyte RAM (ein SAMD immerhin 32kbyte!)
Und alleine um die Daten bzgl. GA+KO und Co. schnell zugreifbar zu haben (wir können nicht zur Laufzeit die Daten aus dem EEPROM lesen, so viel Zeit haben wir nicht), gehen wir nur mal vom "Simple Type" aus (https://wiki.konnekting.de/index.php...01#System_Type), haben wir einen Speicherverbrauch von ca. 512 Bytes wenn man den System Type "ausreizt". Hinzu kommt, was die KOs sonst noch im RAM halten müssen, ein paar Dinge damit die Lib überhaupt arbeiten kann + das was der Entwickler in seinem Sketch braucht. Da bist du - selbst ohne den Sketch - schnell bei 50% RAM Auslastung.
Deshalb versuche ich den RAM Bedarf so gering wie möglich zu halten. Das war auch die Idee hinter der ArrayList.
Aktuell tendiere ich aber dazu für diesen Fall die notwendige Maximalgröße beim Start aus den Daten zu ermitteln und das Array dann damit zu allokieren.
Der µC wird nach jeder Programmieraktion neu gestartet, bevorzugt über einen Watchdog-Timer-Reset, damit alle Register und Co. tatsächlich einen Reset erfahren, und nicht nur der Code von vorne losläuft (wie wir's beim 328P haben implementieren müssen). Echte KNX Geräte verhalten sich auch so. Und das ganze macht auch Sinn.
Ein 32u4 hat nur 2,5kbyte RAM (ein SAMD immerhin 32kbyte!)
Und alleine um die Daten bzgl. GA+KO und Co. schnell zugreifbar zu haben (wir können nicht zur Laufzeit die Daten aus dem EEPROM lesen, so viel Zeit haben wir nicht), gehen wir nur mal vom "Simple Type" aus (https://wiki.konnekting.de/index.php...01#System_Type), haben wir einen Speicherverbrauch von ca. 512 Bytes wenn man den System Type "ausreizt". Hinzu kommt, was die KOs sonst noch im RAM halten müssen, ein paar Dinge damit die Lib überhaupt arbeiten kann + das was der Entwickler in seinem Sketch braucht. Da bist du - selbst ohne den Sketch - schnell bei 50% RAM Auslastung.
Deshalb versuche ich den RAM Bedarf so gering wie möglich zu halten. Das war auch die Idee hinter der ArrayList.
Aktuell tendiere ich aber dazu für diesen Fall die notwendige Maximalgröße beim Start aus den Daten zu ermitteln und das Array dann damit zu allokieren.
Auch ein einmalig dynamisch allokiertes ist OK. (D.h aber nach änderungen von Zuweisungen in der Suite und upload muss MC neu gestartet werden?!)
Kommentar