Image243

Image243



Programowanie



część 7

Listing 53 - plik rs.c

#incltde <avr\io.h> finclude „rs.h1

1nt rs_put(char znak)

// Oczekiwanie aż bufor nadajni<a jest pusty MfhileCl (l«UCRE0 & ucsroa)) {}

UDRO ■ znak? return 0;


1nt rs get(VOld)

{

char znak;

// Oczekiwanie na pojawienie się danej whileCI (l«axco & ucsroa)) {}

znak - UDRO; return znak;

)


#    Processor frequency.

#    Thls will    define a symbol, F_CPU,    1n all source CDde    flles equal    tD the

#    processor    frequency. you can then    use thls symbol 1n    ycur source    codę tc

#    calculate    tlmings. Do not tack on    a 'ul1 at the end,    tMs will be done

#    auumar    lly to create a 32-b1t value 1n your source codę.

f_cpu -Qoqoocq^


A M<r r snnrrp fJles horę. (c dependencies arp aurnmarlcally generared.) SRC <Ęa1 n. O


Dziś zajmiemy się czymś, od czego zaczyna się większość książek o C dla „dużych komputerów”. Dlaczego dopiero teraz? Wspominałem już o tym i napiszę raz jeszcze: mikrokontrolery rządzą się innymi prawami niż stacje robocze. Tam gdzie w stacji roboczej występuje BIOS oraz System Operacyjny, sprawiające razem, że wypisanie informacji na ekranie jest najprostszą możliwą rzeczą, tam w mikrokontrolerze... nie ma mc. Musieliśmy po kolei nauczyć się podstawowych operacji na rejestrach, dopiero później wspinać się coraz wyżej. Szczęśliwie rejestry mamy już za sobą. Dziś na celu mamy dotarcie do funkcji printf oraz jej bliskich znajomych. Dowiemy się, jak realizowane są operacje strumieniowe tak naturalne w dużych maszynach. Nie bez znaczenia jest fakt powstania nowej płytki. Funkcja printf, bardzo uniwersalna i o wielkich możliwościach, zajmuje stosunkowo dużo pamięci programu.

„Hello world”

Stwórzmy folder na nowy program. Skopiuj do niego plik makefile. Możesz wziąć go z poprzednich programów albo też bezpośrednio z folderu C:1 WinA VR[sample. W Program-mers Notepadzie tworzymy nowy projekt. Możesz nazwać go na przykład helloworld.

Listing 52 - wypisanie prostego tekstu

#1nc1ude <avr\1o.h>

#include <stdio.h>

int main(V0id)

{

pu-e(,.Hello world!");

>

# MC U MWO" ^

mlu ^tnegaieO # Output format, (can be srec, 1hex, blnary) FORMAT - 1hex # Targar f=-pa nimt iwirrtniit extensl0n). TARGET ^FTell Lwur' d~^

Do projektu dodajemy plik makefile i zaczynamy jego edycję. Niezbędne zmiany zaznaczone są na rysunku 37.

Teraz zgodnie z wprowadzonymi zmianami tworzymy główny płik programu o nazwie rnain.c. Dodajemy go do projektu w oknie Programmers Notepada. W pliku tym wpisujemy kod z listingu 52. Skompilowanie pro graniu przyniesie dwie niespodzianki:

1.    Program zajmuje zaskakująco dużo miejsca w pamięci (u mmc ponad IkB!).

2.    Program w zasadzie nic nie robi, a raczej: nie daje żadnych zewnętrznych oznak działania.

Pierwszy problem zaskoczył mnie kiedyś, prawdopodobnie tak samo jak mógł zaskoczyć teraz większość Czytelników. Jego roz wiązanie wymaga nieco „gimnastyki”. Ze względu na objętość materiału poczekamy z tym do części 8. Teraz przyjrzyjmy się problemowi z nicnierobieniem naszego programu.

Pytanie podstawowe brzmi: gdzie procesor ma wysłać podany mu napis „Hello world! '7 W typowym programie komputerowym będzie to zwykle konsola... Nasza płytka posiada wyświetlacz LCD. jednak kompilator mc o tym nic wie. Posiada także port szeregowy. Wiele kompilatorów właśnie port szeregowy uznałoby za domyślne wyjście dla naszego napisu. W AVR-CCC zostało to rozwiązane inaczej. Domyślnym miejscem, gdzie dane będą wysyłane, będzie pierwsze otwarte urządzenie. Zanim przejdziesz dalej, zajrzyj do ramki „ABC... C - Jak działają strumienie”.

W ramach kursu nie mieliśmy jeszcze okazji zająć się por-

Rys. 37 Zmiany w pliku makefile tern szeregowym. Zróbmy to teraz. Zgodnie z tym, czego nauczyliśmy się do tej pory, funkcje związane z transmisją canych umieścimy w oddzielnym module. Utwórz pliki rs.c oraz rs.h. Pamiętaj, aby do pliku makefile dodać nowy plik kodu źródłowego. Przypominam o tym na rysunku 38. Kod, jaki należy wpisać wr plik rs.c, znajduje się na listingu 53. Nic ma w mm nic niezwykłego - w praktyce przykłady takie można znaleźć w doku mentacji technicznej procesorów AVR.

Listing 54 pokazuje kod, który powinien znaleźć się w pliku nagłówkowym. Deklarujemy tutaj funkcje, które zdefiniowane zosta ły w pliku źródłowym. Od tej chwili będziemy mogli swobodnie używać ich wszędzie tam gdzie dołączymy plik rs.h.

Dodatkowo w naszym nagłówku definu jemy dwa makra pomocne przy obliczaniu danej wpisywanej do rejestru UBRR, która wyznacza prędktość transmisji. Makro pomocnicze RS_MAKEJUBRR jest przenie sieniem na C opisanego wr dokumentacji sposobu obliczania potrzebnej wartości. Stała P_CPU deklarowana jest z poziomu pliku makefile.

Zwracam Twoją uwagę na fakt, jak ważne jest otoczenie nawiasami obliczeń makra RS_MAKE_UBRR. Wstaw w wyobraźni zawarty w nim tekst tak jak robi to preprocesor - w miejscu wystąpienia jego wywołania. Zauważ, co stałoby się, gdyby nawiasów me było. Szczególnie widoczne jest to w miejscu, gdzie obliczoną wartość przesuwamy.

Elektronika dla Wszystkich Luty2006 39


Wyszukiwarka

Podobne podstrony:
Image97 (4) ■ Programowanie Lisiłng 103 - plik main.c jtfinclude <avr/io.h> tfinclude
15722 Image221 (3) Programowanie Zauważ, że pojawiają się tutaj dwa nowe napisy IDSjCnt oraz IDS Hul
63703 Image209 Programowanie cześć 5® fiesta ® +PB< Uwaga RS.T W dniu dzisiejszym zmierzymy się z
Image214 Programowanie Programowanie Listing 29 Pisanie na LCD. LCDstr(“Witaj!");
Image241 Z Pi* = 0 ^Z P» = RD Sil1 Ó>~ RS sin a = 0 2-1 2-1Z pif =0 Z pi? = rd cos k j cose = o
Program w Pythonie jako plik tekstowy Konsola tekstowa Pythona umożliwia napisanie właściwie dowolne

więcej podobnych podstron