der Code von Bernhard wird nicht einfach so übernommen, sondern extra eingearbeitet. Im ersten Schritt wird geändert, dass die ganzen TableObjects ihre Daten im nicht nochmal puffern, sondern die Daten direkt aus dem Flash bzw. aus dem Flashbuffer nutzen. Dabei wird erst mal das alte Interface zur Platform (getEepromBuffer()) genutzt. Einen Buffer im Ram in der Größe eines Eraseblocks (also die Größe die man im Flash auf einmal löschen muss. Das heißt je nach MCU mal Sector, oder Block, oder sonstwie.) braucht man eh. Die Eeprom-Emulationen nehmen davon aktuell (höchstwahrscheinlich) genau einen.
Im nächsten Schritt wird dann die Memory-Klasse so erweitert, dass sie mit Eraseblocks und Flashpages usw. klar kommt. Das ist bei Bernhards Lösung alles in der SamdFlash-Klasse drin. Ich möchte das einmal im Stack drin haben, damit man das nicht für jede Platform neu implementieren muss. Dann gibt es in der Platform etwa:
Code:
virtual size_t flashEraseBlockSize(); // in pages virtual size_t flashPageSize(); // in bytes virtual uint8_t* userFlashStart(); // start of user flash aligned to start of an erase block virtual size_t userFlashSizeEraseBlocks(); // in eraseBlocks virtual void flashErase(uint16_t eraseBlockNum); //relativ to userFlashStart virtual void flashWritePage(uint16_t pageNumber, uint8_t* data); //write a single page to flash (pageNumber relative to userFashStart
Ebenso bin ich mir noch nicht sicher, ob ich Speicher wie EEPROM in der Platform in dem Ram laden will, oder ob die Memory-Klasse das machen soll. (Evtl. eine spezielle Memory-Klasse). Dazu kommt noch, dass bei ESP8266 der Flash z.B. nicht über den Speicherbus sondern per SPI angebunden ist. Da kann der Flash also nicht einfach über einen Zeiger gelesen werden, sonder muss auch byteweise geholt werden. Beim ESP32 ist es genau so, aber man kann den Speicher in den Adressraum mappen.
Dann gibt es auch noch Leute, die gern den Flash aus dem Eeprom initialisieren wollen

Kurz: Ich will das Thema nichtflüchtiger Speicher jetzt einmal richtig anfassen und dann möglichst eine Weile nicht anfassen müssen. Und dafür lasse ich mir auch die nötige Zeit.
VG Thomas




Einen Kommentar schreiben: