I. | Wprowadzenie do języka C. Podstawowe założenia i główne zalety |
II. | Przekształcanie programu źródłowego w program wynikowy 1. Preprocessing. 2. Kompilacja. 3. Konsolidacja. |
III. | Podstawy obsługi środowiska GNU-GCC |
IV. | Struktura programu w języku C 1. Funkcja main( ). 2. Deklaracje zmiennych. Wbudowane typy danych. 3. Wywoływanie funkcji. 4. Operatory arytmetyczne, logiczne i bitowe. 5. Instrukcje warunkowe. 6. Pętle. |
V. | Preprocesor 1. Makrodefinicje. 2. Kompilacja warunkowa. 3. Makra parametryzowane. |
VI. | Funkcje 1. Definiowanie i wywoływanie funkcji. 2. Zmienne lokalne. 3. Przekazywanie parametrów funkcji przez wartość. 4. Budowa ramki stosu na przykładzie procesorów Intel x86 i ColdFire. 5. Rekurencyjne wywoływanie funkcji. |
VII. | Wskaźniki 1. Deklarowanie i używanie wskaźników do zmiennych. 2. Tablice. 3. Wskaźniki do wskaźników. 4. Wskaźniki do funkcji. 5. Przekazywanie parametrów funkcji przez wskaźnik. 6. Funkcje zwracające wskaźniki. |
VIII. | Zmienne statyczne i globalne. |
IX. | Dynamiczna alokacja pamięci 1. Funkcje malloc( ), free( ) i realloc( ). 2. Dynamiczna alokacja pojedynczych zmiennych. 3. Dynamiczna alokacja tablic jedno- i wielowymiarowych. |
X. | Struktury i unie 1. Definiowanie struktur w języku C. 2. Deklarowanie konketyzacji struktur. 3. Odwoływanie się do pól struktury przez nazwę oraz przez wskaźnik do struktury. 4. Dynamiczna alokacja struktur. 5. Różnice pomiędzy strukturą a unią. |
XI. | Kompilacja wsadowa z wykorzystaniem programu make 1. Plik makefile i jego ogólna struktura (reguły, polecenia). 2. Tworzenie programów wielomodułowych z wykorzystaniem programu make. 3. Przekazywanie parametrów kompilacji i konsolidacji. 4. Definiowanie domyślnych reguł kompilacji dla poszczególnych rozszerzeń plików. |
XII. | Narzędzia służące do analizowania i uruchamiania
programów w środowisku GNU 1. Korzystanie z debuggera gdb do uruchamiania programów i lokalizowania błędów. 2. Korzystanie z narzędzi nm i objdump do analizy i diagnostyki programów. |
XIII. | Biblioteki języka C (na przykładzie systemu
operacyjnego Linux) 1. Biblioteki statyczne i dynamiczne. 2. Kompilacja bibliotek i ich konsolidacja z programem. 3. Korzystanie z narzędzia ar do tworzenia bibliotek oraz modyfikacji bibliotek |
XIV. | Kompilacja skrośna na przykładzie procesora ColdFire
1. Struktura pliku makefile dla kompilacji skrośnej. 2. Skrypty konsolidatora dla kompilacji skrośnej. 3. Zdalne i skrośne uruchamianie i debuggowanie programów przy pomocy debuggera gdb w wersji skrośnej na procesor ColdFire. |
XV. | Programowanie mikrokontrolerów w języku C (na
przykładzie ColdFire) 1. Odczyt i zapis danych do/z rejestrów procesora zamapowanych na pamięć. Używanie dyrektywy volatile do zablokowania optymalizacji tych zapisów i odczytów. 2. Używanie wstawek asemblerowych do odczytywania z bądź zapisywania do rejestrów, które nie są zamapowane na pamięć. 3. Obsługa urządzeń wbudowanych w mikrokontroler ColdFire (portu równoległego, interfejsu szeregowego SCI, timera). |
XVI. | Obsługa przerwań w procesorze Freescale ColdFire z
poziomu języka C, w środowisku GNU 1. Schemat obsługi przerwań na przykładzie procesora ColdFire. 2. Wektory przerwań. Zmiana lokalizacji tablicy wektorów przerwań. Modyfikacja rejestru bazowego VBR za pomocą wstawki asemblerowej (instrukcja MOVEC). 3. Specyfika procedur przerwania. Dodatkowe wymagania z tym związane. 4. Blokowanie użycia określonych rejestrów procesora przez procedurę przerwania za pomocą opcji kompilatora -ffixed-%ax. 5. Zabezpieczanie na stosie zawartości rejestrów używanych przez procedurę przerwania przy pomocy opcji kompilatora -fcall-saved-%ax lub wstawek asemblerowych (instrukcja asemblera MOVEM). 6. Blokowanie optymalizacji dostępu do danych, które mogą zostać zmodyfikowane przez procedurę obsługi przerwania w trakcie działania innej funkcji, przy pomocy dyrektywy volatile. 7. Obsługa przerwania na przykładzie interfejsu SCI. 8. Potencjalne problemy związane z jednoczesnym, współbieżnym dostępem do tych samych danych. Sposoby unikania tych problemów. |
XVII. | Struktura plików binarnych. Formaty plików wykonywalnych: S-record, COFF i ELF |
Laboratorium składa się z dwóch częsci. Część pierwsza polega na nauce pisania programów w języku C na komputer klasy PC. Część druga polega na programowaniu mikrokontrolera ColdFire w języku C. Zajęcia będą przebiegać zgodnie z poniższym harmonogramem:
Zapoznanie ze środowiskiem GNU i kompilatorem GNU-GCC | 1h |
Tworzenie elementarnych programów w języku C
| 1h |
Implementacja przykładowych funkcji standardowych:
| 2h |
Program implementujący stos liczb całkowitych o zmiennej długości, z zastosowaniem struktur i dynamicznej alokacji pamięci | 2h |
Program obliczający wyznacznik macierzy o dowolnym rozmiarze wczytywanej z pliku tekstowego, z zastosowaniem dynamicznej alokacji pamięci i rekurencyjnego wywoływania funkcji | 4h |
Program obliczający wyznacznik macierzy w wersji wielomodułowej (main.c, det.c, alloc.c) i jego kompilacja przy pomocy programu make: | 2h |
Program obliczający wyznacznik macierzy w wersji wielomodułowej, w którym
algorytm obliczeniowy jest zaimplementowany w postaci:
| 2h |
Skrośna kompilacja programów w języku C na mikrokontroler ColdFire oraz ładowanie i zdalne uruchamianie na nim programów przez kanał BDM przy pomocy skrośnego debuggera gdb-bdm | 1h |
Napisanie i uruchomienie na mikrokontrolerze prostego programu wysyłającego tekst przez kanał szeregowy, z wykorzystaniem biblioteki lib528x | 1h |
Zegar wyświetlający czas na panelu LED, ustawiany przy pomocy klawiatury komputera PC (z wykorzystaniem biblioteki lib528x ), odmierzający czas przez ciągłe sprawdzanie stanu timera | 2h |
Program wysyłający ciąg znaków przez kanał szeregowy, nie korzystający z żadnych bibliotek, automatycznie dopasowujący się do rzeczywistej częstotliwości zegara procesora | 2h |
Zegar wyświetlający czas na panelu LED, ustawiany przy pomocy klawiatury komputera PC (z wykorzystaniem biblioteki lib528x ), w wersji odmierzającej czas dzięki przerwaniom generowanym przez timer | 2h |
Program odbierający znaki z kanału szeregowego, wykorzystujący przerwania
generowane przez SCI
| 4h |
Zaliczenie laboratorium odbywa się na podstawie ocen cząstkowych wystawianych za wykonanie każdego ćwiczenia, odnotowanych w dzienniku pracy w laboratorium .