RTV forum PL | NewsGroups PL

Jak efektywnie zlinkować procedury assemblerowe z kodem C w projektach AVR?

AVR: Laczenie programow napisanych w C i assemblerze

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak efektywnie zlinkować procedury assemblerowe z kodem C w projektach AVR?

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.

elektroda NewsGroups Forum Index - Elektronika Polska - Jak efektywnie zlinkować procedury assemblerowe z kodem C w projektach AVR?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map