STRINGI z FLASH'a - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Magazynowanie (https://forum.arduinopolska.pl/dzial-magazynowanie) +--- Wątek: STRINGI z FLASH'a (/watek-stringi-z-flash-a) |
STRINGI z FLASH'a - ANT - 01-11-2016 Witam, Napisałem spory program do obsługi GSM'a. Wysyłam z telefonu SMS'ami polecenia, a Arduino coś tam wykonuje i mi równiez SMS'em odpowiada. Wykorzystuję dosyć sporo tekstów zapisanych w STRING'ach, które są przechowywane w pamięci operacyjnej SRAM (2kB). Chciałbym zapisać te teksty do pamięci FLASH (32kB), i stamtąd je odczytywać w programie. Macie jakieś sprawdzone metody? Pozdr. RE: STRINGI z FLASH'a - namok - 02-11-2016 Przecież wszystko masz ładnie opisane: https://www.arduino.cc/en/Reference/PROGMEM RE: STRINGI z FLASH'a - ANT - 08-11-2016 Dziękuję 'namok' za naprowadzenie... Dla potomnych przedstawiam krótki kod w którym chyba wszystko jest już jasne. Dzięki niemu zrozumiałem jak zrobić aby STRINGI nie zajmowały już pamięci SRAM, a zostały zapisane w pamięci FLASH. Pozdr. Kod: // ------------------------ RE: STRINGI z FLASH'a - przemo.bundy - 16-03-2019 Witam serdecznie. wiem ze post jest stary. ale podepne sie pod niego. bo mam podobny problem. moze ktos pomoze. szukam sposobu zeby stringi z "progmem" byly wywolywane w bardziej ludzki sposob. niz to co jest wyzej. chcialbym wywolywac te stringi z pamieci za pomoca nazw ktore mogly by byc takie same lub podobne w znaczeniu. aby przegladajac listing programu widziec jaki napis bedzie wywolany. z gory dziekuje za podpowiedzi. RE: STRINGI z FLASH'a - Robson Kerman - 16-03-2019 Jeśli umieścisz zmienne we FLASH'u, musisz się do nich odwoływać w specjalny sposób. Trzeba kopiować poszczególne komórki pamięci do bufora w RAM. Ja to robię w bardzo podobny sposób jak wyżej. Tylko, że mój sposób jest szybszy i wygodniejszy. Deklarujemy sobie tablicę we FLASH'u. Kod: const char tekst[] PROGMEM = "Jakis tekst"; Jak nie wszyscy wiedzą, każdy element takiej tablicy jest wskaźnikiem do przestrzeni, gdzie przechowywane są znaki. To nie umieści tekstu w FLASH'u, a jedynie samą tablicę wskaźników. Teraz należy umieścić sam tekst w FLASH'u. Ja to robię tak: Kod: PGM_P const p_tekst[] PROGMEM = {tekst}; Jak chcę pobrać łańcuch znaków z FLASH'a do bufora w RAM'ie, na początku deklaruję bufor. Kod: char bufor[8]; I teraz trzeba przekopiować naszą tablicę z FLASH'a do bufora w RAM. Kod: strcpy_P(bufor,(PGM_P) pgm_read_word(&(p_tekst[0]))); I mamy normalnego Stringa z którym możemy zrobić co tam chcemy. Na przykład wyświetlić na LCD. Jeśli masz więcej stringów, to muszisz każdy zadeklarować oddzielnie. Kod: const char tekst1[] PROGMEM = "Jakis tekst1"; A następnie skopiować do tablicy: Kod: PGM_P const p_tekst[] PROGMEM = Jak chcesz odczytać konkretny tekst do bufora, to w makrze Kod: strcpy_P(bufor,(PGM_P) pgm_read_word(&(p_tekst[0]))); piszesz numer tablicy, która Cię interesuje, p_tekst[2], p_tekst[5] itd. "Bardziej ludzkiej " metody nie ma. Nie ma też sensu odczytywanie wszystkich tablic na raz: Kod: char bufor[5][8]; Ameryki tym tekstem nie odkryłem. Zapraszam do zapoznania się z manualem avr-libc na stronie http://www.nongnu.org/avr-libc/user-manual/pages.html A w szczególności z rozdziałem Data in Program Space RE: STRINGI z FLASH'a - przemo.bundy - 17-03-2019 dzieki za konkretna odpowiedz. pozdrawiam. |