avr-gcc - co odpowiada za adres pierwszej zmiennej lokalnej ?

Dec 28, 2005 4 Replies

Witam!



Męczę ostatnio gcc naginając go do kompilacji bootloadera. Mam już prawie wszystko za wyjątkiem trywialnej rzeczy:



Co/kto określa adres pierwszei i następnych zmiennych tworzonych lokalnie ?



cos w rodzaju:



{ unsigned char x; x=x+1; }



W tej chwili avr-gcc ładuje mi je od adresu 0x0000 w pamięci ram, co oczywiście jest bez sensu. Zabawa w okreslanie poczatku sekcji .data i .bss niewiele zmienia, dalej zaczyna od 0.



Więc pytania:



a) czy w ogóle dobrze rozumiem problem ? b) gdzie i czym zmienić ten adres ?



Wiem, ze standardowo avr-gcc robi to poprawnie, ale przy pisaniu bootloadera nie mogę miec nic standardowo ...


U¿ytkownik "Sebastian Bialy" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:dotc8j$pqm$ snipped-for-privacy@nemesis.news.tpi.pl...

zmienne lokalne jesli nie sa static to zazwyczaj siedza w rejstrach lub na stosie

i nie da sie przewidzec ich adresu

Sprawy już nie ma: ponieważ przedzieram szlaki z avr-gcc i bootoaderem, to wpadłem w prostacją pułapkę: avr-gcc nie inicjiuje r1 na 0 (tzn u mnie nie inicjuje, bo usunąłem cały kod inicjujący). Musiałem to zrobić ręcznie, i teraz pomyka aż miło. A objawy były takie, jak by sięgał do pamięci ram w zakresie rejestrów. Na szczęście to była moja pomyłka.

Chyba będe musiał te wszystkie przygody opisać gdzieś dla innych robiących bootloadery ;)

U¿ytkownik "Sebastian Bialy" snipped-for-privacy@poczta.onet.pl> napisa³ w wiadomo¶ci news:dous6u$l3t$ snipped-for-privacy@atlantis.news.tpi.pl...

no to Ci przypomne

:-)

Nie trzeba - ja napisałem bootloader chodzący na ATmega128 bez specjalnego szczypania się. Właściwie tylko adres początku jest na końcu Flasha (cały mój bootloader ma około 7 KB) a cała reszta jak w normalnym programie. Standardowe biblioteki libc i c-startup, weszła nawet obsługa printf'a w najmniejszej wersji. AFAIR zapodałem swój plik sterujący linkerem by wszystko wpadło tam gdzie powinno.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required