Skocz do zawartości

Łączenie plików źródłowych w AVR ASM


GAndaLF

Pomocna odpowiedź

Zdaję sobie sprawę, że mało kto pisze w asemblerze AVR, tym bardziej złożone projekty. Mi się ten język bardzo podoba i jak tylko mogę to go używam, ale pisanie dużego projektu na kilka kB w jednym pliku to już lekka przesada. Stąd moje pytanie - jak łączyć ze sobą wiele plików źródłowych w jednym projekcie?

Domyślam się, że to coś z .include ale jednak kilka niewiadomych pozostaje. Załóżmy, że dodam w projekcie w AVR studio drugi plik źródłowy, dopiszę include w głównym. Czy mogę wtedy w jakiś sposób używać globalnie zmiennych? Coś w stylu parametrów EXTERN i GLOBAL z C i asemblera na x86. Czy po prostu muszę wtedy nadać tej samej komórce ramu etykiety w obu plikach? Podobne wątpliwości mam co do podprocedur do których odwołuje się za pomocą call. Czy mogę wtedy używać wywołania call do etykiety w innym pliku? Widziałem gdzieś biblioteki z macrami, albo z samymi stałymi tak samo jak w standardowych bibliotekach Atmela, ale co do plików z komendami nie wiem jak to działa.

Poza tym jak wygląda scalanie takiego projektu? Czy dane z dodatkowych plików są po prostu doklejane na końcu pierwszego i procedury do których chce się odwoływać przez komendę CALL muszę napisać bez przydzielania im sprecyzowanej pozycji dyrektywą .ORG. A może Właśnie za pomocą .ORG muszę je tak rozmieścić aby dwa pliki nie odwoływały się do identycznej komórki pamięci?

Generalnie jest to dla mnie niejasne i najlepiej by było zrozumieć na jakiś gotowych przykładach albo solidnym tutorialu. Niestety w internecie mało jest opracowań na AVR ASM. Dlatego każda pomoc będzie dla mnie cenna.

Link do komentarza
Share on other sites

Wydaje mi się, że trzeba to zrobić z poziomu Makefile, tzn jeśli chcesz skompilować wiele źródeł w asemblerze do jednego pliku wynikowego, to musisz te źródła wypisać do pola ASRC, np:

ASRC = $(TARGET).S driver.S motors.S
Link do komentarza
Share on other sites

Tylko, że jak piszę w avr studio to nie generuje mi się makefile. Doczytałem gdzieś na necie, że ten asembler w avr studio nie ma linkera i takie połączenie kodu nie jest możliwe. Poradziłem sobie w ten sposób, że dyrektywę .include dopisuję w odpowiednim miejscu kodu a załączany plik piszę w taki sposób aby był relokowalny. W czasie asemblacji zawartość dodawanego pliku przepisuje się dokładnie w miejscu wywołania dyrektywy include i dopiero po scaleniu w jeden wielki plik następuje zamiana na kod maszynowy. Tak więc można napisać swoje własne szablony i dodawać je do nowych projektów ale trzeba się przygotować na dodawanie do nich małych korekt za każdym razem.

A ten sposób z makefile o którym piszesz jest podobno możliwy w kompilatorze avr-gcc który jak wiadomo pliki w C najpierw zamienia na asemblera a dopiero potem na kod maszynowy. Można więc pisać w asemblerze np na WinAVR i używać właśnie takiego sposobu asemblacji tylko wtedy trzeba zobaczyć jak się zmieniają dyrektywy bo te z appnote atmela wcale nie muszą działać.

Link do komentarza
Share on other sites

Tylko, że jak piszę w avr studio to nie generuje mi się makefile.

AVR Studio jest tylko nakładką na WIN AVR + GCC której zadaniem jest między innymi generowanie za użytkownika, pliku makefile. Sprawdź folder Twojego projektu i znajdziesz w nim prawdopodobnie katalog default, a w nim wygenerowany plik makefile.

Ale jego zmiana nic Ci nie da, ponieważ przy następnej kompilacji ten plik zostanie nadpisany przez nowy utoworzony przez AVR Studio na podstawie opcji które w Studio masz ustawione. W opcjach tych możesz także ustawić zewnętrzny makefile (napisany przez Ciebie) wyłączając w ten sposób tworzenie makefile przez AVR Studio. Ale radzę to robić tylko i wyłącznie gdy masz baaaardzo specyficzny przypadek.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

avr studio nie jest tylko nakładką na win avr-gcc! Przecież avr-gcc to kompilator C a my tu rozmawiamy o asemblerze. Z twojego postu wnioskuje, że nigdy nie asemblowałeś w avrstudio programu bo tworzone są tylko plik hex, mapa przestrzeni adresowej i inne tego typu pliki. Na pewno nie ma tam żadnego makefile.

Owszem jeżeli wybierzesz projekt w C to jest tak jak mówiłeś, ale to nie ma nic wspólnego z omawianym przeze mnie problemem i tylko wprowadza zamęt. Jak już mówiłem udało mi się jakoś rozwiązać problem dodając .include w odpowiednich miejscach kodu, ale być może nie jest to optymalne rozwiązanie.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.