KWALIFIKACJA ELM3 - CZERWIEC 2012

PYTANIE NR 1.
Który program dokonuje tłumaczenia kodu napisanego w języku programowania na kod maszynowy mikrokontrolera?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Kompilator tłumaczy kod źródłowy napisany w języku programowania (np. C/C++) na kod wynikowy (obiektowy/maszynowy) przeznaczony dla danej architektury mikrokontrolera. Debugger służy do uruchamiania i analizy programu, symulator do odtwarzania działania, a deasembler działa w kierunku odwrotnym (z maszynowego na asembler).

Pełne wyjaśnienie:

W typowym procesie tworzenia oprogramowania dla mikrokontrolera (np. w urządzeniu mechatronicznym) programista przygotowuje kod źródłowy w języku wysokiego poziomu, a następnie buduje projekt w środowisku narzędziowym (toolchain). Elementem, który realizuje tłumaczenie z języka programowania na postać wykonywalną przez dany procesor/mikrokontroler, jest kompilator. W praktyce kompilator generuje kod wynikowy (np. obiektowy), który następnie bywa łączony przez linker w finalny obraz programu (firmware/wsad) możliwy do zaprogramowania w pamięci układu.

Pozostałe narzędzia z odpowiedzi pełnią inne role:

  • Deasembler (często spotyka się też określenie disassembler) wykonuje operację "wstecz": analizuje kod maszynowy i przedstawia go w postaci instrukcji asemblera. To nie jest tłumaczenie z języka programowania na maszynowy, tylko próba rekonstrukcji czytelnej reprezentacji niskopoziomowej.
  • Symulator pozwala uruchamiać program w modelu/środowisku wirtualnym, naśladując działanie mikrokontrolera i peryferiów. Nie jest jego zadaniem kompilacja, lecz testowanie zachowania programu bez sprzętu lub z ograniczonym sprzętem.
  • Debugger służy do uruchamiania programu krokowo, ustawiania pułapek (breakpointów), podglądu zmiennych i rejestrów oraz analizy błędów. Debugger korzysta z wyników kompilacji (np. symboli debug), ale sam nie tłumaczy kodu źródłowego na kod maszynowy.

Na egzaminie warto zapamiętać prostą regułę: kompilator tworzy kod wykonywalny, a narzędzia diagnostyczne (debugger/symulator) pomagają sprawdzić, dlaczego program działa lub nie działa. Deasembler natomiast jest przydatny głównie w analizie gotowego binarium, nie w jego tworzeniu.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Kompilator to program, który tłumaczy kod źródłowy (np. w C/C++) na kod wynikowy przeznaczony dla konkretnej architektury mikrokontrolera. Dzięki temu powstaje plik, który można połączyć (linker) i wgrać do pamięci układu jako wsad programu.
Debugger służy do uruchamiania i diagnozowania już skompilowanego programu: zatrzymuje wykonanie, pozwala przechodzić krokowo i podglądać zmienne/rejestry. Do działania potrzebuje efektów kompilacji, ale nie wykonuje samego tłumaczenia kodu źródłowego.
Symulator odtwarza działanie mikrokontrolera w środowisku wirtualnym, umożliwiając test programu bez fizycznego sprzętu lub przy ograniczonym dostępie do stanowiska. Pomaga sprawdzić logikę programu, ale nie zastępuje kompilatora, który tworzy kod wykonywalny.
Deasembler (disassembler) analizuje gotowy kod maszynowy i przedstawia go w postaci instrukcji asemblera. To narzędzie do analizy binariów (np. diagnostyka, inżynieria wsteczna), a nie do tworzenia kodu maszynowego z języka programowania.
Najczęściej wygląda to tak: piszesz kod źródłowy → kompilator tworzy pliki wynikowe → linker buduje finalny obraz programu → programator wgrywa wsad do pamięci mikrokontrolera. Debugger i symulator mogą być użyte na etapie testów i uruchamiania.
Po kompilacji zwykle powstają pliki obiektowe (wynik tłumaczenia) oraz pliki z informacjami dla debuggera. Po linkowaniu tworzy się finalny plik do wgrania (np. obraz programu). Konkretne rozszerzenia zależą od toolchainu i środowiska.
Nie. Kompilator tłumaczy język wysokiego poziomu (np. C) na kod wynikowy, a asembler tłumaczy kod w języku asemblera na kod maszynowy. Oba służą do wytwarzania kodu dla procesora, ale startują z innego poziomu zapisu programu.
Bo wszystkie te narzędzia występują obok siebie w IDE i "towarzyszą" uruchamianiu projektu. Łatwo pomylić etap budowania programu (kompilacja) z etapem sprawdzania działania (debugowanie/symulacja). Warto kojarzyć je z ich główną funkcją.
Jeśli IDE zgłasza błędy składni/typów i nie tworzy plików wynikowych, problem jest na etapie kompilacji. Jeśli kompilacja przechodzi, a program działa źle, wtedy używa się debuggera (krokowanie, breakpointy) lub testów na sprzęcie, by znaleźć błąd logiczny.
Zwykle potrzebujesz: kompilatora i linkera (zbudowanie wsadu), programatora (wgranie do mikrokontrolera) oraz debuggera (diagnoza na sprzęcie). Dodatkowo przydają się narzędzia pomiarowe (np. multimetr, oscyloskop) do weryfikacji sygnałów.
info

To pytanie poprawnie rozwiązuje 81% zdających egzamin. średnio łatwe

Specjaliści zwracają uwagę: "Kompilator tłumaczy kod źródłowy napisany w języku programowania (np. C/C++) na kod wynikowy (obiektowy/maszynowy) przeznaczony dla danej architektury mikrokontrolera."

Źródła:

  • GNU Compiler Collection (GCC) Documentation – "Introduction" oraz sekcje o kompilacji i generowaniu kodu wynikowego, https://gcc.gnu.org/onlinedocs/ (dostęp: 2026-03-01)
  • Microchip – MPLAB XC8 C Compiler User’s Guide (opis roli kompilatora i generowania plików wynikowych dla mikrokontrolerów), https://www.microchip.com/en-us/tools-resources/develop/mplab-xc-compilers (dostęp: 2026-03-01)
  • Arm Developer – dokumentacja Arm Compiler/armclang (kompilacja kodu C/C++ do kodu dla architektur ARM), https://developer.arm.com/documentation/ (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja środowiska IDE używanego na zajęciach (opis procesu build/compile i debug)
  • Podstawy programowania mikrokontrolerów (rozdziały o kompilacji, linkowaniu i wgrywaniu programu)
  • Materiały producenta mikrokontrolera (opis toolchain: kompilator, linker, programator, debugger)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego