Jak uruchomić załadowany program do RAM w at91SAMSXXX (bez JTaga)

Mar 01, 2006 6 Replies

Witam



Zrobiłem sobie bootloader (uruchamia się po resecie z Flash) ładujący program przez RS do procesora pod adres początku jego SRAM 0x200000 . Moje pytanie jest w jaki sposób powinienem uruchomić ten program w RAM po zakończeniu procedury transferu do RAMu (tak aby poprawnie się zaczął wykonywać program skompilowany pod WinArm z włączonym RUN_MODE=RAM_RUN w makefile - jeden z przykładowych programów typu migające diody) ?



Może ktoś już coś takiego ćwiczył (próba z : 'asm volatile ("mov PC,#0x200000");' niestety nie działa).



Pozdrowienia


Piotr Kędzierski napisał(a):

void (*ptr)(void) = (void*)0x200000; ptr();

Pozdr AK

Niestety nie działa. Musi to być bardziej skomplikowane - główny problem to chyba remap. Muszę jednak sobie zmajstrować JTaga.

Dzięki

Użytkownik "AK" snipped-for-privacy@gazeta.pl napisał w wiadomości news:du7flp$i48$ snipped-for-privacy@inews.gazeta.pl...

Piotr Kędzierski napisał(a):

A mozesz podeslac kod ? U mnie dziala takie cos bez problemu.

Pozdr AK

Piotr Kędzierski napisał(a):

Zdecydowanie warto. Wtedy jest dopiero zabawa z gdb/Insight. :)

A tak poza tym olać remap. Jeżeli w skrypcie linkera ustawisz Flash od

0x100000 a RAM od 0x200000 to remap nie jest potrzebny do niczego. Oczywiście można też przyjąć, że Flash leży od adresu 0 (domyślnie).

Ale co z przerwaniami ?

Piotr Kędzierski napisał(a):

Wektory przerwań leżą na początku pamięci więc tam trzeba umieścić skoki do właściwych funkcji, może to się dziać oczywiście w pamięci Flash. W czym problem? Musisz tylko utworzyć plik asemblerowy z tymi skokami i najlepiej tworzący oddzielną sekcję (np. ".vectors"), a w skrypcie linkera kazać umieścić tą sekcję na początku Flasha, przed sekcjami .text i resztą.

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required