obrazekobrazek
obrazek
obrazek

Kurs AVR-GCC cz.4

17.08.2009 ABXYZ

Kiedy będzie dalsza część kursu? Dużo wody upłynęło Wisłą do morza od czasu ukazania się trzeciej część niniejszego kursu i wreszcie jest część czwarta. Ostatnio omawiane były: zmienne, operatory, pętle i instrukcje sterujące jak: if, switch. W tej części kursu przerobimy tablice i funkcje, czyli dalszy ciąg podstaw języka C. Jak poprzednio, wpierw omówię wymienione tematy, a następnie zestawimy układ z AVRem i uruchomimy kilka przykładowych programów. W tej części kursu będziemy bawić się przyłączając do AVRa klawiaturę telefoniczną i piezo-buzzer(bez generatora).

Tablice

Gdy w programie mamy większą ilość danych jednego typu, to zamiast tworzyć wiele pojedynczych zmiennych, lepiej będzie utworzyć tablicę. W tablicy można przechowywać jednocześnie wiele zmiennych jednakowego typu. Wszystkie elementy tablicy są ponumerowane, dostęp do dowolnej zmiennej w tablicy uzyskuje się podając nazwę tablicy i numer elementu.

W języku C tablicę przed pierwszym użyciem należy wcześniej zdefiniować. Tablicę definiuje się pisząc kolejno: typ danych, nazwę tablicy i objętą parą nawiasów kwadratowych [] liczbę elementów tablicy. Definicję należy zakończyć średnikiem.


int main(void)



{

   /* Definicja tablicy 'pomiar' o 64 elementach typu char */

   char pomiar[64];



   /* Definicja tablicy 'wysokosc' o 32 elementach typu int */



   int wysokosc[32];



   /* Definicja tablicy 'temperatura' o 16 elementach typu

      double */

   double temperatura[16];

	 

Elementami tablic mogą być wartości typów: char, int, float, double oraz: struktury, unie, pola bitowe i  wskaźniki o których będzie mowa w następnej części kursu. Elementami tablicy mogą być też same tablice; w taki sposób tworzy się w języku C tablice wielowymiarowe.


/* 2 elementowa  tablica 40 elementach tablic typu char */

   char bufor[2][40];



  /* Tablica trójwymiarowa */

  char jakas_tablica[4][8][3];

	

Definiując tablicę można jednocześnie tablicę inicjalizować wartościami początkowymi. W tym celu dopisuje się na końcu definicji: operator = , a po nim, objęte parą nawiasów klamrowych {}, wartości początkowe kolejnych elementów tablicy rozdzielone przecinkami.


/* Definicja tablicy z jednoczesną inicjalizacją wartościami

początkowymi dwóch pierwszych elementów tablicy */

  char tablica[4] = {0x01,0x02};

   



/* Definicja tablicy z jednoczesną inicjalizacją wartościami

początkowymi wszystkich czterech elementów. W takim przypadku

można nie wpisywać w definicji ilości elementów tablicy,

kompilator sam to wyliczy. */

  char tablica[] = {0x01,0x02,0x04,0x08};



/* Definicja z inicjalizacją tablicy dwuwymiarowej */

  char inna_tablica[][2] = { 0x31,0x02,

                             0xf1,0x02,

                             0x41,0xf2,

                             0xf1,0xc2,

                             0x11,0xa2 };

														 

W programie elementami tablicy posługujemy się w identyczny sposób jak pojedynczymi zmiennymi. Każdy element tablicy ma nazwę składającą się z nazwy tablicy oraz objętego parą nawiasów kwadratowych indeksu(numeru elementu). Elementy tablicy numerowane są zaczynając od zera, a nie od jedynki, należy to koniecznie zapamiętać.


/* Przypisanie pierwszemu elementowi tablicy wartości 23.5 */

  temperatura[0] = 23.5;



  /* Przypisanie drugiemu elementowi tablicy wartości 22.0 */



  temperatura[1] = 22.0;



  /* Przypisanie ósmemu elementowi tablicy wartości 17.5 */

  temperatura[7] = 17.5;



  /* Przypisanie jakiejs_zmiennej wartości czwartego elementu

   tablicy */



  jakas_zmienna = temperatura[3];

	

Trzeba też pamiętać, że jeżeli zdefiniujemy tablicę n elementową i spróbujemy zapisać coś pod indeksem równym lub większym n to kompilator nie zgłosi błędu, ale skutkować to może nieprawidłowym działaniem programu.

Przy operacjach na tablicach szczególnie użyteczna może być instrukcja pętli for, gdzie licznik pętli będzie indeksem tablicy.


unsigned char i,j;

int tablica_1[16];

int tablica_2[16];



int tablica_3[10][10];



/* Kolejnym elementom tablicy przypisane zostaną wartości:

0,10,20,30..150 */

for(i = 0; i < 16; i++)



         tablica_1[i] = i * 10;



/* Kopiowanie zawartości tablica_1 do tablica_2 */

for(i = 0; i < 16; i++)



         tablica_2[i] = tablica_1[i];



/* Wypełnienie tablicy dwuwymiarowej */

for(i = 0; i < 9; i++)



     for(j = 0; j < 9; j++)

         tablica_3[i][j] = i * j;

Na tym etapie nauki, te informacje na temat tablic mam wystarczą.

W dalszej części artykułu, znajdziesz szczegółowe opis następujących zagadnień:

Zapraszamy do zapoznania się z dalszą częścią artykułu.

Pytania? Komentarze? Zobacz forum!

Autor strony nie gwarantuje, że podawane tu informacje, porady, schematy oraz kody źródłowe programów są wolne od błędów i w żadnym wypadku nie może ponosić odpowiedzialności za jakiekolwiek szkody powstałe w wyniku ich wykorzystania.

© 2009 abxyz. Wszelkie prawa zastrzeżone mordka
Strona jest częścią wortalu forbot.pl
obrazekobrazek