ARM CrossStudio wywołanie procedury z RAM

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ł

Reply to
Paweł
Loading thread data ...

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?

Reply to
Adam Dybkowski

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ł

Reply to
Paweł

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

Paweł

Reply to
Paweł

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.