Programowanie procesorów w języku C
dodatek do części 9: “Zmiany w avr-libc”
Uwaga: Pełny opis zmian (w języku angielskim) można znaleźć na stronie:
avr-libc 1.2 a 1.4 – najważniejsze różnice
1. Makro INTERRUPT (umożliwiające tworzenie przerwań obsługiwanych w taki sposób, że zaraz po ich
wywołaniu przerwania są odblokowywane) zostało oznaczone jako element do usunięcia i nie powinno już być
używane. Jeśli potrzebujesz takiej właśnie obsługi przerwania możesz wykorzystać zapis jak niżej:
void
NAZWA_PRZERWANIA(
void
) __attribute__((interrupt))
2. Wprowadzono nowe makro służące do tworzenia przerwań: ISR. Działa ono identycznie jak poprzednie
SIGNAL. Makro SIGNAL może zostać usunięte w przyszłych wersjach i nie powinno być już stosowane.
3. Praktycznie wszystkie dane z pliku <avr/signal.h> zostały przeniesione do pliku <avr/interrupt.h>.
Pierwszy z wymienionych plików jest aktualnie pusty i w następnych wersjach może zostać usunięty.
4. Został wprowadzony nowy plik nagłówkowy: <compat/deprecated.h>. Znajdują się w nim elementy
przeznaczone do usunięcia (takie jak makro INTERRUPT). Kompilacja starszych programów może wymagać
jego dodania, jeśli nie chcemy zmieniać kodu.
5. Część plików nagłówkowych została przeniesiona do katalogu util. Jedynym z przeniesionych plików,
który do tej pory był nam przydatny jest delay.h. W katalogu avr pozostał plik o nazwie delay.h, jednak
dołącza on swoją wersję z katalogu util jednocześnie generując ostrzeżenie.
6. Wprowadzone zostały nowe nazwy przerwań. Aktualnie stare oraz nowe nazwy będą współistniały. Nie
wyklucza się jednak usunięcia starych nazw. Nowe nazwy są krótsze w zapisie i o tyle wygodniejsze, że są
praktycznie odwzorowaniem nazw stosowanych przez firmę ATMEL, z dodanym przyrostkiem _vect.
Poniżej przedstawiam kilka przykładowych nazw wektorów przerwań AT90S2313 według nowego i starego
stylu:
7. Rozwinięta została biblioteka stdio. Umieszczenie definicji stałej __STDIO_FDEVOPEN_COMPAT_12
przed dołączeniem nagłówka <stdio.h> sprawia, że biblioteka staje się w dużej mierze kompatybilna ze
starszą wersją. Może się okazać to pomocne przy kompilacji starszych kodów.
7.0. Z funkcji fdevopen usunięto niewykorzystywany, trzeci parametr.
7.1. Funkcje put oraz get strumienia przyjmują teraz dodatkowy parametr, którym jest wskaźnik na obiekt
FILE powiązany ze strumieniem. Zostało to wprowadzone przede wszystkim na punkt następny.
7.2. Wprowadzona została funkcja fdev_set_udata() oraz fdev_get_udata() które dają możliwość
ustawienia oraz odczytania danej użytkownika znajdującej się w zmiennej FILE. Dana ta może zostać
wykorzystana w dowolny sposób. W połączeniu ze zmianą 7.1 daje to, między innymi, możliwość
wykorzystania tych samych funkcji put oraz get dla dwóch różnych urządzeń, rozróżnianych jedynie przez
daną użytkownika.
7.3. Zdefiniowano dokładnie wartości jakie może zwrócić funkcja get. _FDEV_ERR – błąd, _FDEV_EOF –
koniec pliku. Powodują one odpowiednie zachowanie funkcji czytających.
7.4. Wprowadzone zostało makro fdev_setup_stream() umożliwiające powiązanie strumienia z plikiem bez
pośrednictwa dynamicznej alokacji pamięci. Makro FDEV_SETUP_STREAM() umożliwia z kolei inicjację
tworzonej zmiennej typu FILE. W ten sposób udostępniona została nam funkcjonalność której poszukiwaliśmy
w poprzedniej części.
Jednocześnie, aby makra te mogły działać prawidłowo, struktura FILE została zdeklarowana jawnie w pliku
stdio.h.
Wersja przeznaczona do bezpłatnego udostępnienia poprzez stronę
). Jeśli
pobrałeś ten plik z innego miejsca – proszę, poinformuj mnie o tym:
. Jeśli chcesz umieścić ten plik na
swojej stronie lub masz jakieś uwagi – skontaktuj się ze mną.
-1/1-
Nowy styl
S tary styl
SIG_COMPARAT OR
SIG_INT ERRUPT 0
SIG_INT ERRUPT 1
...
ANA_COMP_vect
INT 0_vect
INT 1_vect
T IMER0_OVF_vect
SIG_
OVERFLOW0
T IMER1_CAPT 1_vect
SIG_INPUT _
CAPTURE1