{"id":1971,"date":"2021-10-27T09:47:42","date_gmt":"2021-10-27T07:47:42","guid":{"rendered":"https:\/\/msalamon.pl\/?p=1971"},"modified":"2022-06-13T09:16:43","modified_gmt":"2022-06-13T07:16:43","slug":"te-6-elementow-jezyka-c-musisz-opanowac","status":"publish","type":"post","link":"https:\/\/msalamon.pl\/te-6-elementow-jezyka-c-musisz-opanowac\/","title":{"rendered":"Te 6 element\u00f3w j\u0119zyka C MUSISZ opanowa\u0107!"},"content":{"rendered":"
Ksi\u0105\u017cki do j\u0119zyka C opisuj\u0105 wszystko, co w tym j\u0119zyku si\u0119 znajduje. Dos\u0142ownie ka\u017cdy najmniejszy szczeg\u00f3\u0142. Czy potrzebujesz wszystkiego? Oczywi\u015bcie, \u017ce nie! Wybra\u0142em 6 podstawowych element\u00f3w, kt\u00f3re wed\u0142ug mnie musisz pozna\u0107, aby zacz\u0105\u0107 pisa\u0107 w j\u0119zyku C z my\u015bl\u0105 o mikrokontrolerach.<\/p>\n
Powiniene\u015b dobrze opanowa\u0107 instrukcj\u0119 if<\/em><\/strong>. Razem z rozbudow\u0105 o else<\/em> i else if<\/em><\/strong>. Sprawdzanie warunkowe w programowaniu jest na porz\u0105dku dziennym. W wielu miejscach przyk\u0142adowo co\u015b odbieramy. Chocia\u017cby z czujnik\u00f3w zewn\u0119trznych. Warto sprawdza\u0107 co przysz\u0142o i reagowa\u0107 na to.<\/p>\n Musisz te\u017c po\u0107wiczy\u0107 tworzenie z\u0142o\u017conych warunk\u00f3w<\/strong> w instrukcji\u00a0if<\/em>. Do takich konstrukcji przydadz\u0105 si\u0119 Tobie operatory logiczne<\/strong>. Z nimi wi\u0105\u017ce si\u0119 pewne niebezpiecze\u0144stwo<\/strong>, kt\u00f3rego musisz by\u0107 \u015bwiadomy… Chcia\u0142by\u015b je pozna\u0107? Napisz w komentarzu!<\/strong><\/p>\n Musisz zna\u0107 wszystkie p\u0119tle<\/strong>, kt\u00f3re s\u0105 w j\u0119zyku C. Jest ich 3.<\/p>\n Ta trzecia jest wed\u0142ug mnie cz\u0119sto zapominana, a szkoda. Gdy pisz\u0119 w programie np. odbi\u00f3r kilku bajt\u00f3w z czujnika czy z dowolnego interfejsu, to zawsze korzystam z p\u0119tli. Pozwalaj\u0105 unika\u0107 powtarzania kodu w takich powtarzalnych czynno\u015bciach.<\/strong><\/p>\n Niesamowicie u\u0142atwiaj\u0105 wype\u0142nianie i czytanie tablic<\/strong>. Jedna p\u0119tla for<\/em> z iteratorem i jedziesz po ca\u0142ej tablicy od pocz\u0105tku do ko\u0144ca.<\/p>\n Co z tym do…while<\/em>? W mikrokontrolerze cz\u0119sto potrzebujemy odpyta\u0107 si\u0119 o status np. zewn\u0119trznego czujnika. Czy sko\u0144czy\u0142 mierzy\u0107 lub przetwarza\u0107 np. temperatur\u0119 na warto\u015b\u0107 cyfrow\u0105. Wtedy minimum raz musimy nawi\u0105za\u0107 komunikacj\u0119. P\u0119tla do…while w\u0142a\u015bnie to wykona. Nie wa\u017cne, jaki mamy warunek dzia\u0142ania p\u0119tli, ona i tak minimum raz wykona swoje dzia\u0142anie (tzw. obieg p\u0119tli).<\/p>\n W mikrokontrolerze dzia\u0142amy sporo na rejestrach<\/strong>. Nie tylko tych w mikrokontrolerze, ale r\u00f3wnie\u017c konfigurujemy w ten spos\u00f3b uk\u0142ady zewn\u0119trzne. Opcje w rejestrach s\u0105 upakowane i cz\u0119sto potrzebujemy zmieni\u0107 jeden, dwa bity. Do tego na przyk\u0142ad w \u015brodku tego rejestru, a nie z brzegu.<\/p>\n Odczyta\u0107 musimy pe\u0142ny rejestr 8, 16 lub 32 bitowy. Wi\u0119c musimy potraktowa\u0107 t\u0119 warto\u015b\u0107 w odpowiedni spos\u00f3b. Tutaj w\u0142a\u015bnie wchodz\u0105 operacje bitowe w j\u0119zyku C.<\/p>\n Musimy zna\u0107 takie operacje jak przesuwanie bit\u00f3w, maskowanie. Wszystko po to, aby zmienia\u0107 tylko te rzeczy, kt\u00f3re potrzebujemy modyfikowa\u0107<\/strong>. Bez ruszania niepowi\u0105zanych bit\u00f3w.<\/p>\n Najwi\u0119kszy b\u00f3l os\u00f3b pocz\u0105tkuj\u0105cych. Najlepsze z nimi jest to, \u017ce jak kto\u015b pojmie ich dzia\u0142anie, to p\u00f3\u017aniej sam si\u0119 dziwi, \u017ce to jednak by\u0142o \u0142atwe<\/strong> \ud83d\ude00<\/p>\n Po co one nam s\u0105? Po pierwsze dost\u0119p do rejestr\u00f3w to jest dost\u0119p przez adres, czyli przez wska\u017anik. Panuj\u0105 tutaj takie same zasady.<\/p>\n Wska\u017aniki r\u00f3wnie\u017c mocno przydaj\u0105 si\u0119 przy dzieleniu programu na warstwy logiczne i “obiekty”.<\/strong><\/p>\n Przekazuj\u0105c dane mi\u0119dzy kolejnymi warstwami robimy to z u\u017cyciem wska\u017anik\u00f3w. Unikamy w programowaniu mikrokontroler\u00f3w kopiowania danych z miejsca na miejsce.<\/strong><\/p>\n Pisz\u0105c pseudo-obiektowo w C budujemy “obiekty” oparte na strukturach. Do ich obs\u0142ugi budujemy uniwersalne funkcje, kt\u00f3re przyjmuj\u0105 wska\u017aniki na te “obiekty”. Dzi\u0119ki temu mamy bardzo uporz\u0105dkowany program lub bibliotek\u0119.<\/p>\n Trzeba umie\u0107 budowa\u0107 funkcje. To mo\u017ce dziwnie brzmie\u0107 dla kogo\u015b, kto ju\u017c d\u0142ugo programuje. Niestety osoby pocz\u0105tkuj\u0105ce cz\u0119sto nie korzystaj\u0105 z funkcji. Pisz\u0105 wszystko w mainie<\/em>, co jest b\u0142\u0119dne.<\/p>\n Nie mo\u017cemy te\u017c tworzy\u0107 jednej gigantycznej funkcji. Dzielimy program na mniejsze kawa\u0142ki. Po to, aby nie powiela\u0107 kodu<\/strong>. Je\u015bli piszesz jak\u0105\u015b sekwencj\u0119 kodu kolejny raz to powiniene\u015b ubra\u0107 to w funkcj\u0119. Unikamy powtarzania.<\/p>\n M\u00f3wi si\u0119, \u017ce funkcja nie powinna by\u0107 d\u0142u\u017csza ni\u017c to, co widzisz na ekranie.<\/strong> To prawda, bo p\u00f3\u017aniej szybko i \u0142atwo mo\u017cna j\u0105 przeanalizowa\u0107. Problem jest tylko taki, \u017ce ka\u017cdy ma inny edytor kodu i inny ekran. Wi\u0119c taka rada jest bardziej przybli\u017ceniem ni\u017c czym\u015b na sztywno.<\/p>\n Oczywi\u015bcie te proste jak int, float, char, <\/em>kt\u00f3re s\u0105 wbudowane w standard j\u0119zyka C. Warto r\u00f3wnie\u017c zna\u0107 ich “sztywne” odpowiedniki z nag\u0142\u00f3wka stdint.h<\/strong>. S\u0105 to np. uint8_t, uint16_t uint32_t<\/em>. One maj\u0105 na sztywno zdefiniowan\u0105 wielko\u015b\u0107 i na pierwszy rzut oka j\u0105 wida\u0107. To niesamowicie pomaga.<\/p>\n Musisz zna\u0107 ograniczenia typ\u00f3w zmiennoprzecinkowych<\/strong> (float<\/em> i double<\/em>). Nie jeste\u015bmy w stanie fizycznie przestawi\u0107 wszystkich liczb rzeczywistych w systemie dw\u00f3jkowym. Pisa\u0142em o tym w innym artykule<\/a>.<\/p>\n No i oczywi\u015bcie typy z\u0142o\u017cone<\/strong>. S\u0105 to struktury, unie i podci\u0105ga si\u0119 pod to jeszcze typ wyliczeniowy enum<\/em>. Minimum, jakie musisz potrafi\u0107 to korzystanie ze struktur.<\/strong><\/p>\n Po to, aby tworzy\u0107 z tych struktur “obiekty”. Obiekt opisuje dok\u0142adnie np. czujnik. Zawiera jego adres, na kt\u00f3rym interfejsie jest pod\u0142\u0105czony, jego specyficzne parametry. P\u00f3\u017aniej tworzymy kilka “obiekt\u00f3w” dla kilku czujnik\u00f3w, kt\u00f3re b\u0119d\u0105 si\u0119 r\u00f3\u017cni\u0142y adresem lub te\u017c numerem interfejsu I2C.<\/p>\n Funkcja, kt\u00f3ra dzia\u0142a na tych obiektach przyjmuje wska\u017anik do obiektu i ju\u017c wie jak dzia\u0142a\u0107 z tym konkretnym jednym czujnikiem, kt\u00f3ry przekazali\u015bmy. Sama wyci\u0105ga z informacji zawartych w “obiekcie” pod jakim adresem z nim rozmawia\u0107 i na kt\u00f3rym interfejsie.<\/p>\n Stworzy\u0142em kurs dedykowany mikrokontrolerom. Ucz\u0119 w nim j\u0119zyka C od podstaw. Wszystko to, co om\u00f3wi\u0142em w tym wpisie znajduje si\u0119 w programie kursu.<\/strong><\/p>\n <\/a><\/p>\n Zebra\u0142em swoje do\u015bwiadczenie z kilku lat programowania embedded<\/strong> i chc\u0119 przekaza\u0107 Ci jak najlepsz\u0105 wiedz\u0119. Uczestniczy\u0142em w r\u00f3\u017cnych projektach: samodzielnie, start-up, \u015brednia firma i olbrzymia korporacja.<\/p>\n Opr\u00f3cz podstaw i sk\u0142adni przekazuj\u0119 mas\u0119 dobrych praktyk.<\/strong> Wplatam to mi\u0119dzy t\u0142umaczenie kolejnych aspekt\u00f3w j\u0119zyka C.<\/p>\n Dodatkowym atutem jest r\u00f3wnie\u017c to, \u017ce pokazuj\u0119 jak mo\u017cna dobrze prowadzi\u0107 projekt.<\/strong> Poka\u017c\u0119 Ci jak radzi\u0107 sobie z budowaniem warstw abstrakcji. Skorzystamy przy tym ze struktur, wska\u017anik\u00f3w i callback\u00f3w.<\/strong> No i oczywi\u015bcie podzia\u0142 na pliki. To wiele pomaga.<\/p>\n Takie odseparowane warstwy du\u017co \u0142atwiej daj\u0105 si\u0119 przenosi\u0107 mi\u0119dzy projektami, a nawet mi\u0119dzy r\u00f3\u017cnymi rodzinami mikrokontroler\u00f3w.<\/p>\n\n\n Do\u0142\u0105cz do listy oczekuj\u0105cych na kurs i zacznij nauk\u0119 razem z przygotowanymi przeze mnie materia\u0142ami. Po zapisaniu si\u0119 b\u0119dziesz otrzymywa\u0142 co tydzie\u0144 maile o j\u0119zyku C: https:\/\/cdlamikrokontrolerow.pl<\/a><\/strong><\/p>\n\n\n\n\n2. P\u0119tle<\/h2>\n
\n
3. Operacje logiczne i bitowe<\/h2>\n
4. Wska\u017aniki<\/h2>\n
5. Funkcje<\/h2>\n
6. Typy danych<\/h2>\n
Gdzie tego wszystkiego nauczy\u0107?<\/h2>\n