AVR: Laczenie programow napisanych w C i assemblerze

Sep 07, 2006 4 Replies

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.


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:

  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.

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