Eksperymentuję obecnie z zewnętrzną pamięcią flash na SPI (AT45DB161D). Zapisuję w niej większą ilość danych, które są następnie odczytywane bajt po bajcie. Używam dwóch zmiennych pomocniczych typu uint16_t do oznaczenia ostatniej strony zawierającej dane i ostatniego bajtu w tej stronie, aby po zakończeniu cyklu odczytu program wracał do początku i nie czytał śmieci znajdujących się dalej. Wartość tych zmiennych jest ustalana w procedurze zapisywania danych do pamięci.
Oczywiście wszystko działa do czasu pierwszego resetu, ale potem wartość tych zmiennych się resetuje i wypadałoby je przechowywać w jakiejś pamięci nieulotnej. Postanowiłem wykorzystać do tego ostatnią stronę pamięci flash.
Poza zakończeniu zapisywania danych do pamięci wykonuję następujący kod:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jak już mówiłem - w tym momencie program działa prawidłowo, opierając się na wartościach zmiennych last_page i last_page_ptr.
Po resecie wykonywany jest następujący fragment kodu, w ramach inicjacji programu.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pomimo tego program czyta danej dalej, pomijając granicę wyznaczaną przez te zmienne.
Gdzie popełniłem błąd?