METODY I NARZĘDZIA PROJEKTOWANIA APLIKACJI DLA MIKROKONTROLERÓW JEDNOUKŁADOWYCH



Podobne dokumenty
Technika mikroprocesorowa. Struktura programu użytkownika w systemie mikroprocesorowym

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Opis efektów kształcenia dla modułu zajęć

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Kompilator języka C na procesor 8051 RC51 implementacja

Podstawy programowania

2. Architektura mikrokontrolerów PIC16F8x... 13

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Elektrotechnika I stopień (I stopień / II stopień) ogólnoakademicki (ogólno akademicki / praktyczny) niestacjonarne (stacjonarne / niestacjonarne)

Programowanie w C. dr inż. Stanisław Wszelak

Ćwiczenie nr 6. Programowanie mieszane

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

KARTA PRZEDMIOTU. Programowanie niskopoziomowe, C2. Low Level Programming Informatyka

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

1 Podstawy c++ w pigułce.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

PRZEWODNIK PO PRZEDMIOCIE

Tworzenie oprogramowania

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Zacznij Tu! Poznaj Microsoft Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

PRACA W ZINTEGROWANYM ŚRODOWISKU URUCHOMIENIOWYM - IDE Keil μvision 2

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

MIKROKONTROLERY I MIKROPROCESORY

Programowanie sterowników przemysłowych / Jerzy Kasprzyk. wyd. 2 1 dodr. (PWN). Warszawa, Spis treści

Podstawy programowania.

Systemy wbudowane. Wprowadzenie. Struktura. Mikrokontrolery AVR. Wprowadzenie do programowania w C

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PRZEWODNIK PO PRZEDMIOCIE

Programowanie obiektowe zastosowanie języka Java SE

KARTA PRZEDMIOTU. Programowanie niskopoziomowe, C1

Wstęp. do języka C na procesor (kompilator RC51)

Wstęp Architektura... 13

1 Podstawy c++ w pigułce.

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Historia modeli programowania

SZYBKO ZROZUMIEĆ VISUAL BASIC 2012 Artur Niewiarowski -

Król Łukasz Nr albumu:

Warsztaty szkoleniowe. Technologia SafetyLon w systemach związanych z bezpieczeństwem funkcjonalnym Narzędzia SafetyLon Moduł 4.5.

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA Bieżący sylabus w semestrze zimowym roku 2016/17

WYKORZYSTANIE WEWNĘTRZNYCH GENERATORÓW RC DO TAKTOWANIA MIKROKONTROLERÓW AVR

Programowanie niskopoziomowe

2. Podstawy programu Microsoft Access

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Podstawy Programowania. Wykład 1

Technologie informacyjne - wykład 12 -

Laboratorium 1: Wprowadzenie do środowiska programowego. oraz podstawowe operacje na rejestrach i komórkach pamięci

imei Instytut Metrologii, Elektroniki i Informatyki

ICD Wprowadzenie. Wprowadzenie. Czym jest In-Circuit Debugger? 2. O poradniku 3. Gdzie szukać dodatkowych informacji? 4

Środowiska i platformy programistyczne

PRZEWODNIK PO PRZEDMIOCIE

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Metody Kompilacji Wykład 1 Wstęp

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Technika mikroprocesorowa. Języki programowania mikrokontrolerów

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Szkolenia specjalistyczne

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Opracował: Jan Front

Elektrotechnika I stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny) Kierunkowy (podstawowy / kierunkowy / inny HES)

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

PRZEWODNIK PO PRZEDMIOCIE

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Podstawy programowania wykład

KARTA KURSU. Wstęp do programowania

Zaawansowane programowanie w języku C++

Język programowania: Lista instrukcji (IL Instruction List)

Wykład Ćwiczenia Laboratorium Projekt Seminarium

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

Szablony funkcji i szablony klas

Programowanie hybrydowe łączenie C/C++ z asemblerem

Programowanie Systemów Wbudowanych

Systemy Wbudowane. Założenia i cele przedmiotu: Określenie przedmiotów wprowadzających wraz z wymaganiami wstępnymi: Opis form zajęć

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wstęp do programowania. Wykład 1

Przejrzystość, intuicyjny charakter i łatwość oprogramowania sterowników FATEK.

14. Przedmiot: N/PM2012/11/14/I1 INFORMATYKA moduł 1 Semestr. Liczba tygodni Liczba godzin w tygodniu Liczba godzin w semestrze ECTS

Podstawa programowa Technik informatyk PODSTAWA PROGRAMOWA KSZTAŁCENIA W ZAWODZIE TECHNIK INFORMATYK SYMBOL CYFROWY 312[01]

1.1. Wymogi bezpieczeństwa Pomoc techniczna TIA Portal V13 instalacja i konfiguracja pakietu...18

PMiK Programowanie Mikrokontrolera 8051

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

PRZEWODNIK PO PRZEDMIOCIE

Programowanie w języku C++ Grażyna Koba

Zarządzanie pamięcią operacyjną

Programowanie mikrokontrolerów AVR

Podstawy programowania strukturalnego (C) SYLABUS A. Informacje ogólne

PODSTAWY PROGRAMOWANIA STRUKTURALNEGO (C) SYLABUS A. Informacje ogólne

Algorytmika i pseudoprogramowanie

USB interface in 8-bit microcontrollers PIC18F family manufactured by Microchip.

PRZEWODNIK PO PRZEDMIOCIE

PROGRAMOWALNE STEROWNIKI LOGICZNE

Metody i algorytmy pomiarów przedmiotów metodami optycznymi.

Programowanie w języku Python. Grażyna Koba

Transkrypt:

kpt. dr inŝ. Mariusz BODJAŃSKI Wojskowy Instytut Techniczny Uzbrojenia METODY I NARZĘDZIA PROJEKTOWANIA APLIKACJI DLA MIKROKONTROLERÓW JEDNOUKŁADOWYCH W artykule opisano proces projektowania oprogramowania dla systemów z mikrokontrolerami jednoukładowymi. Przedstawiono podstawowe metody i narzędzia tworzenia aplikacji. Porównano jakość kodów wynikowych i efektywność projektowania za pomocą prezentowanych metod. 1. Wstęp Programowanie systemów mikroprocesorowych jest procesem róŝniącym się od programowania komputerów klasy PC (jednostka centralna, monitor, klawiatura). Projekt aplikacji przeznaczonej do uruchomienia w systemie zawierającym mikrokontroler jednoukładowy musi uwzględniać wiele aspektów: między innymi obsługę urządzeń peryferyjnych, zaleŝności czasowe sygnałów nimi sterujących, długość kodu wynikowego itp. W związku z tym, programista chcąc spełnić powyŝsze kryteria, optymalizuje projekt pod względem szybkości lub rozmiaru. 2. Proces projektowania aplikacji Pierwszym krokiem w procesie projektowania oprogramowania dla systemu z mikrokontrolerem jest dogłębne przestudiowanie architektury wewnętrznej mikrokontrolera, otoczenia sprzętowego oraz zapoznanie się ze wszystkimi sygnałami współpracującymi z urządzeniami peryferyjnymi systemu. Ma to szczególne znaczenie dla kształtu procedur składowych programu, komunikujących się z osprzętem mikrokontrolera. Następnym etapem jest zgrubne ustalenie struktury programu, czyli: analiza zadania, projekt algorytmu programu, wyznaczenie zaleŝności do obliczeń numerycznych, określenie kształtu procedur odpowiedzialnych za realizację poszczególnych zagadnień, wytyczenie rozgałęzień warunkowych. Kolejne kroki to edycja kodu źródłowego, kompilacja, symulacja i debuggowanie, czyli śledzenie pracy programu oraz usuwanie błędów. Praktyka pokazuje, Ŝe etap debuggowania jest równie czasochłonny jak tworzenie kodu aplikacji. Proces tworzenia aplikacji kończy się oczywiście uruchomieniem programu, czyli załadowaniem kodu wynikowego do pamięci mikrokontrolera. Częstym błędem popełnianym przez niedoświadczonych programistów jest rozpoczynanie pracy od tworzenie kodu pętli głównej. Tymczasem rozwiązywanie postawionego problemu naleŝy zacząć od analizy i implementacji zadań cząstkowych, przybliŝając się stopniowo do celu pracy. W przypadku programowania mikrokontrolerów jednoukładowych, pracę naleŝy rozpocząć od budowy zbioru procedur obsługujących otoczenie sprzętowe mikrokontrolera. 79

3. Narzędzia tworzenia aplikacji Wszystkie powyŝsze czynności wykonywane są przy pomocy odpowiednich narzędzi: Do budowy i edycji kodów źródłowych programów słuŝą edytory tekstu wyposaŝone w standardowe opcje kopiowania, przenoszenia, szukania, itd. Kompilator jest programem tłumaczącym zapis kodów źródłowych z języka wysokiego poziomu (np. C/C++) na język niskiego poziomu. Kompilator analizuje równieŝ zapis źródłowy pod kątem błędów składniowych (wyświetla rodzaj błędu oraz miejsce jego wystąpienia). Asembler jest programem tłumaczącym zapis kodów źródłowych z języka niskiego poziomu (języka asemblera) do kodu wynikowego w postaci relokowalnego (przemieszczalnego) modułu typu object (ang. object code). Moduły obj nie nadają się jeszcze do załadowania do pamięci mikrokontrolera. Linker jest narzędziem łączącym moduły typu obj oraz moduły biblioteczne w ostateczny nierelokowalny kod wynikowy, który moŝna załadować do pamięci mikrokontrolera i uruchomić. Usuwanie błędów merytorycznych z programu przeprowadza się za pomocą narzędzia zwanego debuggerem bądź symulatorem, który pozwala na śledzenie aplikacji krok po kroku i obserwację zmian w pamięci oraz w buforach urządzeń peryferyjnych mikrokontrolera. Debuggera nie naleŝy mylić z emulatorem układowym, który jest fizycznym urządzeniem współpracującym z komputerem i emulującym pracę mikrokontrolera. Obecnie na rynku dostępne są tzw. zintegrowane środowiska projektowe, łączące w jednej aplikacji wszystkie wspomniane powyŝej narzędzia (edytor kodów źródłowych, kompilator, asembler, linker i debugger). Przykładem takiego programu jest KEIL 8051 [3]. Jest to kompletny, wielozadaniowy system wspomagający projektowanie oprogramowania dla mikrokontrolerów rodziny 8051 i pochodnych. W zintegrowanym środowisku graficznym, pracującym w systemie Windows, łączy takie narzędzia jak: IDE 8051_251 platforma narzędziowa, SimCASE 8051_251 symulator/debugger, optymalizowany ANSI C kompilator, asembler skrośny, linker, menedŝer projektów, menedŝer bibliotek, IDE 8051_251 (ang. Integrated Development Environment) charakteryzuje się między innymi następującymi własnościami: moŝliwość edycji wielu zbiorów, wielofunkcyjny edytor z kolorowaniem elementów składni języka C, rozbudowany system memu i paski narzędzi, konfiguracja klawiszy skrótów, menedŝer aplikacji pozwalający uruchamiać inne programy, menedŝer projektów, kontrolujący zbiory naleŝące do projektu, okienka edycyjne konfigurujące ustawienia wszystkich narzędzi. 80

Rys. 1. Platforma narzędziowa IDE 8051 SimCASE 8051_251 jest debuggerem przeprowadzającym analizę programów kompilowanych przez IDE oraz symulującym wszystkie układy mikrokontrolera. Analiza moŝe odbywać się na poziomie asemblera, języka C oraz w trybie mieszanym. Pozwala na standardową procedurę debuggowania programów poprzez pracę krokową, zakładanie pułapek, symulację wymuszeń itp. Rys. 2. Debugger SimCASE 81

SimCASE jest środowiskiem graficznym z szeregiem konfigurowalnych przez uŝytkownika okienek dialogowych, będących właściwymi narzędziami analizy: okno debuggera, pokazujące kod źródłowy programu w trzech trybach wyświetlania, okienko poleceń wprowadzanych w linii poleceń, okienko śledzące zmianę zawartości rejestrów, okienko śledzące zawartość deklarowanych zmiennych, okienko wyświetlające dane wyprowadzane przez port szeregowy, okienko zawartości pamięci danych, symbol browser pozwala na analizę deklarowanych zmiennych lokalnych i globalnych oraz wszystkich deklarowanych funkcji wraz z ich parametrami, analizator wydajności pokazuje procentowy czas wykonywania deklarowanych funkcji w odniesieniu do czasu wykonywania programu, okienko wywołań stosu wyświetla aktualnie zagnieŝdŝone funkcje, code coverage informuje o procentowym udziale kodu deklarowanych funkcji w programie, okienko wywołań makr, definiowanych przez uŝytkownika w command window. 4. Kompilatory języka C/C++ Kompilatory C/C++ dla mikrokontrolerów są przewaŝnie kompilatorami skrośnymi (ang. cross compilers). Oznacza to, Ŝe kompilator pracuje na komputerze klasy PC i generuje kody dla mikrokontrolera określonego typu. Typowe kompilatory języka C/C++ dla mikrokontrolerów jednoukładowych posiadają następujące cechy [5]: dostęp do standardowych bibliotek ANSI C (stdio, ctype, math czy stdarg), implementacja typów ANSI C (unsigned, short, long, char, int, float, double, pointer) oraz typów związanych z architekturą mikrokontrolerów (np. typów bitowych lub typów definiujących rejestry specjalnego przeznaczenia), implementacja struktur, unii oraz tablic i typów wyliczeniowych, deklaracje funkcji rekurencyjnych i przerwań, implementacja róŝnych modeli pamięci (tiny, small, compact, large) z podziałem na obszar danych (data), programu (code), obszar pierwszych 256 bajtów danych (idata) oraz obszar pamięci zewnętrznej (xdata), dostęp do obszarów adresowanych bitowo, rejestrów specjalnego przeznaczenia SFR (ang. Special Function Register) i rejestrów ogólnego przeznaczenia, implementacja wskaźników o długości zaleŝnej od typu pamięci (np. 1-bajtowe w obszarze data i 2-bajtowe w obszarze xdata), optymalizacja kodu wynikowego (usuwanie nie wykonywanych fragmentów kodów, optymalizacja pętli, eliminacja powtarzających się fragmentów kodów, eliminacja niepotrzebnych skoków, łączenie uzaleŝnionych wyraŝeń arytmetycznych i logicznych, umieszczanie zmiennych w szybkich rejestrach mikrokontrolera, optymalizacja wyraŝeń zmiennoprzecinkowych). 5. Efektywność i jakość oprogramowania Istnieją dwie podstawowe metody programowania: za pomocą języka niskiego poziomu (asemblera) [4] i języka wysokiego poziomu [1]. Najnowsze środowiska systemów 82

wspomagających projektowanie oprogramowania dla mikrokontrolerów udostępniają obydwie wspomniane metody programowania. Wydajność i jakość oprogramowania uzaleŝniona jest od wielu czynników. Nie tylko od umiejętności i indywidualnego podejścia programisty, ale równieŝ od wybranej metody oraz przyjętego kryterium optymalizacji projektu. UŜywając wyłącznie języka wysokiego poziomu programista zyskuje przede wszystkim komfort pracy i oszczędność czasu spędzonego nad projektem aplikacji. Przejrzystość i oszczędność kodu źródłowego programów napisanych w języku wysokiego poziomu jest czynnikiem mającym duŝy wpływ na jakość aplikacji i efektywność procesu tworzenia oprogramowania. Dostępne obecnie na rynku kompilatory C/C++ dla mikrokontrolerów jednoukładowych dostarczają wielu zoptymalizowanych (pod względem szybkości lub rozmiaru kodu wykonywalnego) i zgodnych ze standardem ANSI C bibliotek, zawierających wiele róŝnorodnych funkcji (np. funkcji trygonometrycznych oraz innych funkcji przetwarzania danych). Wyręcza to programistę z obowiązku budowania takich procedur, co dalece upraszcza projektowanie oprogramowania dla mikrokontrolerów. W sytuacjach, kiedy kryterium jest szybkość wykonywania kodu nie moŝna niestety pominąć języków niskiego poziomu. Umiejętnie zaprojektowane w asemblerze procedury charakteryzują się duŝą szybkością działania i powinny być uŝywane w komunikacji mikrokontrolera z urządzeniami peryferyjnymi. Istnieją przypadki, kiedy naleŝy rezygnować ze standardowych funkcji bibliotecznych (nie zawsze dostatecznie zoptymalizowanych) dostarczanych przez kompilatory języków wysokiego poziomu na rzecz szybkich procedur asemblerowych. Dla przykładu na wykonanie bibliotecznej funkcji sin( ), dostarczanej przez większość kompilatorów mikrokontrolera C51, potrzeba ponad trzech tysięcy cykli maszynowych. 6. Hybrydowe metody projektowania oprogramowania Oprócz przedstawionych powyŝej dwóch podstawowych metod projektowania (w asemblerze i w językach wysokiego poziomu) istnieje metoda mieszana, łącząca zalety obu języków. Takie udogodnienie jest dostępne dla programisty pracującego w nowoczesnym, zintegrowanym środowisku graficznym. Język asemblera wykorzystuje się najczęściej w projektowaniu procedur współpracujących z otoczeniem sprzętowym mikrokontrolera [2], gdzie konieczna jest szybkość obsługi poszczególnych urządzeń oraz wymagana ścisła kontrola nad sygnałami sterującymi, przychodzącymi do i wychodzącymi z mikrokontrolera. Natomiast języki wysokiego poziomu stanowią najczęściej w tej metodzie element łączący w pewną logiczną całość procedury napisane w asemblerze. Wykorzystywane są w tych blokach programu, które odpowiedzialne są za wszelkiego rodzaju pętle i skoki warunkowe oraz funkcje wymagające odpowiedniej wiedzy i duŝego nakładu pracy przy ich projektowaniu (np. zmiennoprzecinkowe funkcje matematyczne log( ), exp( ), sqrt( ) itp.). Taki sposób podejścia do problemu programowania mikrokontrolerów jednoukładowych usprawnia proces budowy aplikacji. Daje jasny i przejrzysty kształt programu, a zarazem efektywność i szybkość spotykaną przy wykorzystaniu języków niskiego poziomu. 7. Wnioski Dotychczasowe rozwaŝania prowadzą do wniosku, Ŝe największą wydajnością, ale zarazem najniŝszym komfortem pracy podczas programowania, charakteryzują się aplikacje zaprojektowane całkowicie w asemblerze. Języki wysokiego poziomu dalece upraszczają 83

proces tworzenia aplikacji, ale nie do końca optymalizują kod wynikowy programu. Wobec powyŝszego często słusznym rozwiązaniem stają się hybrydowe metody projektowania oprogramowania z wykorzystaniem języków niskiego i wysokiego poziomu. Prawidłowo zaprojektowane i zapisane w języku asemblera aplikacje są bez wątpienia efektywne w działaniu (zwłaszcza w odniesieniu do problemów sterowania), jednak czytelność, stopień skomplikowania, długość kodu źródłowego oraz nakład pracy przeznaczony na zbudowanie programu, w wielu przypadkach dyskwalifikuje języki niskiego poziomu. Oferowane przez wiele firm kompilatory C/C++ dla mikrokontrolerów jednoukładowych, choć wydajne i wygodne, nie zawsze w dostatecznym stopniu, optymalizują kody wynikowe pod względem szybkości i rozmiaru. Wobec tego często słusznym rozwiązaniem są hybrydowe metody projektowania oprogramowania z wykorzystaniem języków niskiego i wysokiego poziomu. Literatura [1] Faison T.: Borland C++ 4.5 programowanie obiektowe, Oficyna wydawnicza READ ME, Warszawa 1996. [2] Gałka Paweł, Gałka Piotr.: Podstawy programowania mikrokontrolera 8051, Zakłady Nauczania Informatyki MIKOM, Warszawa 1995. [3] http://www.keil.com [4] Kruk S.: Programowanie w języku assembler, Wydawnictwo PLJ, Warszawa 1992. [5] Pełka R.: Mikrokontrolery - architektura, programowanie, zastosowania, Wydawnictwa Komunikacji i Łączności, Warszawa 1999. 84