_LM_ Napisano Lipiec 14, 2021 Udostępnij Napisano Lipiec 14, 2021 O ile wydrukowanie stringu z flasch jest dla mnie oczywiste proste i zrozumiałe Serial.print(F("test")); to nie bardzo wiem jak tego makra(PGMP) użyć w funkcjach z końcówką _P np jak zapisać wersję tego: strcmp("Audyt N. 7 ",s) Tak aby string "Audyt N. 7 " był pobierany bezpośrednio z flasch? np: gdy próbuję zapisać (to jest cały warunek) if((lineMem == 0) && (0 == strcmp_P("Audyt N. 7 ",s))) Kompilacja przebiega prawidłowo jednak zajętość RAM nie zmienia się, a chyba powinna być pomniejszona o ilość znaków napisu Audyt..... ? Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 14, 2021 Udostępnij Lipiec 14, 2021 9 minut temu, _LM_ napisał: Kompilacja przebiega prawidłowo jednak zajętość RAM nie zmienia się A niby dlaczego miałaby się zmienić? W końcu nikt nie powiedział kompilatorowi, że "Audyt cośtam" ma siedzieć we flashu a nie w RAM-ie. Może gdybyś powiedział to by coś zmieniło... np. używając PSTR, czyli coś w stylu: strcmp_P(PSTR("Audyt N. 7 "),s) Sprawdź. Aha, mam nadzieję że to jakaś ATmega a nie np. ESP32, bo tam stałe typu const char * zawsze siedzą we flashu (ogólnie wszelkie tablice const), a funkcje typu pgm_read_cośtam są niepotrzebne. 1 Link do komentarza Share on other sites More sharing options...
_LM_ Lipiec 14, 2021 Autor tematu Udostępnij Lipiec 14, 2021 8 minut temu, ethanak napisał: Aha, mam nadzieję że to jakaś ATmega a nie np. ESP32, bo tam stałe typu const char * zawsze siedzą we flashu (ogólnie wszelkie tablice const), a funkcje typu pgm_read_cośtam są niepotrzebne. No właśnie esp8266, w avr mam to z grubsza opanowane 🙂 10 minut temu, ethanak napisał: ESP32, bo tam stałe typu const char * zawsze siedzą we flashu (ogólnie wszelkie tablice const), a funkcje typu pgm_read_cośtam są niepotrzebne. No i to jest informacja której mi było trzeba. Dzięki! Link do komentarza Share on other sites More sharing options...
Zealota Lipiec 14, 2021 Udostępnij Lipiec 14, 2021 "Jak korzystać z progmem?" Nie korzystać. Używać "__flash", odpadnie stosowanie protez w postaci "pgm_read_block" i pisać "normalnie", będzie w przyszłości łatwiej portować kod z Atmega na inne platformy. 1 Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
_LM_ Lipiec 14, 2021 Autor tematu Udostępnij Lipiec 14, 2021 (edytowany) Rozumiem, zostawiam gdyby ktoś nie wiedział co ten __flash robi w AVR http://avr8bit.cba.pl/?doc=avr_flash_data W kwestii pisania programu pod esp, rozumiem że wszelkie rozwinięcia funkcji z końcówką _P nie są potrzebne. W sumie nie wiem czy to pytanie czy stwierdzenie. Edytowano Lipiec 14, 2021 przez _LM_ Link do komentarza Share on other sites More sharing options...
Zealota Lipiec 14, 2021 Udostępnij Lipiec 14, 2021 10 minut temu, _LM_ napisał: wszelkie rozwinięcia funkcji z końcówką _P nie są potrzebne Tak, nie będzie potrzebne. Przy portowaniu na STM32, czy ESP32 można "wsadowo" usunąć w projekcie wszystkie wpisy "__flash" lub jeśli ma to być wieloplatformowy projekt to wystarczy zdefiniować globalną, pustą etykietę "#define __flash" i resztę załatwi preprocesor. 1 Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 14, 2021 Udostępnij Lipiec 14, 2021 W ogóle z tym portowaniem to bym uważał. W Arduino dla ESP8266 istnieje PROGMEM (o ile pamiętam zdefiniowany jako pusty czy jakoś podobnie) i funkcje pgm_read_<cośtam>. Portowałem swój dość prosty programik z Arduino na ESP8266... no i zonk: program się wywalał na czytaniu bitmap w Adafruit GFX. Po bliższych badaniach okazało się, że: dla ATmegi pgm_read_word to po prostu odczytanie po kolei dwóch bajtów z flasha; dla ESP8266 pgm_read_word wygląda mniej więcej tak: uint16_t pgm_read_word(uint32_t addr) { return *((uint16_t *)addr; } Niestety - taka funkcja wymaga, aby adres był parzysty, a w Adafruitowych bitmapach nie było to zachowane... Tak że trzeba liczyć się z dziwnymi błędami, które na ośmiobitowcach nie występują. No i tak jak pisałem wcześniej: jeśli nie przewidujesz uruchamiania swojego arcydzieła na ATmegach, olewasz flashe, pgmready, progmemy i piszesz zgodnie ze sztuką 🙂 Link do komentarza Share on other sites More sharing options...
_LM_ Lipiec 14, 2021 Autor tematu Udostępnij Lipiec 14, 2021 Tego dzieła 😉 akurat nie da rady portować, chyba że powstaną AVRy z wbudowaną obsługą wifi i innymi z tym związanymi ficzerami. A w drugą stronę? W jeśli miałbym jakiś wielki projekt przepisać (heh tak jakbym robił jakieś wielkie projekty) to sądzę że szybciej byłoby użyć choćby takiego esp 01 w trybie AT a dla AVR dopisać te kilka linijek obsługi AT Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »