niedziela, 3 kwietnia 2016

[0] Arduino - Typy danych

W tym poście chciałbym przedstawić rodzaje typów danych jakie są dopuszczalne w Arduino.

Wstęp


Typy danych pozwalają na odpowiednią deklarację zmiennych. Dzięki nim istnieje możliwość dokładnego zdefiniowania informacji w sposób zrozumiały dla mikrokontrolera. Dodatkowo ważne jest ich odpowiednie oznaczenie, ponieważ pozwala to na uzyskanie interesującego nas zakresu wpisywanych danych. Przez odpowiednią deklarację uzyskuje się także możliwość zredukowania zajmowanej pamięci układu.



Rodzaje typów danych


W Arduino możliwe jest zdefiniowanie następujących typów:

  • void - jest to typ wykorzystywany do deklaracji funkcji nie zwracających żadnej wartości
  • char - typ znakowy, zajmuje 1 bajt pamięci, wartości od -128 do 127,
  • byte - zawiera liczby dodarnie z przedziału od 0 do 255, zajmuje jak nazwa wskazuje 1 bajt
  • int - zajmuje 2 bajty pamięci, przechowuje liczby z przedziału od - 32768 do 32767 
  • word - także 2 bajty, liczby dodatnie od 0 do 65535
  • long  - zajmuje 4 bajty, liczby od -2147483648 do 2147483647
  • float - zajmuje 4 bajty, przechowuje ułamki z dokładnością do 7 cyfr po przecinku, liczby od -3,4028235E+38 do 3,4028235E+38
  • double - zajmuje 4 bajty, przechowuje ułamki z dokładnością do 15 cyfr po przecinku.
  • string - zapamiętuje ciąg znaków


Przed niektórymi typami można postawić także definicję unsigned, zwiększa ona zakres typów z liczb ujemnych, tylko na dodatnie. Może ona zostać zastosowana w następujących przypadkach.

  • unsigned char - zakres od 0 do 255
  • unsigned int - zakres od 0 do 65535
  • unsigned long - zakres od 0 do 4294967295


Czasami zachodzi potrzeba zamiany danych pomiędzy różnymi typami, wtedy wykorzystuje się rzutowanie jednego typu na inny. Wykonuje się to poprzez wpisanie nazwy nowego typu, oraz nawiasu w którym zostanie podana nazwa przekształcanej zmiennej. Możliwe do zamiany są następujące typy:

char(), byte(), int(), word(), long(), float(), String().

Kolejnym przydatnym elementem są jeszcze dyrektywy jakie można zastosować do zmiennych, są to const, static oraz volatile.

Const stosowane jest do deklaracji zmiennych stałych. Za jej pomocą deklarujemy wartość, która nigdy w programie nie może zostać zmieniona. Podobnie działa deklaracja #define jaką można zastosować na początku programu. Pierwszy sposób sprawdzi się bardzo dobrze gdy potrzebne jest korzystanie z wskaźników. Natomiast #define działa świetnie gdy chcemy po prostu podstawić jakąś wartość za tekst, bez deklaracji jej typu. Jest przeważnie wykorzystywany do oznaczania poszczególnych wyprowadzeń z układu, lub pojedynczej zmiennej wykorzystywanej gdzieś w pojedynczym równaniu.

Drugą deklaracją jest static, Pozwala ona na nie zniszczenie zmiennej po wyjściu z funkcji lokalnej do globalnej. Czyli po ponownym wywołaniu funkcji, nie będzie trzeba jej ponownie inicjować. Jej zasięg natomiast pozostanie niezmieniony. Często jest ona stosowana z deklaracją const.

Ostatnia deklaracja volatile pozwala na wykorzystanie zmiennych do przerwań. Pozwala ona na tzw. wymuszenie odświeżenia wartości danej zmiennej, gdy już przerwanie zostanie wykonane.  Jeśli dana wartość nie zostanie zdeklarowana jako volatile, wtedy możliwe jest nie poprawne wykonanie danego przerwania. Po prostu program może nie zdawać sobie sprawy, że dana wartość została w programie zmieniona w czasie wejścia bądź wyjścia z przerwania.