Paweł
Guest
Sat Nov 29, 2008 9:20 pm
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ł
Adam Dybkowski
Guest
Sat Nov 29, 2008 10:18 pm
Paweł pisze:
Quote:
Moim celem jest napisanie procedury uruchamianej w pamięci RAM
Zadeklarowałem więc procedurę:
int test( unsigned int Address) __attribute__ ((section (".data_run")))
[...]
Quote:
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 ?
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?
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Paweł
Guest
Sat Nov 29, 2008 11:16 pm
Quote:
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ł
Paweł
Guest
Sat Nov 29, 2008 11:46 pm
Quote:
Nie bardzo wiem co robię źle.
Po umieszczeniu procedury w sekcji .fast wszystko zaczęło działać
prawidłowo.
Paweł