-
Data: 2009-01-27 15:36:45
Temat: Re: Czy WinAVR radzi sobie z kodem dla ATMega128?
Od: "T.M.F." <t...@n...mp.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dariusz Zolna pisze:
> Adam Dybkowski pisze:
>> No to pozostaje korzystać z pgm_read_byte_far() i podobnych. Uważaj
>> też na funkcje typu strcpy_P, printf_P, memcpy_P itd - nie zadziałają
>> bo trzeba im podać wskaźniki 16- a nie 32-bitowe. Podobnie bez
>> dodatkowego "obejścia" nie zadziałają wskaźniki na funkcje, używane
>> np. w tablicach skoków. Ot taka "zaleta" dużej pamięci w procku bądź
>> co bądź 8/16-bitowym. Przerabiałem to ostatnio w zdwojonej formie
>> walcząc z jeszcze większym ATmega2561.
>
> Tak, już napisałem swoje wersje tych wszystkich funkcji (przynajmniej
> tych, które używam). Szkoda tylko, że kompilator nie przypomina o tym.
Nie ma jak. Zobacz jak wyglada definicja tych funkcji. Jedyna mozliwosc
to wywalanie ostrzezenia przez sama biblioteke przy wywolywaniu ich na
procesorach z >64kB FLASH. Co zreszta ma maly sens, bo gcc domyslnie
umieszcza stale na poczatku programu, czyli dopoki one nie przekrocza
64kB korzystanie z wersji near tych funkcji jest zupelnie ok. Z kolei
wersje far sa bezpieczne (chociaz nie wiem czy dzialaja na procesorach
do 64kB FLASH), ale czasochlonniejsze i FLASHochlonniejsze.
Natomiast jesli korzystales z wersji near, a wskaznik miales
zadeklarowany prawidlowo jako 32-bitowy to kompilator musial wywalic
ostrzezenie (chyba, ze je blokujesz). Tak czy siak, winny byles ty :)
> A właśnie, jak zrobić wskaźniki do funkcji w tablicach? Wprawdzie teraz
> nie korzystam z tego, ale może się przydać na przyszłość. Dla wskaźników
> w parametrach funkcji mam zrobione makro (choć też troche upierdliwe w
> użyciu, bo stringi muszę teraz mieć ponazywane, a nie umieszczone jako
> PSTR("...") bezpośrednio w wywołaniu funkcji).
Np. tak:
const FuncPtr FuncPtrTable[] PROGMEM=
{f1, f2, f3};
I wywolanie:
FPtr=(FuncPtr)pgm_read_word(&FuncPtrTable[funcno]);
*FPtr();
BTW. A propos twojego bootloadera. Piszesz, ze jest strasznie dlugi.
Wiesz, ze w tej sekcji musi byc tylko maly fragment wykonujacy SPM,
raptem pare bajtow, cala reszta moze byc w normalnej pamieci, co
ogranicza rozmiar bootloadera.
Najnowsze wątki z tej grupy
- Jak shakować windę
- Sterowanie bezprzewodowe do wbudowania
- NC vs NO
- Jak dzięki mojemu pomysłowi amerykańce z Google przyspieszyli TV
- Jak dzięki mojemu pomysłowi amerykańce z Google przyspieszyli TV
- Żyrandol w wersji ze ściemnianiem.
- Napięcie w gniazdku na wszystkich żyłach po wyłączeniu bezpieczników - zgłaszać do elektrowni?
- Elektryczna łapka i szerszeń
- moduł dtmf
- 0.5V
- Odbiór SDR na mikrokontrolerach
- Taki uziom....
- Nałożnica?
- ładowanie akku
- Mikrofala
Najnowsze wątki
- 2024-09-11 Android 11, jak odzyskać zdjęcie z kosza?
- 2024-09-11 Czy turbiny muszą "mielić" ptaki? ;-)
- 2024-09-11 ogłoszenie widziałem na słupie WN
- 2024-09-12 Gdańsk => Technical Lead ( (Java Background)) <=
- 2024-09-11 MĂźnchen => Projektant/Expert PHP Laravel (e-commerce) <=
- 2024-09-11 Warszawa => Key Account Manager (Usługi HR) <=
- 2024-09-11 Wrocław => Key Account Manager <=
- 2024-09-11 Warszawa => Specjalista ds. marketingu rekrutacyjnego <=
- 2024-09-11 Wrocław => Key Account Manager <=
- 2024-09-11 Mińsk Mazowiecki => Spedytor Międzynarodowy <=
- 2024-09-11 Białystok => Senior Developer React Native <=
- 2024-09-11 Kraków => Java Full Stack Developer (Angular/React) <=
- 2024-09-11 Warszawa => Spedytor międzynarodowy <=
- 2024-09-11 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-09-11 Warszawa => SEO Specialist (15-20h tygodniowo) <=