RTV forum PL | NewsGroups PL

Jak poprawnie wywołać procedurę z RAM w ARM CrossStudio i przekazać argumenty?

ARM CrossStudio wywołanie procedury z RAM

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie wywołać procedurę z RAM w ARM CrossStudio i przekazać argumenty?

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ł

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie wywołać procedurę z RAM w ARM CrossStudio i przekazać argumenty?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map