Powrót

Mikroprocesorowa ośla łączka, część 14

Aby sprawnie posługiwać się językiem należy przede wszystkim poznać jego możliwości. Takim istotnym elementem są zmienne w programie, a z nimi wiążą się jej typy. Typ zmiennej (poznaliśmy już kilka standardowych) ma duże znaczenie w tworzeniu programu.

Liczby całkowite

Nieodzownym elementem w programie są zmienne, gdyż to one przechowują wszelkiego rodzaju informacje powstałe w trakcie działania programu. W dotychczasowych działaniach poznaliśmy kilka standardowych typów – liczb całkowitych bez znaku (uint8_t, uint16_t, uint32_t czy uint64_t), zajmujących w przestrzeni pamięci RAM obszar od jednego do ośmiu bajtów. Obok nich mamy liczby całkowite ze znakiem (int8_t, int16_t, int32_t oraz int64_t), które identycznie „rozpychają się” w pamięci operacyjnej. O zajętości w pamięci zmiennych poszczególnych typów można się przekonać, uruchamiając prosty program, którego fragment pokazuje listing 1:

int main(void)
{
  ( . . . )
  for ( ; ; )
  {
    ClrScrLCD ( ) ;
    WriteTextLCDFlash ( HelloInfoText ) ;
    NewLineLCD ( ) ;
    _delay_ms ( 1000 ) ;
    WriteTextLCDFlash ( Uint8TSizeText ) ;
    WriteSize ( sizeof ( uint8_t ) ) ;
    WriteTextLCDFlash ( BytesText ) ;
    _delay_ms ( 3000 ) ;
  ( . . . )
  } /* for */ ;
  return ( 0 ) ;
}

Efekt działania programu jest widoczny na fotografii 1.

Fotografia 1

Jest tu zastosowana standardowa w języku C funkcja o nazwie sizeof, której wynikiem jest liczba całkowita bez znaku, informująca o wielkości wyrażonej w bajtach. Jest to dosyć osobliwa funkcja, gdyż jej parametrem może być identyfikator zmiennej lub typu (normalnie identyfikator typu nie może być przekazany w parametrach). Można jej użyć również w stosunku do własnych typów, przykładowo poznać zajętość w pamięci typu do kolejki FIFO klawiatury, który był opisany w poprzedniej części. Do wyświetlenia liczby jest zastosowana funkcja WriteSize, która ma wewnątrz interesujące rozwiązanie – ilustruje to rysunek 2.

Rysunek 2

Bez względu na wielkość zmiennej LocalBuffer na wynik konwersji liczby do postaci znakowej, algorytm zawsze zachowa się poprawnie: „wyspacjuje” cały bufor, umieści na końcu bufora znak końca napisu i wykona konwersję liczby w taki sposób, by jej ostatni znak był umieszczony na końcu bufora (łańcuch znaków jest dosunięty prawostronnie).

Liczby rzeczywiste

Istotnym standardowym typem zmiennych jest typ rzeczywisty, co nie znaczy, że inne są „wirtualne” jako opozycja do rzeczywistych. Znaczenia jego należy upatrywać w samej matematyce, gdzie istnieje zbiór liczb rzeczywistych, takich, które mogą przyjąć dowolną wartość. Ograniczenie filozofii mikroprocesorów (w tym również tych „dużych”, znajdujących się w naszych komputerach) jedynie do liczb całkowitych byłoby bardzo dużym zawężeniem w zastosowaniach. Komputery również posługują się liczbami rzeczywistymi, chociaż do liczb rzeczywistych im bardzo daleko, tego typu liczby są określane jako zmiennoprzecinkowe. Ich podstawową wadą jest „rozdzielczość”. Jednak zanim zagłębimy się w to zagadnienie, warto sobie przypomnieć ze szkoły pojęcie mantysy i wykładnika. Ograniczając się do świata ludzi, każdą liczbę można zapisać jako <mantysa> × 10 <wykładnik>, przykładowo zwykłe 1,0 to 1 × 100, 0,01 to 1 × 10–2 oraz 1000 to 1 × 103. Ta notacja ma również swoje odbicie w języku C, gdyż poza powszechnie uznaną formą zapisu liczb ułamkowych w postaci <część całkowita>.<część ułamkowa> (tu występuje pewna różnica w stosunku do ludzkich przyzwyczajeń: znakiem oddzielającym część całkowitą od ułamkowej jest znak kropki, natomiast w zwyczajach ludzi jest to znak przecinka) jest wykorzystywana notacja mantysa – wykładnik. Zapis takiej liczby to „standardowa” liczba ułamkowa, znak E (może być ewentualnie D oraz pisownia wielką czy małą literą nie ma znaczenia) oraz wykładnik. Użyta litera (E albo D) odpowiada liczbie 10 w notacji ludzi. Przykładowo zamiast pisać 0.000001 można napisać 1E–6 – to określa tę samą wartość.

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w lipcowym numerze czasopisma Zrozumieć Elektronikę (ZE 7/2025). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 7/2025 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać – Postaw kawę za:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – Własna kwota. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dodać dedykację/Wiadomość dla Twórcy” i tu zawsze trzeba wpisać, który numer lub numery ZE mamy wysłać na podany adres e-mailowy. Jeśli ma to być numer z tym artykułem trzeba zaznaczyć, że chodzi o ZE 7/2025.
UWAGA!!! E-mail z linkiem do materiałów (Smash) wysyłamy zazwyczaj w ciągu 24 godzin. Czasem zdarza się jednak, że trafia do spamu. Jeśli więc nie pojawi się w ciągu 48 godzin prosimy sprawdzić w folderze spam, a ewentualny problem zgłosić na adres: kontakt@piotr-gorecki.pl.