pracownik_UR napisał(a):
&
panie to efekt kopiowania kodu przez strony html a nie ciekawostka w języku C

.... to po prostu kawałek śmiecia który się przedostał poprzez kopiowanie i złe formatowanie kodu w html ... nie zawracaj sobie tym głowy ...
A sorki tego kodu nie będę wyjaśniał bo wg mnie jest bez sensu ... i pisany albo przez kogoś kto znał tylko arduino albo przez kogoś kto wcześniej programował tylko na PC i wykazuje się kompletnym marnotrastwem pamięci (typów) w mikrokontrolerach - podam tylko jeden przykład
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
jak widzę tu int to mnie krew zalewa

.... szkoda w ogóle gadać.
Zaś wracając do tematu bitów i bajtów to już wyjaśniam po co było moje pytanie .... Myślałem że może nie rozumiesz różnicy pomiędzy bitami i bajtami - wtedy bym rozumiał czemu aż tak mocno na razie nie potrafisz przeanalizować tych dwóch funkcji o które pytasz
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pomijam tu kwestię czytelności czy tam sposobu pisania kodu - to nie ważne - ważne że jak się spojrzy na obie funkcje to widać jak na dłoni, że kolega autor tego kodu przygotował to zgodnie ze sztuką w języku C i z tym o czym ja opowiadam w tym poradniku nadmorskim ....
czyli NA POCZĄTEK - zbudował NAJMNIEJSZY klocuszek do wysyłania pojedynczego bajtu !!!
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
funkcja praktycznie identyczna jak w Bluebooku - zresztą ciężko nawet ją zapisywać na tysiące innych sposobów.
A skoro już mamy najmniejszy klocuszek to też zgodnie z tym co ja tobie pisałem wyżej i nawet pokazywałem przykład kodu wysyłania danych z pętli gdybyś miał więcej bajtów do wysłania ....
Więc DRUGI krok jaki zrobił kolega autor to wysłanie dwóch paczek bajtów, czyli
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
dlaczego paczek bajtów ? Bo każda paczka u niego to dwa bajty - dwa bajty z których składa się każda zmienna zarówno z1 jak i z2
Wyłuskuje je ładnie za pomocą przesunięć
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
w czym problem ? Tyle że żeby to zrozumieć to najpierw trzeba zapoznać się i to jest PODSTAWA kurczę PODSTAW w języku C od której niestety mnóstwo początkujących ucieka jak przed jakimś strasznym monstrum ... a później się dziwią, dlaczego nie rozumieją tak prostych kodów jak wyżej

W zamian za to brną dalej i uciekają w super KOCIE makra _BV() tak jak w tym rzekomo ciekawym kodzie który przytoczyłeś ... a jest on o tyle bez sensu , że nie stworzył tam ktoś podstawowego klocuszka do wysłania pojedynczego bajtu i później nie wysyła po kolei bajtów tylko na okazję każdego nowego projektu gdzie trzeba przesłać różną ilość (bajtów) przez SPI tworzy sobie jakąś dziwolągowatą funkcję, która wysyła po prostu ciurkiem 16 bitów z dwóch bajtów zmiennej __led_state. Toż widać że to dwa bajty zarówno po typie zmiennej (unsigned int) .... koci typ zamiast jak należy w AVR GCC użyć uint16_t i od razu wszystko jasne a także po ilości 16 w pętli for.... Gdyby ten ktoś miał wysłać 12 bajtów to pewnie próbowałby iść taką drogą jak ty na początku czyli szukałby chyba sposobu czy można użyć zmiennej o typie uint128_t ....
jeszcze raz popatrz - kolega autor ma najmniejszy klocek (do wysyłania pojedynczego bajtu) i za jego pomocą ot po prostu wysyła po kolei 4 bajty - tyle że czerpie je z dwóch różnych 16-bitowych zmiennych to samo można byłoby uzyskać metodą tablicową którą pokazałem wyżej
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
czyli w każdym obiegu pętli wysyłam kolejny bajt z tej tablicy ... W przypadku kolegi można powiedzieć, że on wysyła bajty z dwóch tablic - każda ma dwa elementy - tyle że robi to ręcznie i bez pętli for(), robi to "ręcznie" ... można byłoby i w pętli for ze wskaźnikami no ale tego przykładu nawet może nie będę pokazywał bo już w ogóle uznałbyś to na razie za jakieś mocno niezrozumiałe a nie o to chodzi
Pomyśl sobie zamiast zmiennej uint128_t tworzysz tablicę!
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i już ... i masz swoją pierwszą linijkę która ma pojemność 16 bajtów tak jak w zmiennej uint128_t której nie ma .... Gdybym miał to samo zrobić tablicowo co zrobił kolega Nefarious19 to zrobić to można byłoby tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i później dwie małe pętelki o których mówiłem
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i to było by DOKŁADNIE to samo co to:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zero różnicy jeśli chodzi o wysłanie. Za to jak przyszedłby mi pomysł do głowy, że moja linijka na jeden kanał ma mieć większą pojemność to co za problem ? Nawet gdyby miało być 24 diody ?
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i co za problem wysłać ? IDENTYCZNIE ...
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.