Wpis z mikrobloga

Znów mam programistyczny problem. #programowanie #cpp #arduino

Mam sobie zadeklarowaną tablicę elementów typu FLASHSTRING.

FLASH_STRING_ARRAY(notepad, PSTR("Zero"), PSTR("One"),

PSTR("Two"), PSTR("Three"), PSTR("Four"), PSTR("Five"),

PSTR("Six"), PSTR("Seven"), PSTR("Eight"), PSTR("Nine"));

zadeklarowana jest wewnątrz funkcji void(loop) w jednym z wyrażeń warunkowych. Takich wyrażeń jest kilka, każde zawiera taką tablicę elementów, tylko z różnymi elementami.

W tych samych wyrażeniach w których mam te FLASH
STRINGARRAY mam taką pętlę, która do tej pory (przed zmianą na FLASHSTRING_ARRAY) wysyłała daną linię do globalnego wskaźnika char *notes[30];

for (int i=0;i<28;i++){

notes[i] = notepad[i];

}

Do tej pory operowałem po prostu na obiektach typu char* nazwa[], jednakże jakimś cudem coś przepełnia RAM Arduino - mam do dyspozycji tylko 2KB, dlatego tych char* [] nie mogłem wyrzucić jako zmienne globalne.

Nie zmienia to faktu, że po wrzuceniu tych elementów do instrukcji warunkowych (wykonujących się po naciśnięciu określonego klawisza) problem występuje nadal. Stąd moja chęć zmiany na obiekty typu FLASHSTRINGARRAY.

W tej samej funkcji, lecz w innym wyrażeniu warunkowym mam funkcje odpowiadające za przewijanie tablicy stringów na ekranie:

http://wklej.se/ead2

Jak widać, przy wyborze linii odwołuję się do wskaźnika. Niestety teraz już nie mogę tak zrobić, gdyż korzystam z tego FLASHSTRINGARRAY zamiast zwykłego stringa.

Czy ktoś ma pomysł jak rozwiązać mój problem?

wołam @almafater i @Marmite - macie pojęcie o programowaniu, byłoby miło gdybyście zerknęli na problem.
  • 5
  • Odpowiedz
@vifon_pikantny: Zasadniczo nie wiem do czego zmierzasz.

Odczyt danych z flasha trochę się różni od odczytu danych z SRAM i zasadniczo nie masz do tych danych bezpośrednio dostępu. Jeśli chcesz mieć we flashu napisy deklarujesz je globalnie i wystarczy ci jeden wskaźnik do wszystkiego.
  • Odpowiedz