Programowanie mikrokontrolerów rodziny AVR. Narzdzia rozwojowe



Podobne dokumenty
Komunikacja w mikrokontrolerach. Podstawy programowania. Wydział Elektroniki Mikrosystemów i Fotoniki dr inż. Piotr Markowski

Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wskaźniki do funkcji. Wykład 11. Podstawy programowania ( język C ) Wskaźniki do funkcji (1) Wskaźniki do funkcji (2)

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h >

Ghost in the machine

Biblioteka standardowa - operacje wejścia/wyjścia

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Tablice, funkcje - wprowadzenie

Funkcje matematyczne w C. Programowanie w C Marek Pudełko

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Podstawy programowania w języku C++

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Funkcja (podprogram) void

wer. 7 z drobnymi modyfikacjami Wojciech Myszka :48:

3 Przygotował: mgr inż. Maciej Lasota

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Podstawy programowania. Wykład Funkcje raz jeszcze. Biblioteka standardowa. Krzysztof Banaś Podstawy programowania 1

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Podstawy programowania w języku C++

Podstawy programowania w języku C++

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Stałe. Funkcje standardowe. Niektóre stałe i funkcje z pliku nagłówkowego math.h. M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

W języku C każdy plik fizyczny jest ciągiem bajtów, z których każdy może być niezależnie odczytany. Borland 01234

Pliki. Informacje ogólne. Obsługa plików w języku C

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Pliki. Informacje ogólne. Obsługa plików w języku C

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Stałe i zmienne znakowe. Stała znakowa: znak

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

MATERIAŁY POMOCNICZE PODSTAWY PROGRAMOWANIA Na podstawie: Programowanie w C - Stworzone na Wikibooks, bibliotece wolny podręczników

Szkic wykładu Wstęp do Informatyki - wykład 3,4,5 język C opr. A. Piórkowski, Kraków 2004

PODSTAW PROGRAMOWANIA WYKŁAD 7 ŁAŃCUCHY

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

2 Przygotował: mgr inż. Maciej Lasota

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Tablice w argumentach funkcji. Tablicy nie są przekazywane po wartości Tablicy są przekazywane przez referencje lub po wskaźniku

Programowanie w językach wysokiego poziomu

Programowanie Proceduralne

Język C : szkoła programowania / Stephen Prata. Gliwice, cop Spis treści

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

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

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Operacje na plikach (niskiego poziomu) < IO.H >

Podstawy programowania w języku C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 11. Elektrotechnika, semestr II rok akademicki 2008/2009

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Programowanie Proceduralne

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Operacje na łańcuchach znaków

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Operacje wejścia/wyjścia odsłona pierwsza

Plik jest reprezentowany przez strumień znaków (bajtów) o zmiennej długości. Koniec strumienia identyfikowany jest znacznikiem końca pliku EOF.

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

PODSTAWY PROGRAMOWANIA W C. Bibliografia W-1. Dr. Inż. Hab. Siergiej Fialko, PK,

Struktura programu. Słowa kluczowe. Komentarze. Zmienne

argumenty wiersza poleceń: getopt

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

dr inż. Jarosław Forenc

Język C. Szkoła programowania. Wydanie VI

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Struktury czyli rekordy w C/C++

Języki programowania. Karolina Mikulska-Rumińska Pokój 573, tel Konsultacje wtorek 9-10.

PROGRAMOWANIE w C prolog

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Wstęp do Programowania, laboratorium 02

Języki i metody programowania I

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

Podział programu na moduły

Kompilator języka C na procesor 8051 RC51 implementacja

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

Programowanie strukturalne język C - wprowadzenie

Strumienie i pliki. Programowanie Proceduralne 1

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wstęp do programowania 1

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Języki programowania wysokiego poziomu. PHP cz.2.

Podstawy programowania C. dr. Krystyna Łapin

Tablice deklaracja, reprezentacja wewnętrzna

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

ZMIENNE P R O G R A M O W A N I E C + +

Operacje powiązane z systemem:

Politechnika Białostocka, Wydział Elektryczny, Katedra Elektrotechniki Teoretycznej i Metrologii ul. Wiejska 45D, Białystok

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Co nie powinno być umieszczane w plikach nagłówkowych:

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

Programowanie mikrokontrolerów rodziny AVR Narzdzia rozwojowe 1

AVR-GCC AVR-GCC jest darmowym kompilatorem jzyka C (licencja GNU) słucym do pisania programów dla mikrokontrolerów serii AVR firmy ATMEL. Kompilator jest dołczany do rodowiska AVR Studio, pozwalajc na tworzenie projektów programistycznych w jzyku C/C++ 2

Programy narzdziowe - Binutils Jest to zbiór programów pozwalajcych na sprawne zarzdzanie projektem. Binutils s dołczone do rodowiska rozwojowego i wraz z kompilatorem AVR-GCC oraz bibliotek avr-libc stanowi kompletny łacuch narzdzi rozwojowych 3

Programy narzdziowe - Binutils Dostpne s nastpujce programy narzdziowe: avr-as - asembler avr-ld - linker avr-ar - zarzdza bibliotekami avr-ranlib generuje indeksy do bibliotek avr-objcopy kopiuje i tłumaczy zbiory obiektowe avr-objdump wywietla informacje z plików obiektowych avr-size podaje informacj o rozmiarze sekcji i programu avr-nm listuje symbole ze zboiru obiektowego avr-strings listuje łacuch znakowe ze zbiorów obiektowych avr-strip usuwa symbole avr-readelf wywietla zawarozbioru z rozszerzeniem ELF avr-addr2line konwertuje adresy avr-c++filt filtr symboli C++ 4

avr-libc jest standardow bibliotek C dla AVR-GCC. Biblioteka zawiera wiele standardowych funkcji C i właciwych dla architektury procesorów rodziny AVR. Dodatkowo biblioteka pozwala na tworzenie kodu startowego programu. 5

Mikrokontrolery spierane przez bibliotek avr-libc w wersji 1.4.7: megaavr: atmega103 atmega128 atmega1280 atmega1281 atmega16 atmega161 atmega162 atmega163 atmega164p atmega165 atmega165p atmega168 atmega168p atmega2560 atmega2561 atmega32 atmega323 atmega324p atmega325 atmega325p atmega3250 atmega3250p atmega328p atmega48 atmega48p atmega64 atmega640 atmega644 atmega644p atmega645 atmega6450 atmega8 atmega88 atmega88p atmega8515 atmega8535 6

Mikrokontrolery spierane przez bibliotek avr-libc w wersji 1.4.7: tinyavr: attiny11 attiny12 attiny13 attiny15 attiny22 attiny24 attiny25 attiny26 attiny261 attiny28 attiny2313 attiny43u attiny44 attiny45 attiny461 attiny48 attiny84 attiny85 attiny861 CAN AVR: at90can32 at90can64 at90can128 LCD AVR: atmega169 atmega169p atmega329 atmega329p atmega3290 atmega3290p atmega649 atmega6490 Lighting AVR: at90pwm1 at90pwm2 at90pwm2b at90pwm216 at90pwm3 at90pwm3b at90pwm316 Smart Battery AVR: atmega8hva atmega16hva atmega406 7

Mikrokontrolery spierane przez bibliotek avr-libc w wersji 1.4.7: Standardowe AVR: at90s1200 at90s2313 at90s2323 at90s2333 at90s2343 at90s4414 at90s4433 at90s4434 at90s8515 at90c8534 at90s8535 attiny461 attiny48 attiny84 attiny85 attiny861 USB AVR: at90usb82 at90usb162 at90usb646 at90usb647 at90usb1286 at90usb1287 Inne: at94k at76c711 at43usb320 at43usb355 at86rf401 8

Moduły biblioteki avr-libc w wersji 1.4.7: <alloca.h> - alokujacja pamici stosu <assert.h> - diagnostyka <ctype.h> - operacje na znakach <errno.h> - obsługa błdów <inttypes.h> - konwersje typów całkowitych <math.h> - funkcje matematyczne <setjmp.h> - długie skoki <stdint.h> - definicje standardowych typów całkowitych <stdio.h> - standardowa biblioteka wejcia/wyjcia <stdlib.h> - funkcje standardowe <string.h> - funkcje operujce na łacuchach <avr/boot.h> - narzdzia wspierajce funkcje bootloadera <avr/eeprom.h> - funkcje dostpu do wewntrznej pamici EEPROM <avr/interrupt.h> - funkcje obsługi przerwa <avr/io.h> - definicje rejestrów i bitów I/O (dołcza właciwe dla danego uc) <avr/pgmspace.h> - fukncje dostpu do pamici programu <avr/power.h> - funkcje zarzdzania energi <avr/sfr_defs.h> - funkcje operujce na rejestrach funkcyjnych 9

Moduły biblioteki avr-libc w wersji 1.4.7, cd: <avr/sleep.h>- funkcje zarzdzania trybami energooszczdnymi <avr/version.h> - makra wersji <avr/wdt.h> - funkcje obsługi Watchdoga <util/crc16.h> - obliczanie sum CRC <util/delay.h> - funkcje realizujce opónienia <util/delay_basic.h> - funkcje realizujce podstawowe opónienia <util/parity.h> - generowanie bitu parzystoci <util/twi.h> - definicje masek interfejsu TWI <compat/deprecated.h>- informacje o przestarzałych funkcjach <compat/ina90.h> - funkcje zapewniajce kompatybilno z IAR EWB 3.x Projekty przykładowe: kompilacja plików C i asemblerowych prosty projekt projekt bardziej złoony uywanie standardowych narzdzi I/O przykład uycia interfejsu TWI 10

Przykłady funkcji modułu <ctype.h> int isalpha (int c ) sprawdza, czy dana jest znakiem alfanumercznym int isascii (int c ) sprawdza, czy dana jest znakiem ASCII int isblank (int c ) - sprawdza, czy dana jest znakiem spacji lub tabulacji int isdigit (int c ) - sprawdza, czy dana jest cyfr dziesitn int toascii (int c ) konwertuje dan do znaku ASCII int tolower (int c ) - konwertuje wielk liter do małej int toupper (int c ) - konwertuje liter mał do wielkiej 11

Przykłady funkcji modułu <math.h> Trygonometryczne: double acos (double x ) arcus cosinus double asin (double x ) arcus sinus double atan (double x ) arcus tangens double atan2 (double y, double x ) arcus tangens x/y w danej wiartce double cos (double x ) - cosinus double cosh (double x ) cosinus hiperboliczny double sin (double x ) - sinus double sinh (double x ) sinus hiperboliczny double tan (double x ) - tangns double tanh (double x ) arcus tangens 12

Przykłady funkcji modułu <math.h> Zaokrglenia: double ceil (double x ) zaokrglenie w gór double floor (double x ) zaokrglenie w dół Potgi i pierwiastki: double exp (double x ) - eksponent double ldexp (double x, int exp ) iloczyn liczby x i potgi exp liczby 2 double pow (double x, double y ) potga y liczby x double square (double x ) kwadrat x double sqrt (double x ) pierwiastek kwadratowy x 13

Moduł <stdio.h> W module s implementowane podstawowe operacje I/O. Ze wzgldu na brak typowych urzdze wejcia wyjcia zakłada si kojarzenie strumieni I/O z jednym z portów szeregowych mikrokontrolera. Definicje: #define FILE struct file #define stdin ( iob[0]) #define stdout ( iob[1]) #define stderr ( iob[2]) #define EOF (-1) #define fdev_set_udata(stream, u) do { (stream)->udata = u; } while(0) #define fdev_get_udata(stream) ((stream)->udata) #define fdev_setup_stream(stream, put, get, rwflag) 14

Moduł <stdio.h> Definicje, cd: Biblioteka avr-libc #define _FDEV_SETUP_READ SRD #define _FDEV_SETUP_WRITE SWR #define _FDEV_SETUP_RW ( SRD SWR) #define _FDEV_ERR (-1) #define _FDEV_EOF (-2) #define FDEV_SETUP_STREAM(put, get, rwflag) #define fdev_close() #define putc( c, stream) fputc( c, stream) #define putchar( c) fputc( c, stdout) #define getc( stream) fgetc( stream) #define getchar() fgetc(stdin) 15

Funkcje modułu <stdio.h> int fclose (FILE * stream) int vfprintf (FILE * stream, const char * fmt, va_list ap) int vfprintf_p (FILE * stream, const char * fmt, va_list ap) int fputc (int c, FILE * stream) int printf (const char * fmt,...) int printf_p (const char * fmt,...) int vprintf (const char * fmt, va_list ap) int sprintf (char * s, const char * fmt,...) int sprintf_p (char * s, const char * fmt,...) int snprintf (char * s, size_t n, const char * fmt,...) int snprintf_p (char * s, size_t n, const char * fmt,...) int vsprintf (char * s, const char * fmt, va_list ap) int vsprintf_p (char * s, const char * fmt, va_list ap) int vsnprintf (char * s, size_t n, const char * fmt, va_list ap) int vsnprintf_p (char * s, size_t n, const char * fmt, va_list ap) int fprintf (FILE * stream, const char * fmt,...) int fprintf_p (FILE * stream, const char * fmt,...) 16

Funkcje modułu <stdio.h>, cd. int fputs (const char * str, FILE * stream) int fputs_p (const char * str, FILE * stream) int puts (const char * str) int puts_p (const char * str) size_t fwrite (const void * ptr, size_t size, size_t nmemb, FILE * stream) int fgetc (FILE * stream) int ungetc (int c, FILE * stream) char * fgets (char * str, int size, FILE * stream) char * gets (char * str) size_t fread (void * ptr, size_t size, size_t nmemb, FILE * stream) void clearerr (FILE * stream) int feof (FILE * stream) int ferror (FILE * stream) 17

Funkcje modułu <stdio.h>, cd. int vfscanf (FILE * stream, const char * fmt, va_list ap) int vfscanf_p (FILE * stream, const char * fmt, va_list ap) int fscanf (FILE * stream, const char * fmt,...) int fscanf_p (FILE * stream, const char * fmt,...) int scanf (const char * fmt,...) int scanf_p (const char * fmt,...) int vscanf (const char * fmt, va_list ap) int sscanf (const char * buf, const char * fmt,...) int sscanf_p (const char * buf, const char * fmt,...) int fflush (FILE *stream) FILE * fdevopen (int(*put)(char, FILE *), int(*get)(file *)) 18

Ograniczenia funkcji modułu <stdio.h>: Ze wzgldu na brak systemu operacyjnego nie ma faktycznej implementacji systemu plików Standardowe strumienie stdin, stdout i stderr s dostpne, ale musz by otwarte za pomoc funkcji fdevopen(), kojarzcej strumie z urzdzeniem wysyłajcym i odbierajcym znaki Implementacja funkcji printf() i scanf() jest skomplikowana i nie zaleca si ich uywa (zamiast nich wskazane jest uywa: vprintf() i vscanf() ) 19

Przykładowy program korzystajcy z modułu <stdio.h>: #include <stdio.h> static int uart_putchar(char c, FILE *stream); static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); static int uart_putchar(char c, FILE *stream) { if (c == '\n') uart_putchar('\r', stream); loop_until_bit_is_set(ucsra, UDRE); UDR = c; return 0; } int main(void) { init_uart(); stdout = &mystdout; printf("hello, world!\n"); return 0; } 20

Moduł <avr/io.h> Moduł zawiera definicje rejestrów bitów i kocówek I/O dla mikrokontrolera W rzeczywistoci dołczony zostaje moduł <avr/ioxxxx.h> definiujcy I/O wybranego mikrokontrolra na podstawie opcji wywołania kompilatora -mmcu= typ_mikrokontrolera Moduł dołcza moduły: avr/sfr_defs.h, avr/portpins.h, avr/common.h i avr/version.h W module s zdefiniowane makra: RAMEND stała bdca adresem ostatniej komórki pamici RAM XRAMEND - stała bdca adresem ostatniej komórki zewntrznej pamici RAM E2END stała bdca adresem ostatniej komórki pamici EEPROM FLASHEND stała bdca adresem ostatniej komórki pamici FLASH SPM_PAGESIZE stała okrelajca rozmiar pamici bootloadera w bajtach 21

Moduł <stdlib/io.h> Moduł zawiera definicje makr i funkcji wymaganych przez standard jzyka i właciwych dla mikrokontrolerów AVR. Struktury danych: struct div_t, struct ldiv_t Funkcje niestandardowe: char * ltoa (long int val, char * s, int radix) char * utoa (unsigned int val, char * s, int radix) char * ultoa (unsigned long int val, char * s, int radix) long random (void)void srandom (unsigned long seed) long random_r (unsigned long * ctx) char * itoa (int val, char * s, int radix) 22

Moduł <stdlib/io.h> Stałe: #define RANDOM_MAX 0x7FFFFFFF Funkcje konwersji dla argumentów podwójnej precyzji: (umieszczone w module libm.a, dołczanej opcj wywołania kompilatora: -lm) char * dtostre (double val, char * s, unsigned char prec, unsigned char flags) char * dtostrf (double val, signed char width, unsigned char prec, char * s) #define DTOSTR_ALWAYS_SIGN 0x01 #define DTOSTR_PLUS_SIGN 0x02 #define DTOSTR_UPPERCASE 0x04 23

Moduł <stdlib/io.h> Definicje: #define RAND_MAX 0x7FFF typedef int(*) compar_fn_t (const void *, const void *) Funkcje: void abort (void) ATTR_NORETURN int abs (int i) long labs (long i) void * bsearch (const void * key, const void * base, size_t nmemb, size_t size, int(* compar)(const void *, const void *)) div_t div (int num, int denom) asm (" divmodhi4") ldiv_t ldiv (long num, long denom) asm (" divmodsi4") void qsort (void * base, size_t nmemb, size_t size, compar_fn_t compar) long strtol (const char * nptr, char ** endptr, int base) unsigned long strtoul (const char * nptr, char ** endptr, int base) long atol (const char * s) ATTR_PURE int atoi (const char * s) ATTR_PURE void exit (int status) ATTR_NORETURN 24

Moduł <stdlib/io.h> Funkcje, cd: void * malloc (size_t size) ATTR_MALLOC void free (void * ptr) void * calloc (size_t nele, size_t size) ATTR_MALLOC void * realloc (void * ptr, size_t size) ATTR_MALLOC double strtod (const char * nptr, char ** endptr) double atof (const char * nptr) int rand (void) void srand (unsigned int seed) int rand_r (unsigned long * ctx) Zmienne: size_t malloc_margin char * malloc_heap_start char * malloc_heap_end 25

Makra modułu <interrupt.h> sei() załcza system przerwa cli() wyłcza system przerwa EMPTY_INTERRUPT (vector ) puste przerwanie (tylko powrót) ISR (vector ) procedura obsługi przerwania o podanym wektorze ISR_ALIAS (vector, target_vector ) powtórzenie obsługi dla nowego wektora reti() powrót z procedury obsługi przerwania Moliwe kombinacje parametrów: ISR(vector, ISR_NOBLOCK) - procedura obsługi przerwania nie blokuje kolejnych przerwa ISR(vector, ISR_NAKED) - procedura obsługi przerwania definiowana w pełni przez uytkownika (równie prolog i epilog) 26

Uycie makr modułu <interrupt.h> Przykład: ISR(INT0_vect) { PORTB = 42; } ISR_ALIAS(INT1_vect, INT0_vect); 27