Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 12:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 29 kwi 2018, o 19:38 
Offline
Nowy

Dołączył(a): 07 mar 2018
Posty: 1
Pomógł: 0

Witam wszystkich forumowiczy zainteresowanych tematem 8-bitowych mikrokontrolerów AVR w moim poradniku!!

Na początku parę słów na temat przyczyny oraz celu, jaki skłoniła mnie do napisania poradnika. (Niezainteresowanych proszę o przejście od razu do sekcji "Zaczynajmy".) Chciałbym zaznaczyć, że nie mam na celu dyskutować nad wyższością, czy porównywać jakiekolwiek środowiska do programowania AVR-ów! Sama przyczyna jest dość prosta, zwyczajnie miałem potrzebę zaimportowania swoich projektów do nowego środowiska. Oczywiście można skorzystać z eclipse, jednak problem jest z symulatorem. W tym wątku opisane jest jak podpiąć debugger sprzętowy oraz simulavr do eclipse, jednak przydatność samego symulatora z pakiety WinAVR jest prawie zerowa. Miałem dłuższą przerwę w kontakcie z uC, a swoje projekty tworzyłem głownie przy użyciu toolchain WinAVR. Korzystałem też z symulatora w AVR Studio 4, który w tamtych czasach bardzo mi się podobał. Jakiś czas temu pojawił się potrzeba szybkiego napisania programu do chińskiego urządzane celem poprawienia jego funkcjonalności, aby nie tracić czasu na adaptacje i przenoszenie moich bibliotek do nowego środowiska postanowiłem wykorzystać to, co dobrze znam. Oczywiście klepanie programów w Programmers Notepad nie jest zbyt wygodne, zwłaszcza w porównaniu z tym, co oferują współczesne platformy. Nie jestem zwolennikiem posiadania kilku środowisk i przeskakiwaniu między nimi, a symulator może być bardzo przydatny, dlatego postanowiłem znaleźć sposób na przeniesienie projektów bezpośrednio do najnowszego Atmel Studio. Mogą się tutaj pojawić opinie, że łatwiej było by przenieść sam kod do nowego projektów. Niestety nie jest to takie proste, pomijając nawet kłopoty przy ponownej kompilacji. Jeszcze większe schody pojawiają się, gdy korzysta się z rozbudowanego pliku makefile, gdzie w zależności od jednego z parametrów, dokonuje się kompilacji warunkowej aby wygenerować wsad dla odpowiedniego urządzenia. Więcej na ten temat poniżej.

Toolchain WinAVR i makefile

Jak powszechnie wiadomo w pliku makefile znajdują się instrukcje dla programu meke decydujące o sposobie i przebiegu kompilacji. W platformach jak Atmel Studio generowany jest on automatycznie, a jego struktura wynika z konfiguracji jakiej dokonujemy podczas tworzenia nowego projektu. Natomiast w toolchain WinAVR mamy program o nazwie MFile, który pozwala nam na generowanie takiego pliku, gdzie możemy go później dowolnie modyfikować.

Obrazek

Za pomocą odpowiednie opcji wybieramy nazwę pliku z programem, typ uC, częstotliwość taktowania, rodzaju programatora itd. Tak wygenerowany plik dołączamy do katalogu z naszym projektem. Jego zwartość może wydawać się dość skomplikowana, zwłaszcza dla początkujących, jednak nie będę się tutaj rozwodził nad samą składnią. Takie rozwiązanie pozwala na duża elastyczność, co wykorzystamy do podpięcia dowolnego programatora w Atmel Studio. Poniższy fragment kodu z wygenerowanego pliku makefile definiuje typ programatora oraz ścieżkę do plików .hex z zawartością flash i eeprom.

Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Uzupełniając go o dwie linijki przedstawione poniżej, możemy za jednym zamachem przy wgrywaniu programu, zaprogramować również fuse-bits oraz lock-bits.

Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Po jednorazowym wyliczeniu, nie potrzebujemy dodatkowego narzędzia, zapisujemy ich wartość każdorazowo i mamy pewność, że po zaprogramowaniu nawet nowego uC zawsze są poprawnie ustawione.

Elastyczność składni pliku makefile pozwala dodatkowo na kompilacje warunkową, o czym wspominałem we wstępie. Możemy w ten sposób za pomocą jednego parametru, zdecydować z jaką wersją urządzenia mamy do czynienia i wygenerować odpowiednie wsady.

Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dodatkowo w pliku makefile mamy możliwość podpięcia skryptów, które przykładowo mogą generować licznik kompilacji. Taki licznik można przekazać do programu, czy nawet dołączyć do wersji programu i zapisać w pamięci eeprom. Jeśli będzie ktoś zainteresowany, to mogę załączyć przykłady takich skrypt oraz opisać sposób na automatyczne generowanie daty/czasu kompilacji programu i zapis tych informacji do pamięci flash/eeprom. Jeśli nie wykorzystujemy całej zawartości pamięci flash/eeprom, to możemy wrzucić tam te dane. Zapisanie nr kompilacji może być przydatne w przypadku identyfikacji wersji oprogramowania wgranego do urządzenia.

Samo wywołanie programu make z odpowiednimi parametrami odbywa się w środowisku w jakim tworzymy kod. Domyślnie dla toolchain WinAVR jest to odpowiednio skonfigurowany Programmers Notepad. W zakładce Tool mamy trzy komendy.

Obrazek

Jest to: Make All - służąca do skompilowania projektu, Make Clean - przeznaczona do czyszczenia projektu oraz Make Program - do programowania. Odpowiednio przygotowany plik makefile sprawia, że te trzy komendy wystarczają w zupełności do zaprogramowania mikrokontrolera . Cała konfiguracja zawiera się w tym pliku, a przykładowa zmiana programatora sprowadza się do edycji dwóch linii kodu. Przeniesienie tak przygotowanego projektu nie jest takie proste, dlatego powstał ten poradnik! Po "wstępnych" wyjaśnieniach możemy w końcu przejść do meritum! :D

Zaczynajmy - Konfiguracja Atmel Studio 7.0

Zakładam, że mamy projekt przygotowany w języku C za pomocą toolchain WinAVR wraz z plikiem makefile i chcemy go przenieść bezboleśnie do Atmel Studio 7.0, tak aby móc uruchomić symulacje, czy skorzystać z dowolnego programatora wspieranego przez AVRDUDE. W moim przykładzie mamy do czynienia z ATmega32A, projekt nazywa się led_blink, a kod źródłowy znajduje się w pliku o nazwie led_blink.c (w wielu przypadkach będzie to domyślny main.c). Jest to swoisty "hello world" w postaci mijającej LED. Korzystam z systemy Windows 10, Atmel Studio 7.0.1645 oraz WinAVR 20100110.

1. Podpięcie toolchain WinAVR pod Atmel Studio

W pieszej kolejność musimy dodać naszego toolchain-a, więc wybieramy Tools->Options..., gdzie przechodzimy do opcji Toolchain->Package Configuration [1]. W polu Toolchains: wybieramy Atmel AVR 8-bit (C language) [2] i klikamy Add Flavour [3].

Obrazek

W oknie, które się pojawi, w polu Package Name [4] wpisujemy (dowolną) nazwę. Natomiast w polu Package Base Path [5] podajemy ścieżkę do plików bin dla WinAVR, w moim przypadku jest to C:\WinAVR\bin. Klikamy Add [6], a następnie OK [7]. Pierwszy etap mamy z głowy.

Obrazek

2. Tworzenie nowego projektu

Aby stworzyć nowy projekt wybieramy File->New->Project..., a następnie jak na rysunku poniżej, wybieramy nowy projekt GCC dla języka C ([1] i [2]). Nadajemy odpowiednią nazwę w polu [3], w tym przykładzie jest to led_blink. Jeśli nie tworzymy projektu składającego się z kilku podprojektów, lub nie do końca wiemy do czego służy ta opcja, to zalecam odznaczyć Create directory for solution [4]. Na koniec klikamy OK.

Obrazek

W okienku Device Selection wybieramy uC z jakiego korzystamy, musi on być taki sam jak w pliku makefile! Polecam skorzystać z pola do wyszukiwania [5], a następnie wybrać odpowiedni model z listy [6], po czym klikamy OK.

Obrazek

Po utworzeniu nowego projektu powinniśmy mieć widok jak poniżej.

Obrazek

Jeśli nasz plik z kodem źródłowym nosi inną nazwę niż main.c, to musimy ją zmienić również tutaj, gdyż w innym przypadku symulacja nie zadziała. W tym celu klikamy prawym klawiszem na plik main.c, wybieramy Rename i zmieniamy nazwę na odpowiednią, w tym przykładzie jest to led_blink.c. Na koniec zapisujemy wszystko Obrazek i zamykamy Atmel Studio.

3. Podmiana plików

Następnym krokiem jest podmiana plików utworzonych przez Atmel Studio na nasz projekt stworzony w WinAVR. Domyślnie Atmel Studio wrzuca projekty do katalogu C:\Users\<users_name>\Documents\Atmel Studio\7.0\<nazwa_projektu>, gdzie należy skopiować całą zawartość projektu z WinAVR nadpisując plik z kodem źródłowym programu.

4. Konfiguracja projektu

Po wykonaniu zabiegu opisanego w pkt 3 przechodzimy do konfiguracji projektu w Atmel Studio. W tym celu klikamy prawym na projekt i wybieramy Properties.

Obrazek

W zakładce Build [1], w polu Configuration: wybieramy profil Debug [2], zaznaczamy pole Use External Makefile[4], klikamy Browse [4] i wskazujemy właściwy plik makefile.

Obrazek

Zmieniamy profil na Release [5] i postępujemy analogicznie jak w przypadku profilu Debug.

Obrazek

W kolejnym kroku przechodzimy do zakładki Build Events [6], w polu Configuration: wybieramy profil Release, po czym w polu tekstowym Post-build event command line: wpisujemy komendę "make.exe" program [8]. Wpisana komenda spowoduje, że po wykonaniu polecenia Build, gdy aktywny jest profil Release automatycznie zostanie zaprogramowany nasz uC. Odpowiada to sekwencji poleceń Make All oraz Make Program wywołanej w Programmers Notepad. Jeśli aktywny będzie profil Debag, to Atmel Studio wygeneruje wyłącznie pliki .hex, bez programowania uC. Sama konfiguracja programatora znajduje się w pliku makefile, co zostało opisane w rozdziale "Toolchain WinAVR i makefile", może to być dowolny programator współpracujący z AVRDUDE.

Obrazek

Następnie przechodzimy do zakładki Tool [9], gdzie w sekcji Selected debugger/programmer wybieramy Simulator [10]

Obrazek

Zostaje nam ostatnia zakładka Advanced [11], gdzie w polu Toolchain Flavour: wybieramy skonfigurowany w pkt 1 toolchain. W naszym przykładzie nosi on nazwę WinAVR [12]

Obrazek

Na koniec zapisujemy wszystkie zmian Obrazek i GOTOWE!

5. Uruchomienie symulatora

Aby uruchomić symulator przechodzimy do karty z kodem programy, w naszym przypadku led_blink.c, wybieramy profil Debug, po czym klikamy na ikonę Start Debugging and Break.

Obrazek

Poniżej załączam zrzut ekrany z pięknie działającego symulatora :)

Obrazek

6. Programowanie mikrokontrolera

Jeśli w symulacji wszystko działa jak należy i chcemy zaprogramować nasz uC, to zmieniamy profil na Release i klikamy w ikonę Build. Na załączonym zrzucie, w oknie Output widać, że zawartość pliku led_blink.hex została wgrano i poprawnie zweryfikowana. Wszystko to z poziomu Atmel Studio, bez dodatkowych narzędzi i to "niewspieranym" programatorem 8-)

Obrazek

Oczywiście nic nie szkodzi, żeby wgrać korzystać z programatora wspieranego przez Atmel Studio. Trzeba tylko odpowiednio skonfigurować opcje w zakładce Selected debugger/programmer. W takim przypadku flash, eeprom, fuse-bit oraz lock-bit programuje się normalnie z poziomu Atmel Studio, a nie przez makefile.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO