Wykład nr 7 Programowanie mikrokontrolerów Piotr Bilski Systemy wbudowane Wykład nr 7 Programowanie mikrokontrolerów Piotr Bilski
Cechy charakterystyczne programowania mikrokontrolerów Ściśle związane z architekturą sprzętu Wykorzystanie głównie asemblera, ostatnio również C, C++, Java itp.. Praca w czasie rzeczywistym (Real-Time) wymusza wysoką efektywność programów Często stosowane są techniki mieszane – asembler + język wysokiego poziomu
Programowanie w asemblerze Asembler jest preferowany, gdy: Program jest prosty Brak kompilatora języka wyższego poziomu Są duże wymagania wobec szybkości i zajętości pamięci programu Zalety asemblera: Pełna kontrola nad sprzętem (rejestry, stos, mechanizm przerwań) Swobodne dysponowanie obszarem pamięci Program jest szybszy i mniejszy Dopasowanie programu do wymagań sprzętu
Cykl projektowanie w asemblerze Projekt algorytmu sieć działań Edytor Zapis źródłowy programu program źródłowy błąd Asembler Tłumaczenie program wynikowy błąd Program łącząco-ładujący Łączenie i ładowanie dwójkowy obraz pamięci Program śledzący Uruchamianie błąd
Schemat projektowania programu mikrokontroler Komputer PC Uruchomiony program Edytor, asembler, linker (IDE)
Tworzenie programu a pliki asm – plik źródłowy (tworzony w dowolnym edytorze) obj – plik z programem wynikowym lst – plik z raportem z wynikami kompilacji i wydrukiem (listingiem) programu hex – nieprzemieszczalny program dwójkowy utworzony w wyniku konsolidacji (łączenia plików obj i modułów bibliotecznych), twórca - Intel
Format pliku hex Plik zawiera rekordy o stałym formacie: : l l a a a a t t [ d d .. d ] c c gdzie: : - idetyfikator początku nowego rekordu l l – długość pola danych (d) w bajtach a a a a – adres w pamięci, gdzie należy umieścić dane (d) t t – typ rekordu (00 – dane, 01 – koniec pliku) d d – bajty danych c c – suma kontrolna
Asemblery i makroasemblery Oba rodzaje programów mają identyczne przeznaczenie, ale makroasemblery są bardziej rozbudowane Rozbudowane operacje: asemblacja warunkowa i makrodefinicje Istotna jest podstawa zapisu danych: Motorola preferuje zapis szesnastkowy Intel preferuje zapis dziesiętny
Kompilacja warunkowa Dotyczy fragmentów kodu, które mają być tłumaczone warunkowo oraz postaci raportu kompilacji Przykład: $ IF (warunek) (tekst kodu tłumczonego warunkowo) $ ELSEIF (inny warunek) (tekst kodu tłumaczonego, gdy warunek nie jest spełniony, a inny warunek - tak) $ ENDIF
Makrodefinicje Jest to zestaw instrukcji wywoływanych poprzez nazwę etykiety: DODAJ MACRO ARG1, ARG2 MOV A,#ARG1 ADD A,#ARG2 ENDM Makrodefinicje powodują skopiowanie kodu, który zastępują w każde miejsce w kodzie
Wady i zalety makrodefinicji Makrodefinicje działają szybciej, niż procedury Zajmują więcej miejsca, niż procedury Poprawiają czytelność programu Mogą występować w postaci zagnieżdżonej Przykłady: CASM (Motorola), A51 (Intel)
Wykorzystanie programów asemblerowych Testowanie układów elektronicznych Komunikacja z układami wykonawczymi przez port szeregowy UART Sterowanie układami cyfrowymi (wyświetlacze) i analogowymi Generacja sygnałów o zadanych parametrach
Programowanie w języku C Kompilatory języka C dla mikrokontrolerów są produkowane przez wiele firm (Archimedes, Tasking, Franklin, itp.) Problemy ze kompatybilnością – częściowa zgodność z ANSI C Kompilatory są skrośne (cross-compilers), działają na komputerze PC, a produkują kod wynikowy dla mikrokontrolera
Cechy kompilatorów C dla mikrokontrolerów Obecność typów danych zgodnych z ANSI C, w tym związanych z mikrokontrolerami (bit, sbit, sfr) Implementacja różnych modeli pamięci (tiny, small, compact, medium, large) Dostęp do rejestrów SFR i GPR Obecność wskaźników o długości zależnej od typu pamięci Optymalizacja kodu wynikowego
Cechy programowania w C mikrokontrolerów Konieczna znajomość niskopoziomowych szczegółów budowy mikrokontrolera Program w C zawiera wiele instrukcji przypisania (pojedyncze bity i rejestry), niewiele w nich złożonych struktur danych Program w C może mieć podobną liczbę linii kodu, co program w asemblerze Większe programy w C są dużo tańsze od asemblerowych odpowiedników
Uruchamianie programów Modułowa budowa mikrokontrolerów wymusza stosowanie specjalizowanych narzędzi do śledzenia stanu systemu (rejestry SFR) Praca w czasie rzeczywistym wymaga użycie narzędzi monitorujących nie naruszających ograniczeń czasowych Pozostałe wymagania analogiczne, jak w przypadku tradycyjnych systemów
Narzędzia wspomagające uruchamianie programów Monitory programowe Programy śledzące (debuggers) Symulatory Analizatory stanów logicznych Emulatory sprzętowe (In-Circuit Emulators) Zintegrowane systemy projektowo-diagnostyczne (IDE) Analizatory efektywności pracy systemu Programatory wbudowanych i zewnętrznych pamięci typu PROM Asemblery, kompilatory, linkery
Monitory i programy śledzące Najprostsze i najtańsze Monitory pracują w pamięci mikrokontrolera, debuggery w pamięci komputera Możliwe rozwiązanie hybrydowe (części programu są ulokowane w obu urządzeniach)
Hybrydowa organizacja systemu uruchomieniowego UART (RS232C) debugger Monitor (ROM)
Symulatory Służy do śledzenia programu mikrokontrolera na komputerze ogólnego przeznaczenia Naśladuje zachowanie systemu z uwzględnieniem zawartości pamięci, rejestrów, przerwań itp. Brak możliwości testowania współpracy systemu i modułów zewnętrznych
Przykład symulatora – ChipView-X51 Platforma: Windows Zgodny z Turbo Debuggerem Borlanda Symulacja RTOS Zawiera High Performance Simulation Engine
Emulatory sprzętowe Najbardziej zaawansowane i najdroższe Zawierają sondę o wyprowadzeniach identycznych z podstawką mikrokontrolera Umożliwiają pełne testowanie systemu Sterowanie z komputera PC
Schemat emulatora Edytor Asembler Kompilator C Linker Programy sterujące Gniazdo mikroprocesora ROM (monitor) uP port RS-232 Sonda emulatora RAM NMI Testowany system Emulator Komputer
Cechy emulatorów Możliwość zamiany zasobów testowanego systemu z odpowiadającymi im zasobami emulatora (mapping) Możliwość testowania systemu w czasie rzeczywistym Praca w trybie ciągłym lub krokowym Podgląd mapy pamięci i rejestrów Wbudowane analizatory stanów logicznych
Zaawansowane emulatory Obecność tylko pamięci RAM Dwie niezależne szyny adresowe Możliwość jednoczesnej pracy emulatora i komputera PC Ograniczona rola przerwań
Schemat emulatora zaawansowanego Analizator stanu szyny Gniazdo mikroprocesora Edytor Asembler Kompilator C Linker Programy sterujące uP RAM Dane i adresy Sonda emulatora Niektóre polecenia NMI Testowany system Emulator Komputer
Problemy emulacji sprzętowej Konieczność rejestracji stanu mikrokontrolera (ułatwienie – układy bond-out) Mapowanie zasobów (zadanie dla specjalizowanego kontrolera) Mapowanie pamięci ROM (układy wyposażone w pamięć RAM) Śledzenie pracy w czasie rzeczywistym (układy Background Mode Debugging)
Zintegrowane programy wspomagające uruchamianie Pakiety programowe z kompletem modułów do projektowania i testowania: Asembler Debugger Kompilator C Linker Moduł zarządzania plikami projektów Symulator Monitor wydajności systemu Przykład: PathFinder