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

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 ...

Reply to
Sebastian Bialy
Loading thread data ...

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 ;)

Reply to
Sebastian Bialy

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.

Reply to
Adam Dybkowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.