Technika mikroprocesorowa W. Daca, Politechnika Szczecińska
Transkrypt
Technika mikroprocesorowa W. Daca, Politechnika Szczecińska
Technika mikroprocesorowa Języki programowania mikrokontrolerów Przed rozpoczęciem pisania kodu źródłowego programu należy zdecydować się na wybór określonego języka programowania. Stosuje się dwa rodzaje języków programowania mikrokontrolerów: • • język asemblera jeden z języków wyższego poziomu. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 1 Technika mikroprocesorowa Języki programowania mikrokontrolerów - asembler • Asembler jest to tzw. język niższego poziomu. Język ten operuje bezpośrednio na liście rozkazów danej jednostki centralnej. Są to operacje typu: „przenieść zawartość komórki o określonym adresie w pamięci zewnętrznej do określonego rejestru wewnętrznego jednostki centralnej”. • Programista nie pisze jednak programu bezpośrednio w kodzie maszynowym. Bezpośrednie posługiwanie się ciągami zer i jedynek byłoby zbyt uciążliwe. Dlatego w języku asemblera każdy rozkaz z listy rozkazów jednostki centralnej ma przyporządkowane krótką nazwę, tzw. mnemonik. Nazwa ta jest tak wybrana, aby kojarzyło się ono z funkcją danego rozkazu. Przykładowo rozkazy związane z przesunięciem komórek z jednego obszaru pamięci do drugiego mają najczęściej mnemoniki o nazwie LD (od ang. load - załadować) lub MOV (od ang. move - przesunąć). • Zadaniem programu tłumaczącego jest proste przetłumaczenie mnemoników na odpowiadający im kod maszynowy. Stąd określenie „język niższego poziomu”. • Program tłumaczący z języka asemblera określany jest po prostu jako asembler (assembler) W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 2 Technika mikroprocesorowa Języki programowania mikrokontrolerów – język wyższego poziomu • Języki programowania wyższego poziomu są w zasadzie niezależne od listy rozkazów konkretnej jednostki centralnej. Programista operuje rozkazami wykonującymi bardziej złożone operacje niż język asemblera. Przykładowo dla porównania dwóch liczb programista w języku wyższego poziomu używa bezpośrednio znaku relacji „>” lub „<”. W języku asemblera ta prosta operacja musi być realizowana przy pomocy kilku lub nawet kilkunastu rozkazów w zależności od wielkości porównywanych liczb. • Program tłumaczący z języka programowania wyższego rzędu na kod maszynowy nosi nazwę kompilatora (compiler). W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 3 Technika mikroprocesorowa Języki programowania mikrokontrolerów – porównanie asemblera i języka wyższego poziomu Cecha programu język asemblera język wyższego poziomu długość kodu źródłowego programu realizującego określoną funkcję większa mniejsza możliwość przenoszenia kodu źródłowego programu pomiędzy różnymi mikrokontrolerami praktycznie niemożliwe w większości wypadków możliwe po niewielkich modyfikacjach kodu źródłowego koszty programu tłumaczącego małe duże optymalność programu ( mała zajętość pamięci, duża szybkość działania ) duża dla krótkich programów, mniejsza dla programów dłuższych mała dla programów krótkich, większa dla programów dłuższych W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 4 Technika mikroprocesorowa Języki programowania mikrokontrolerów – język C • Dominującym językiem wyższego poziomu stosowanym do programowania mikrokontrolerów jest język C. • Proces standaryzacji tego języka w zasadzie został zakończony a obecnie obowiązujący standard tego języka określa się jako ANSI C. Jest to jednak standard przeznaczony głównie do systemów obliczeniowych pracujących pod kontrolą systemów operacyjnych. • W programowaniu mikrokontrolerów konieczne są odpowiednie modyfikacje tego języka. Większość kompilatorów języka C przeznaczonych do programowania konkretnych mikrokontrolerów nie odpowiada dokładnie ANSI C lecz zawiera dodatkowe rozszerzenia tego języka związane ze specyficznymi wymaganiami przy programowaniu mikrokontrolerów. Najczęściej są to następujące elementy: wprowadzane są nowe typy zmiennych, np. zmienne bitowe (o ile lista rozkazów danej jednostki centralnej bezpośrednio wspiera operacje na pojedynczych bitach) lub zmienne umożliwiające bezpośredni dostęp do specjalnych rejestrów funkcyjnych). w przypadku mikrokontrolerów 8-bitowych niektóre złożone typy zmiennych nie są przez kompilator wspierane (np. zmienne zmiennoprzecinkowe podwójnej precyzji) przy deklaracji zmiennych wprowadzane są mechanizmy umożliwiające umiejscowienie (alokację) zmiennej w określonym miejscu przestrzeni adresowej (np. w obszarze wewnętrznej lub zewnętrznej pamięci RAM). Takie mechanizmy w ANSI C nie są konieczne, ponieważ alokacją zmiennych zajmuje się system operacyjny. wprowadzane są nowe słowa kluczowe języka C (np. słowo interrupt użyte przy deklaracji funkcji oznacza że dana funkcja wywołana zostanie przy wystąpieniu określonego przerwania) W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 5 Technika mikroprocesorowa Języki programowania mikrokontrolerów – styl programowania w języku C • Elementem dobrego stylu programowania mikrokontrolerów w języku C jest unikanie wszędzie tam, gdzie jest to możliwe specyficznych rozszerzeń języka C lub przynajmniej grupowanie tych fragmentów programu, w których zostały one użyte, w wydzielonych zbiorach. • Celem stosowania takiego stylu programowania jest zapewnienie możliwości łatwego przenoszenia oprogramowania pomiędzy różnymi mikrokontrolerami. Przy zachowaniu przedstawionych reguł pisania kodu źródłowego liczba modyfikacji kodu źródłowego niezbędna do uzyskania kompilacji programu bez błędów jest zazwyczaj niewielka. Doświadczeni programiści piszący programy w języku C dla mikrokontrolerów stosują często następujące rozwiązania: fragmenty kodu źródłowego związane z obsługą specyficznych układów peryferyjnych umieszcza się w wydzielonych modułach typy zmiennych deklarowane są nie bezpośredni przy deklaracji zmiennych ale słowo kluczowe typdef alokacji zmiennych nie dokonuje się bezpośrednio przy deklaracji zmiennych lecz przy pomocy dyrektyw preprocesora, głównie poprzez użycie tzw. modelu pamięci alokacja funkcji służących do obsługi przerwań (tzw. rozprowadzenie przerwań) odbywa się w wydzielonym zbiorze, często napisanym w języku asemblera W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 poprzez 6 Technika mikroprocesorowa Języki programowania mikrokontrolerów – język C++ • Język C++ jest rozszerzeniem języka C o elementy umożliwiające tzw. programowanie obiektowe. Jest to w chwili obecnej bardzo rozpowszechniony język programowania systemów obliczeniowych pracujących z wykorzystaniem systemów operacyjnych typu Windows. Zastosowanie języka C++ w przypadku złożonych programów jest bardziej efektywne niż języka C. • Bezpośrednie zastosowanie tego języka do programowania mikrokontrolerów jest trudniejsze niż w przypadku języka C. Problem nie dotyczy tylko - podobnie jak to ma miejsce w przypadku języka C - konieczności rozbudowy języka C++ o specyficzne elementy związane z programowaniem mikrokontrolerów. Wygoda programowania w języku C++ okupiona jest dużą wielkością programów generowanych przez narzędzia programowe dla tego języka. Systemy mikroprocesorowe oparte na mikrokontrolerach nie dysponują zazwyczaj tak dużymi zasobami pamięci jak systemy obliczeniowe. • Dlatego oferowane obecnie kompilatory języka C++ dla konkretnych mikrokontrolerów zawierają niepełną wersja tego języka. Wersje ta pozbawione są tych elementów języka C++ których użycie najbardziej wpływa na powiększenie się kodu wynikowego programu. Ponadto kompilatory języka C++ oferowane są tylko dla mikrokontrolerów 16- i 32-bitowych ponieważ mikrokontrolery 8-bitowe nie dysponują wystarczającą wielkością przestrzeni adresowej. • Próbą standaryzacji odmiany języka C++ przeznaczonego dla programowania mikrokontrolerów zajmuje się powołany w roku 1995 komitet reprezentujący szereg wiodących firm japońskich i amerykańskich. Ta odmiana języka C++ oznaczona została jako EC++ (Embedded C++). Ostateczny standard EC++ nie został jeszcze wypracowany. Mikrokontroler Producent kompilatora C++ SAB80C166 (16 bit) Tasking MPC860 (32 bit) Microtec Mentor Graphics, Green Hills Software, MetaWare W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 7 Technika mikroprocesorowa Języki programowania mikrokontrolerów – język Java • Java jest językiem programowania opracowanym przez firmę Sun Microsystems. Ideą tego języka programowania jest zapewnienie całkowitej niezależności programu napisanego w Javie od płaszczyzny sprzętowej, na której program jest wykonywany. Dlatego Java nie jest tylko językiem programowania, ale zawiera trzy elementy: język programowania (programming language) wielozadaniowy system operacyjny (multithreading operating system) wbudowany interpreter języka Java (Java virtual machine) • Dzięki tym własnością program napisany w języku Java może zostać pobrany bezpośrednio z dowolnego miejsca sieci rozległej w wykonany na dowolnym systemie zawierającym wymienione elementy tego języka. • Prace nad zastosowaniem języka Java do programowania mikrokontrolerów trwają. W. Daca, Politechnika Szczecińska, Wydział Elektryczny, 2007/08 8