Witam,
Za namową Kolegów zmieniłem podejście do umieszczania danych w pamięci Flash i zamiast makr pgm_read_xxx i atrybutu PROGMEM zacząłem stosować __memx, które jest wygodne zwłaszcza, gdy przekraczamy barierę 64kB. Zadeklarowałem tablicę, jak niżej:
i prostą, przykładową funkcję, jak niżej:
W wyniku kompilacji kompilator wygenerował dość pokaźny kod wynikowy (Os), gdzie, ku mojemu zaskoczeniu, odkładane są rejestry, jak dla funkcji obsługi przerwań:
W momencie, gdy nieco bardziej rozbuduję powyższą funkcję (np. wywołuję w jej ciele inne, bardzo proste funkcje) tych rejestrów odkładanych jest nawet kilkanaście. To dość wysoka cena wykorzystania __memx. Czy to normalne? robiw
Za namową Kolegów zmieniłem podejście do umieszczania danych w pamięci Flash i zamiast makr pgm_read_xxx i atrybutu PROGMEM zacząłem stosować __memx, które jest wygodne zwłaszcza, gdy przekraczamy barierę 64kB. Zadeklarowałem tablicę, jak niżej:
Kod: C / C++
i prostą, przykładową funkcję, jak niżej:
Kod: C / C++
W wyniku kompilacji kompilator wygenerował dość pokaźny kod wynikowy (Os), gdzie, ku mojemu zaskoczeniu, odkładane są rejestry, jak dla funkcji obsługi przerwań:
Kod: AVR assembler
W momencie, gdy nieco bardziej rozbuduję powyższą funkcję (np. wywołuję w jej ciele inne, bardzo proste funkcje) tych rejestrów odkładanych jest nawet kilkanaście. To dość wysoka cena wykorzystania __memx. Czy to normalne? robiw
