Linux i AVR cz.2

W tej części artykułu zajmę się ułatwieniami przy programowaniu, oraz tym co robić w sytuacji, gdy nasz projekt składa się z więcej niż jednego pliku.

 

Zacznijmy od ułatwień. Wpisywanie za każdym razem poleceń do kompilacji, generowania plików wynikowych i programowania, jest dosyć kłopotliwe. Można to rozwiązać poprzez trwożenie plików powłoki. Są to pliki, które wykonują polecenia dla systemu w pewnej, ustalonej przez programistę kolejności. Są one bardzo podobne do windowsowych plików .cmd, ale mają znacznie większe możliwości.

Nasz plik będzie bardzo prosty, bo będzie się składał tylko z trzech poleceń. Będzie on kolejno wywoływał polecenia opisane w poprzedniej części artykułu. Będzie on przybierał taką formę:

avr-gcc -mmcu=kontroler plik_z_programem.c -o plik_wynikowy

avr-objcopy -O ihex plik_wynikowy nazwa_pliku.hex

avrdude -c nazwa_programatora -p nazwa_procesora -U flash:w:nazwa_pliku.hex

i należy go zapisać z rozszerzeniem .sh. Taki prosty skrypt pozwoli nam, poprzez uruchomienie tego pliku wykonać automatycznie trzy czynności.

Czasami zachodzi potrzeba wykonania tylko kompilacji programu. W tym celu proponuję utworzyć osobny plik o nazwie np. kompiluj.sh, w którym będą tylko polecenia kompilacji i generowania plików wynikowych. Można także utworzyć plik, który będzie tylko programował mikrokontroler, ale to już zależy od tego jak programista zorganizuje prace.

Plik taki można uruchomić z okna, lub w wiersza poleceń poprzez polecenie ./nazwa_pliku.sh

 

Co robić gdy mamy bardziej rozbudowany projekt?

Każdy rozbudowany projekt jest przeważnie dzielony na więcej plików. Kompilacja tego odbywa się bardzo podobnie jak przy jednym pliku, z tą różnicą, że kompilujemy każdy plik składowy z osobna i zapisujemy je z rozszerzeniem .o, a następnie przeprowadzamy kompilacje wszystkich naraz. W ten sposób tworzymy plik, który jest wynikiem kompilacji całości. Następnie generujemy plik .hex, którym możemy już zaprogramować kontroler. Jest to trochę zawiłe, ale myślę że przykład wszystko wyjaśni.

Załóżmy że mamy projekt składający się z trzech plików: main.c, plik1.c, plik2.c i chcemy dokonać kompilacji pod kontroler Atmega32. W tym celu w naszym skrypcie w pliku .sh muszą być polecenia:

 

avr-gcc -mmcu=atmega32 main.c -o main.o

avr-gcc -mmcu=atmega32 plik1.c -o plik1.o

avr-gcc -mmcu=atmega32 plik2.c -o plik2.o

avr-gcc main.o plik1.o plik2.o -o projekt.out

avr-objcopy -O ihex projekt.out projekt.hex

avrdude -c stk200 -p m32 -U flash:w:projekt.hex

 

Mam nadzieje, że artykuł był przydatny. Życzę miłego programowania AVRków w Linusie

Komentarze do „Linux i AVR cz.2

  1. Witam.
    Może wytłumaczysz, w jaki sposób „includować” inne pliki *.c w main? Głównie chodzi o określenie ścieżki dostępu do plików tworzonych przeze mnie oraz tych, które są standardową biblioteką.

    Stosować „/” czy „\” ?

    • W celu dołączenia pliku należy wykonać standardowo polecenie include, ale zależnie od tego, czy mamy plik biblioteczny, czy nasz plik stosujemy różne oznaczenie.
      Kiedy chcemy dopiąć plik który jest biblioteką systemową to nazwę pliku wraz ze ścieżką zaznaczamy przy pomocy nawiasów ostrych <>. Na przykład #include .
      W przypadku kiedy mamy własny plik, który chcemy dopiąć do naszego projektu to nawę pliku wraz ze ścieżką musimy umieścić w cudzysłowach „”. Na przykład #include „katalog/mój_plik.h”.

      Zawsze w ścieżkach dostępu stosujemy tylko „/”. Przy okazji dodam, że jeżeli chcemy dostać się do katalogu, który jest wyżej to stosujemy znam „..”, przykładowo „../plik.h”.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.