wyglądać jak | |
w ramce obok: | |
Pole SRC | |
powinno za- | |
wierać pliki |
SRC - $ (TARGET). C |
ABC... C
Przygotowanie pliku makefile do kompilacji wielu plików źródłowych
Potrzebna nam modyfikacja jest bardzo prosta. W przyszłości powinieneś wprowadzać ją jednocześnie z dodawaniem nowego pliku źródłowego do projektu... ale do rzeczy.
Otwórz w Programincrs Notepadzie plik makefile naszego projektu. Zaraz poniżej pola TARGET powinieneś znaleźć pole SRC. Na początku powinno to jcktu oddzielone spacjami. Domyślnie w lym miejscu pojawia się nazwa projektu z rozszerzeniem *.c. Ma to sens przy pisaniu całego programu w jednym pliku źródłowym. Jednak w większych projektach staraj się raczej nie nadawać plikom źródeł, nazw identycznych z projektem • nic jest to błąd, ale może utrudnić orientację.
Kasujemy więc fragment ostatniej linii i zmieniamy jej postać na następującą:
SRC = ntain.c src += i2c.c \
Icd.c \
Po znakach ukośników musi znaleźć się znak końca linii. Wprowadzenie lulaj spacji spowoduje błąd poilczas kompilacji.
Całość mógłbyś zapisać także w jednej linii. Można też przepisać wszystkie pliki od razu, bez wykorzystywania operatom jak w drugiej linii. Jest to kwesria gustu: przywykłem do umieszczania na początku pliku głównego oraz wyraźnego zaznaczania, że reszta plików została „dodana". Kolejność wpisania plików nic ma znaczenia. Jeśli gdziekolwiek znajduje się funkcja, od której program ma zacząć -linkier ją odnajdzie.
W tej chwili jesteś golowy do kompilacji programu.
Uważaj, nawet jeśli Twój system operacyjny nic rozróżnia wielkości znaków, dla WinAVR ma to znaczenie. Wpisz nazwy plików identyczne z tymi, jakie zostały im nadane.
dodatkowego pola. Zajrzyj do ostatniej już dzisiaj ramki ABC... C. Znajdziesz tam dokładny opis, co należy zrobić, aby program zaczął działać.
Jeśli zgodnie z opisem dodawałeś kolejno wszystkie pliki do projektu, panel po lewej stronie okna Programmers Notepada będzie coraz mniej czytelny. Jak podoba Ci się sposób organizacji widocznych w nim wpisów przedstawiony na rysunku 34? Zapewniam Cię, że znakomicie uprzyjemnia to pracę. Możesz tworzyć „katalogi” w okienku projck-
Rysunek 33 - konfiguracja PCF8591
I 1 A/D CHANNEL NUM3ER
00 chnmeio
tu, klikając prawym klawiszem na nazwie, jaka została mu nadana. Wybierz „Add New Folder”. Pliki możesz przenosić przez ich przeciągnięcie na ikonkę wybranego katalogu. Aby przenieść plik z wnętrza katalogu na zewnątrz, przenieś jego nazwę na ikonę projektu. Tworzony katalog i wykonane przenoszenie nie ma nic wspól-
_ nego 7. katalogami na
dysku. Umożliwia jedynie wirtualne zorganizowanie plików w obrębie projektu. Fizycznie pliki pozostaną na swoich miejscach.
Rzeczywiste odwzorowanie struktury katalogów między dyskiem a oknem projektu umożliwia „Magie Folder”. Nie polecam Ci jednak jego stosowania - wymagałoby to dodatkowej ingerencji w plik makefile.
Jeśli udało Ci się napisać na podstawie tego tekstu program całkowicie samodzielnie - bardzo mnie to cieszy. Jeśli jednak program nie chce się uruchomić - zawsze możesz sięgnąć do plików’ udostępnionych na stronic internetowej Elporlalu. Zdaję sobie sprawę z tego, że dla niektórych takie programowanie wyda się niepotrzebnie skomplikowane. Celowo nic wprowadzałem go na początku. Proste programy możesz pisać w jednym pliku. Jednak im program większy, tym sen-sowniejsze staje się jego dzielenie. Znacznie łatwiej zapanować nad dwudziestoma plikami po tysiąc linii kodu każdy niż nad jednym plikiem z dwudziestoma tysiącami linii kodu (przykład z życia wzięty).
Od dzisiaj będziemy dzielić program na części wszędzie tam, gdzie ma to sens. Myślę, że o ile nie jesteś jeszcze przekonany, zaczniesz dostrzegać wkrótce coraz więcej zalet takiego programowania. Spróbuj powrócić do programu za dwa dni i zobacz, czy jeszcze pamiętasz, gdzie znajdują się poszczególne elementy kodu. Zajrzyj do programów1, które pisaliśmy poprzednio w pojedynczych plikach.
Nasz program mimo tego, że jest coraz bardziej rozwinięty, temat głównego bohatera dzisiejszego ćwiczenia traktuje dość skrótowo. Jeśli chcesz poćwiczyć swoją znajomość C, proponuję Ci rozwinięcie tej części progra-
1. Podana w dokumentacji szybkość transmisji układu PCF8591 to lOOkbps. Sprawdź co się stanie przy wyższych częstotliwościach.
2. Zauważ, że w programie nie sprawdzamy, czy układ odpowiedział zgłoszeniem ACK. Do badania poprawności transmisji wykorzystaj fakt, żc funkcja i2c_get zwraca wartość 0 tylko, jeśli potwierdzenie zostało odebrane.
3. Dopisz dwie funkcje do modułu i2c, które zajmą się transmisją pełnych ramek. Podpowiedz: wykorzystaj istniejące funkcje i2c_send oraz i2c_get. Nowe funkcje powinny przyjmować adres, pod jaki dokonać zapi-su/odczytu, wskaźnik na tablicę, do której umieścić/z której pobrać dane oraz informację o ilości danych do odczytu/zapisu. Pamiętaj, aby nic generować potwierdzenia po ostatnim odczytanym bajcie.
4. Spróbuj uruchomić przetwornik cyfrowo--analogowy. W tym celu konieczne jest przesłanie kolejno danych 90h, 40h oraz danej, która zostanie zapisana w rejestrze przetwornika.
5. Może uda Ci się napisać cały, nowy moduł zajmujący się transmisją specjalnie do i z naszego przetwornika? Pamiętaj, że w takim przypadku musisz zapamiętać gdzieś bajt konfiguracji, tak aby było możliwe jego potwierdzanie przy każdej zmianie wartości wpisanej do przetwornika cyfrowo-analogowego. A może funkcja zapisu wymagałaby podania konfiguracji przy wywołaniu?
Radosław Koppel
48 Grudzień 2005 Elektronika dla Wszystkich
- ANALOGUE OUTPUT ENABLE FLAG: