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.