ARM CrossStudio wywołanie procedury z RAM

Nov 29, 2008 3 Replies

Witam !



Moim celem jest napisanie procedury uruchamianej w pamięci RAM Zadeklarowałem więc procedurę:



int test( unsigned int Address) __attribute__ ((section (".data_run"))) int test( unsigned int Address) { ... }



Nie wiem czy należy to tak robić ale kompilator umieścił ją tak jak chciałem w pamięci RAM.



Z programu umieszczonego w pamięci flash wywołałem tą procedurę:



int l; l=test(0x103ff0);



Jednak nie przekazuje się prawidłowo argument (tzn. przekazuje się zupełnie inna wartość). Jeśli "test" umieszczę jest w pamięci flash to wszystko działa jak trzeba. Jak więc należy zadeklarować i wywołać procedurę z pamięci RAM ?


Paweł


Paweł pisze:

Zamiast gdybać, jak to zrobił twój ulubiony kompilator - po prostu zobacz co wygenerował w asemblerze (obejrzyj listing). Wszystko stanie się jasne.

Co znalazłeś w okolicy wywołania funkcji test?

Wg. informacji w pliku elf: Wywołania funkcji "test" znajdującej się w pamięci ram i pamięci flash są identyczne. Początkowe sekwencje pobierające argumenty tej funkcji umieszczonej w pamięci ram i flash są też takie same.

Używam do debugowania Segger JTAG. Przy pracy krokowej dochodzi się do procedury w test w ramie. Jednak wszystko się zatrzymuje na pierwszej instrukcji tej procedury. Nie bardzo wiem co robię źle.

Paweł

Po umieszczeniu procedury w sekcji .fast wszystko zaczęło działać prawidłowo.

Paweł

Join the Discussion

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

Didn't find your answer?

Ask the community — no account required