fbpx

Książki do języka C opisują wszystko, co w tym języku się znajduje. Dosłownie każdy najmniejszy szczegół. Czy potrzebujesz wszystkiego? Oczywiście, że nie! Wybrałem 6 podstawowych elementów, które według mnie musisz poznać, aby zacząć pisać w języku C z myślą o mikrokontrolerach.

1. Instrukcje warunkowe

Powinieneś dobrze opanować instrukcję if. Razem z rozbudową o else i else if. Sprawdzanie warunkowe w programowaniu jest na porządku dziennym. W wielu miejscach przykładowo coś odbieramy. Chociażby z czujników zewnętrznych. Warto sprawdzać co przyszło i reagować na to.

Musisz też poćwiczyć tworzenie złożonych warunków w instrukcji if. Do takich konstrukcji przydadzą się Tobie operatory logiczne. Z nimi wiąże się pewne niebezpieczeństwo, którego musisz być świadomy… Chciałbyś je poznać? Napisz w komentarzu!

2. Pętle

Musisz znać wszystkie pętle, które są w języku C. Jest ich 3.

  • for
  • while
  • do…while

Ta trzecia jest według mnie często zapominana, a szkoda. Gdy piszę w programie np. odbiór kilku bajtów z czujnika czy z dowolnego interfejsu, to zawsze korzystam z pętli. Pozwalają unikać powtarzania kodu w takich powtarzalnych czynnościach.

Niesamowicie ułatwiają wypełnianie i czytanie tablic. Jedna pętla for z iteratorem i jedziesz po całej tablicy od początku do końca.

Co z tym do…while? W mikrokontrolerze często potrzebujemy odpytać się o status np. zewnętrznego czujnika. Czy skończył mierzyć lub przetwarzać np. temperaturę na wartość cyfrową. Wtedy minimum raz musimy nawiązać komunikację. Pętla do…while właśnie to wykona. Nie ważne, jaki mamy warunek działania pętli, ona i tak minimum raz wykona swoje działanie (tzw. obieg pętli).

3. Operacje logiczne i bitowe

W mikrokontrolerze działamy sporo na rejestrach. Nie tylko tych w mikrokontrolerze, ale również konfigurujemy w ten sposób układy zewnętrzne. Opcje w rejestrach są upakowane i często potrzebujemy zmienić jeden, dwa bity. Do tego na przykład w środku tego rejestru, a nie z brzegu.

Odczytać musimy pełny rejestr 8, 16 lub 32 bitowy. Więc musimy potraktować tę wartość w odpowiedni sposób. Tutaj właśnie wchodzą operacje bitowe w języku C.

Musimy znać takie operacje jak przesuwanie bitów, maskowanie. Wszystko po to, aby zmieniać tylko te rzeczy, które potrzebujemy modyfikować. Bez ruszania niepowiązanych bitów.

4. Wskaźniki

Największy ból osób początkujących. Najlepsze z nimi jest to, że jak ktoś pojmie ich działanie, to później sam się dziwi, że to jednak było łatwe 😀

Po co one nam są? Po pierwsze dostęp do rejestrów to jest dostęp przez adres, czyli przez wskaźnik. Panują tutaj takie same zasady.

Wskaźniki również mocno przydają się przy dzieleniu programu na warstwy logiczne i “obiekty”.

Przekazując dane między kolejnymi warstwami robimy to z użyciem wskaźników. Unikamy w programowaniu mikrokontrolerów kopiowania danych z miejsca na miejsce.

Pisząc pseudo-obiektowo w C budujemy “obiekty” oparte na strukturach. Do ich obsługi budujemy uniwersalne funkcje, które przyjmują wskaźniki na te “obiekty”. Dzięki temu mamy bardzo uporządkowany program lub bibliotekę.

5. Funkcje

Trzeba umieć budować funkcje. To może dziwnie brzmieć dla kogoś, kto już długo programuje. Niestety osoby początkujące często nie korzystają z funkcji. Piszą wszystko w mainie, co jest błędne.

Nie możemy też tworzyć jednej gigantycznej funkcji. Dzielimy program na mniejsze kawałki. Po to, aby nie powielać kodu. Jeśli piszesz jakąś sekwencję kodu kolejny raz to powinieneś ubrać to w funkcję. Unikamy powtarzania.

Mówi się, że funkcja nie powinna być dłuższa niż to, co widzisz na ekranie. To prawda, bo później szybko i łatwo można ją przeanalizować. Problem jest tylko taki, że każdy ma inny edytor kodu i inny ekran. Więc taka rada jest bardziej przybliżeniem niż czymś na sztywno.

6. Typy danych

Oczywiście te proste jak int, float, char, które są wbudowane w standard języka C. Warto również znać ich “sztywne” odpowiedniki z nagłówka stdint.h. Są to np. uint8_t, uint16_t uint32_t. One mają na sztywno zdefiniowaną wielkość i na pierwszy rzut oka ją widać. To niesamowicie pomaga.

Musisz znać ograniczenia typów zmiennoprzecinkowych (float i double). Nie jesteśmy w stanie fizycznie przestawić wszystkich liczb rzeczywistych w systemie dwójkowym. Pisałem o tym w innym artykule.

No i oczywiście typy złożone. Są to struktury, unie i podciąga się pod to jeszcze typ wyliczeniowy enum. Minimum, jakie musisz potrafić to korzystanie ze struktur.

Po to, aby tworzyć z tych struktur “obiekty”. Obiekt opisuje dokładnie np. czujnik. Zawiera jego adres, na którym interfejsie jest podłączony, jego specyficzne parametry. Później tworzymy kilka “obiektów” dla kilku czujników, które będą się różniły adresem lub też numerem interfejsu I2C.

Funkcja, która działa na tych obiektach przyjmuje wskaźnik do obiektu i już wie jak działać z tym konkretnym jednym czujnikiem, który przekazaliśmy. Sama wyciąga z informacji zawartych w “obiekcie” pod jakim adresem z nim rozmawiać i na którym interfejsie.

Gdzie tego wszystkiego nauczyć?

Stworzyłem kurs dedykowany mikrokontrolerom. Uczę w nim języka C od podstaw. Wszystko to, co omówiłem w tym wpisie znajduje się w programie kursu.

Zebrałem swoje doświadczenie z kilku lat programowania embedded i chcę przekazać Ci jak najlepszą wiedzę. Uczestniczyłem w różnych projektach: samodzielnie, start-up, średnia firma i olbrzymia korporacja.

Oprócz podstaw i składni przekazuję masę dobrych praktyk. Wplatam to między tłumaczenie kolejnych aspektów języka C.

Dodatkowym atutem jest również to, że pokazuję jak można dobrze prowadzić projekt. Pokażę Ci jak radzić sobie z budowaniem warstw abstrakcji. Skorzystamy przy tym ze struktur, wskaźników i callbacków. No i oczywiście podział na pliki. To wiele pomaga.

Takie odseparowane warstwy dużo łatwiej dają się przenosić między projektami, a nawet między różnymi rodzinami mikrokontrolerów.

Dołącz do listy oczekujących na kurs i zacznij naukę razem z przygotowanymi przeze mnie materiałami. Po zapisaniu się będziesz otrzymywał co tydzień maile o języku C: https://cdlamikrokontrolerow.pl

4.3/5 - (15 votes)

Podobne artykuły

.

0 komentarzy

Dodaj komentarz

Avatar placeholder

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *