Mikroprocesorowa ośla łączka, część 5
Praca, jaką wykonuje translator będący częścią całego środowiska Atmel Studio, jest ogromna. W gruncie rzeczy jest to praca zespołowa: efekty działania translatora przetwarza linker. To na ich pracy opieramy swoje cele: z ich wykorzystaniem poprawiamy własne błędy w programie.
Kompilacja programu, co to jest?
Stworzyliśmy pierwszy, bardzo prosty ale działający program do operowania pinem portu. Jego prostota, bez zbędnego zagłębiania się w szczegóły, pozwoli na poznanie i zrozumienie pewnych szczegółów związanych z „technologią” tworzenia oprogramowania. Przypomnę tu ilustrację z jednej z początkowych części cyklu (rysunek 1), gdzie występuje element określany jako translator (ang. translator to tłumacz).
Wspomniany translator (jest stosowana inna nazwa – kompilator) jest programem, którego zadaniem jest przetłumaczenie programu źródłowego (napisanego przez człowieka) na język zrozumiały przez mikroprocesor. Ponieważ program może składać się z wielu „kawałków” źródłowych, translator/kompilator dokonuje „tłumaczenia” każdego kawałka składowego na postać „półskompilowaną”. Finalny program, ten ładowany do pamięci Flash mikrokontrolera, jest wynikiem działania innego programu, który jest określany jako linker, którego zadaniem jest połączenie wszystkich naszych kawałków wyprodukowanych przez translator do finalnej postaci binarnej, akceptowanej przez mikroprocesor. W to wchodzi również dodanie niezbędnych elementów zawartych w standardowych bibliotekach dołączanych do naszego programu, gdyż przykładowo chcąc obliczyć w programie wartość funkcji sinus nikt nie będzie tworzył tej funkcji, gdyż taka jest już gotowa, znajduje się w bibliotece i można z niej skorzystać.
Mając już napisany program należy dokonać jego kompilacji (przetłumaczenia z postaci źródłowej, rysunek 2).
Po poprawnej kompilacji (nie zostały zgłoszone żadne błędy składniowe w zapisie programu źródłowego) istnieje możliwość „podejrzenia” efektu finalnego związanego z procesem tłumaczenia. Klikając na Output Files w okienku Solution Explorer można rozwinąć jego zawartość – znajdziemy tam między innymi pozycję program1.lss oraz program1.hex, jak pokazuje rysunek 3.
Pierwszy z tych plików pozwala obejrzeć efekt pracy translatora. Klikając na pozycję program1.lss, mamy możliwość zobaczenia, w jaki sposób zostały przetłumaczone zapisy programu źródłowego na postać zrozumiałą dla mikroprocesora (rysunek 4).
Przykładowo, instrukcja zapisana jako „PORTB ^= ( 1 << 5 ) ;” została rozpisana na cztery następujące operacje wykonywane przez mikroprocesor:
• ldi r25, 0x20 – operacja wpisania do rejestru mikroprocesora r25 liczby 20 w zapisie szesnastkowym,
• in r24, 0x05 – operacja wczytania do rejestru r24 zawartości rejestru identyfikowanego liczbą 5 (łatwo sprawdzić w dokumentacji do mikrokontrolera ATMEGA328, że jest to rejestr PORTB),
• eor r24, r25 – operacja EXOR zawartości rejestru r24 oraz r25, wynik zostaje zachowany w r24,
• out 0x05, r24 – operacja zapisu stanu przechowywanego w r24 do rejestru identyfikowanego liczbą 5, czyli PORTB.
W rzeczywistości prawdziwym wynikiem kompilacji są liczby wypisane w żółtej ramce na rysunku 4. Wartości 90 i E2 w zapisie szesnastkowym oznaczają operację jaką należy wykonać (dokładnie wpisz określoną stałą do rejestru r25), natomiast występujące obok ldi r25,0x20 to już jest komentarz kompilatora, pozwalający zainteresowanym przeanalizować działania translatora i nie głowić się nad znaczeniem kodu 90 i E2. Podobnie jest w kolejnych wierszach. To był przykład przetłumaczenia bardzo prostej instrukcji programu źródłowego na rozkazy w kodzie binarnym. W przeciętnym programie źródłowym zapisy instrukcji w języku C nie zawsze dają się tak łatwo „rozszyfrować”, często jedna instrukcja w języku C do swojej realizacji wymaga użycia znacznie większej liczby operacji rozumianych przez mikroprocesor.
(…)
——– ciach! ——–
To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze październikowym czasopisma Zrozumieć Elektronikę (ZE 10/2024). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 10/2024 znajduje się tutaj.
Andrzej Pawluczuk
apawluczuk@vp.pl
Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Następnie wybrać:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy. Jeśli ma to być numer z tym artykułem trzeba zaznaczyć, że chodzi o ZE 10/2024.
UWAGA!!! E-mail z linkiem do materiałów (weTransfer) wysyłamy zazwyczaj w ciągu 24 godzin. Czasem zdarza się jednak, że trafia do spamu. Jeśli więc nie pojawi się w ciągu 48 godzin prosimy sprawdzić w folderze spam, a ewentualny problem zgłosić na adres: kontakt@piotr-gorecki.pl.