Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 sty 2025, o 11:29


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 1 kwi 2013, o 22:12 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

Kochani... już parę razy spotkałem się z zapisem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
lub w książce Praty (wyrwane z kontekstu programu )
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
gdzie MASKA to 0xFF, ziel to char . Po co w takim wyrażeniu maska 0xFF. Prata napisał że do przypisania zmiennej ziel wyniku przesunięcia bitów. Ale po co 0xff jak mamy uinta 8 bit??. Wywaliłem te maski i wszystko mi działa prawidłowo ale wolę wiedzieć czy nie narobiłem jakiegoś bigosu. Stosuje to w taki sposób :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i w zmiennej mam prawidłową sumę kontrolną mimo braku maski.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2013, o 22:29 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 758
Pomógł: 9

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
nic nie zmienia z bajtem, pewnie to było do tego celu, że maska była zmieniana w różnych miejscach.

Np. wyzerowanie starszych czterech bitów:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 kwi 2013, o 22:50 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

No i bardzo dobrze. Tam jest parę takich miejsc gdzie są te maski stosowane bez sensu. Rozumie maski inne niż 0xFF w połączeniu z & ale 0xFF na liczbie 8bit.....
Dzięki za odpowiedź.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 07:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

Takie maski nieraz trzeba zastosować ponieważ kompilator czasem w niektórych sytuacjach operuje na rejestrach o szerokości 16 bitowej... i żeby nie było błędnych obliczeń na zmiennej 8 bitowej dobrze dać maskę. No i też kwestia tego jaka to zmienna ta ziel ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 08:22 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

zmienna ziel przechowuje 8 bitów zmiennej kolor która jest bodajże typu long. Ale jaka by ona nie była to maska & 0xff jest bez sensu na zmiennej 8bit. Ale tak jak piszesz.. to może być taki asekuracyjny myk na niektóre kompilatory i platformy. Może warto to stosować dla zachowania "krawatowej" formy programu ;).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 12:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

wojtek_2 napisał(a):
zmienna ziel przechowuje 8 bitów zmiennej kolor która jest bodajże typu long..


I właśnie po to ktoś zrobił 0xff maskę :) bo niema 8 bitowej zmiennej long...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 13:10 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

No ale ziel to char (8bit) a kolor to long. Co innego gdyby ziel była long. Ale np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
. Tu są same uint8t a mimo to maskę dał piszący program. Coś mi tu śmierdzi:). Ok. Wiem tyle że to "krawat" i to będzie ten trop.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 13:11 

Pomógł: 0

Nie możesz wrzucić całego kodu? bo tak to nic innego jak wróżenie z fusów.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 13:30 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

Wiesz co, mogę ale to kod ogólnie dostępny na odczyt DHT22. Przykład z ze zmienną ziel to przykład z książki Praty Język C.
Przykład :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Tu masz przykład 100% odzwierciedlający przykład. Chce wyciągnąć drugi bajt zmiennej long no to przesuwam bity w prawo 8 razy i mam je w najmłodszym bajcie long. Teraz jak by (nie wiem jak to się mówi.. niejawne przekształcenie z long na uint8t) dokonuje przepisania tego bajtu do zmiennej jeden (jeden bajt) coś jak by rzutowanie najmłodszej częsci bajtu zmiennej long do zmiennej 8bit. Może to przez to daje się maskę, ale po co skoro jeden i tak więcej nie przejmie z long...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 13:39 

Pomógł: 0

Nie wiem czy dobrze, ale wydaje mi się, że po pierwsze jak wyżej czyli dla porządku w kodzie, bo Pratha opisuje "uniwersalnie" i nie pod 8bitowce, a w PCtach i tak zmienna 8bitowa jest trzymana bodajże w 32bitach.

Ogólnie problem może być z rzutowaniem typów zależnie od architektury, więc jak wyżej, dla porządku w kodzie i zmiennych zastosował to maskowanie.
Ale głowy sobie obciąć nie dam, tak mi się tylko coś kołacze w mojej pustej głowie.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 14:08 

Pomógł: 0

Nie mówię, że mam racje, sugerowałem się tym

In writing portable C programs I've learned not to assume much of anything; even the statement the basic block size in 32 bit compiler is 4 bytes is an assumption that may not be true, since data sizes and address sizes are not required to be the same. The "basic block size" depends on a system's memory access architecture, and does not have to correspond to the data register size. Just an aside, as this doesn't affect your basic question about C struct sizes. – Stephen P Aug 10 '10 at 17:18

I mogłem nie do końca zrozumieć sens wypowiedzi.

Czyli reprezentacja w 32bitowym systemie char to owszem 8bitów, ale może być zapisywana jako 32bitowa blok z przysłoniętymi 24bitami......tak to zrozumiałem.
Pewnie wszystko zależy od użytej architektury.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 lip 2012
Posty: 238
Pomógł: 5

a jednak 8 bitwa :) jest ziel . Ciekawe ... to pozostaje jeszcze tylko powód taki że wynik w działaniu może przekroczyć 255 , a interesuje nas tylko te 8 bitów, czyli dajemy maskę żeby się pozbyć reszty ...
Proponuje zrobić doświadczenie :) skompilować kod bez maski skoro bez sensu i zobaczyć jak będzie wyglądać i dziać się po skompilowaniu pod każdą opcją optyminimalizacji. Gdzieś babol wyjdzie na pewno :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 16:06 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

Ja te maski wywaliłem i wszędzie działa ok. Optymalizacja całkowicie zdjęta i defaulowa i no problem. Kurcze taka prosta sprawa a ile kombinacji. Ważne że działa ok, bo i nie ma prawa być inaczej. Dziękuję wszystkim za pomoc, ale jak coś komuś przyjdzie do głowy, to "dawaj". Dla pokoleń może się przyda:).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 kwi 2013, o 20:08 

Pomógł: 0

No i o to mi chodziło, tylko tego jakoś przekazać logicznie nie umiałem. Tj. to miałem na myśli mówiąc o architekturze......aczkolwiek nadal nie zostało w pełni zobrazowane dlaczego jest zastosowane te maskowanie, a z chęcią bym się dowiedział.



Góra
  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO