T.M.F.
Guest
Thu Sep 07, 2006 8:36 am
Witam!
Mam sobie pare procedur napisanych w assemblerze (glownie procedury
obslugi przerwan).
Natomiast glowna czesc programu napisana jest w C. Pytanie brzmi - jak
polaczyc jedno z drugim?
Wiem, ze mozna przez asm volatile, problem w tym, ze te procedury w asm
sa bardzo dlugie (ok. 2kB kodu), w dodatku optymalnie by bylo, zeby
mozna bylo ten sam plik wykorzystywac do zainkludowania w C i w innych
programach w ASM (to jakby oddzielny modul). Zasadniczo program w C i
procedury w ASM sa zupelnie oddzielne, komunikuja sie razem za pomoca
paru wspolnych zmiennych, nic wiecej. Wiec w sumie wystarczyloby to
tylko w jakis sposob zlinkowac razem, a w C zdefiniowac owe zmienne jako
extern.
Ma ktos moze pomysl jak to zrobic?
Pozdrawiam,
T.M.F.
Greg(G.Kasprowicz)
Guest
Thu Sep 07, 2006 9:33 am
Quote:
Ma ktos moze pomysl jak to zrobic?
tez nad tym myslalem swego czasu - przykakladowe rozwiazanie masz w sofcie
do popularnego YAMPPa
cale biblioteki napisane w asm (CF,usb,MMC) sa wlaczone w kod jako funkcje w
C. Potrzeba oprocz tego zmodyfikowac makefile'a zeby je widzial,
nie wnikalem za bardzo w szczegoly, dziala bez problemu
Marcin Stanisz
Guest
Thu Sep 07, 2006 9:43 am
Dnia Thu, 07 Sep 2006 10:36:48 +0200, T.M.F. napisał(a):
Quote:
paru wspolnych zmiennych, nic wiecej. Wiec w sumie wystarczyloby to
tylko w jakis sposob zlinkowac razem, a w C zdefiniowac owe zmienne jako
extern.
Ma ktos moze pomysl jak to zrobic?
W makefile'u dodajesz:
ASRC = moj_plik_w_asm.S
Robisz plik naglowkowy z deklaracjami extern zmiennych i funkcji. Dołączasz
plik nagłówkowy do pliku C i prawie już.
Ja się uczyłem na przykładzie - biblioteki obsługi i2c autorstwa Petera
Fleury'ego.
Pozdrawiam
Marcin Stanisz
--
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"
T.M.F.
Guest
Fri Sep 08, 2006 7:58 am
Quote:
W makefile'u dodajesz:
ASRC = moj_plik_w_asm.S
Robisz plik naglowkowy z deklaracjami extern zmiennych i funkcji. Dołączasz
plik nagłówkowy do pliku C i prawie już.
Ja się uczyłem na przykładzie - biblioteki obsługi i2c autorstwa Petera
Fleury'ego.
Dzieki za pomoc. Przegladalem ta biblioteke, rzeczywiscie takie laczenie
wydaje sie proste.
Mam tylko jeszcze dwa, mysle, ze proste, pytania:
1. Jesli definiowana jest funkcja z parametrami/zwracajaca wartosc -
skad wiadomo w ktorym rejestrze jest jaki parametr? Domyslam sie, ze to
jest jakos z gory predefiniowane...
2. Jak zdefiniowac handler dla przerwania? extern SIGNAL.... czy moze
raczej to linker powiaze moja procedure z odpowiednim wektorem? Tylko
jak? Na podstawie nazwy?
Dzieki z gory i pozdrawiam,
T.M.F.
Wojtek Kaniewski
Guest
Fri Sep 08, 2006 4:13 pm
T.M.F. napisał(a):
Quote:
Mam tylko jeszcze dwa, mysle, ze proste, pytania:
1. Jesli definiowana jest funkcja z parametrami/zwracajaca wartosc -
skad wiadomo w ktorym rejestrze jest jaki parametr? Domyslam sie, ze to
jest jakos z gory predefiniowane...
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage
Quote:
2. Jak zdefiniowac handler dla przerwania? extern SIGNAL.... czy moze
raczej to linker powiaze moja procedure z odpowiednim wektorem? Tylko
jak? Na podstawie nazwy?
http://www.nongnu.org/avr-libc/user-manual/assembler.html#ass_example
w.