-
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
- zasieg radaru
- Zmywarka Bosch SRV55T43EU - awaria
- Kod zniżkowy w TME do 26.09.2025
- SFP, 10G, simplex sc/apc
- [słabe wiatry powodują - przyp. JMJ] Energetyczny paraliż w Niemczech
- NxtPaper
- Programiści nie przestają zadziwiać świat
- Długi kabel zasilający a na końcu procek
- Dlaczego nam nie idzie
- Co czujnik to inna temperatura
- Jak naprawić pilota
- Dlaczego TMP wer. 2.0 nie może być sprzedawany jako patyk USB lub karta PCIe 1x?!?
- produkcja w UE
- Pamięć SRAM nie działa z Z80182
- plyta indukcyjna - naprawa
Najnowsze wątki
- 2025-09-20 W Play chciałem kupić Huawei -- jako swój pierwszy smartfon...
- 2025-09-20 W Play chciałem kupić Huawei -- jako swój pierwszy smartfon...
- 2025-09-20 Kopiowanie telefonu
- 2025-09-20 Warszawa => AWS Cloud Engineer <=
- 2025-09-20 Łódź => Regular Network Engineer <=
- 2025-09-20 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-09-20 wrzesień
- 2025-09-20 Łomiarz wychodzi w marcu
- 2025-09-19 Czeladź => Specjalista ds. public relations <=
- 2025-09-19 Warszawa => International Freight Forwarder <=
- 2025-09-19 Warszawa => DevOps Engineer <=
- 2025-09-19 zasieg radaru
- 2025-09-19 JAK nie formułować sprzeciwów w kwestii Strefy w Gazie [Niemcy: Hasło rodem z III Rzeszy]
- 2025-09-19 Zmywarka Bosch SRV55T43EU - awaria
- 2025-09-18 Kuczyński twierdzi że WIBOR nie jest do ruszenia w sądach