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.
AVR: Laczenie programow napisanych w C i assemblerze
Sep 07, 2006
4 Replies
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
Dnia Thu, 07 Sep 2006 10:36:48 +0200, T.M.F. napisał(a):
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
Dzieki za pomoc. Przegladalem ta biblioteke, rzeczywiscie takie laczenie wydaje sie proste. Mam tylko jeszcze dwa, mysle, ze proste, pytania:
- 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...
- 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.
T.M.F. napisał(a):
formatting link
formatting link
w.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required