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

Podobne dokumenty