Hallo Leute,
eine Frage an die C Profis
Es geht um die ESP8266, da kann man bestimmte Infos in flash speichern.
Es sind die 4KB Blöcke und laut Doku sollte es uint32 sein.
So ich möchte z.B "ABCD" speichern und beim nächsten mal wieder lesen.
Ich habe hier was dazu geschrieben, an sich funktioniert es auch, aber
ich glaube, dass es kein richtiger Weg ist, wenn ich da etwas mehr habe,
dann wird es umständlich
Alex W. schrieb:> ist, sollte ja genau so gehen oder?
dafür müsste man mal wissen, wie die Parameter von spi_flash_write
definiert sind - hast du ein link auf die Doku?
vermutlich kannst du auch einfach so den String übergeben
Alex W. schrieb:> Vermutung woher "@" Zeichen kommt?
du schreibst sizeof(buf) und liest aber sizeof(int32). Also nur 4
Zeichen.
Also 2 Fehler. Ersten schreibst du das \0 nicht mit raus. Musst dir also
irgendwo merken wie lang der String wirklich ist. Und beim Lesen musst
du halt die länge angeben oder so lange lesen bis \0 kommt (die du aber
vorher auch schreiben musst)
Alex W. schrieb:> Aber eine Frage noch )> beim "os_prinf" bekomme ich als Ergebnis "CO2@", hast du vielleicht eine> Vermutung woher "@" Zeichen kommt?Peter II schrieb:> aber nicht die \0. Darfst also keine Stringfunktionen mit dem buf> aufrufen.
printf mit %s ist auch eine Stringfunktion.
Peter II schrieb:> vermutlich kannst du auch einfach so den String übergeben> spi_flash_write(0x8c000, (uint32_t*)buf, 4));
Nein, das geht nicht besonders gut, weil buf als array of char zwar
genauso 4 Bytes belegt wie ein uint32_t, aber buf ist ohne Alignment.
Wenn die Routine einen uint32_t erwartet, wird sie wohl auch ein
korrektes alignment erwarten.