Przesunięcia bitowe będą najszybsze.
Chodzi o pomnożenie próbki przez liczbę x z zakresu 0-255 i potem przesunięcie o 8 bitów w prawo, żeby uzyskać próbkę o współczynniku x/255, tak? Dokładnie. Mnożenie ma niewielki narzut (procesor ma instrukcję MUL), a dzielenie przez 256 to po prostu obcięcie najmniej znaczącego bajtu. Stałą? Przecież volume_coefficient to zmienna. Owszem, ale nie...
... tylko powiedzcie mi jak można zrobić operacje Np. [syntax=c]ulamek = ( (temp & 0x0F) + ( (temp & 0x0F)<< 2 ) ) >> 3;[/syntax]
Napisz z jakiego kompilatora korzystasz i na jakim poziomie optymalizacji kodu wynikowego. Jeśli chodzi o standardy C to ISO99 mówi o ujemnym przesunięciu bitowym " the behavior is undefined" i właśnie dlatego lepiej unikać takich operacji. Jeśli koniecznie musisz być przygotowany na ujemne przesunięcia może utwórz własną funkcję: [syntax=c] uint8_t...
dlaczego a=255, a nie 256 i b=2 ? Najpierw rozpiszmy dodatnią część liczb całkowitych. W Javie "int" może mieć wartości od -(2^31-1) do (2^31-1) czyli: od -2147483647 do 2147483647. Nie będę wyjaśniać jak zapisuje się liczby ujemne bo to się mija z celem na tym etapie. Zapiszmy więc dodatnią część liczb całkowitych: 111 1111 1111 1111 1111 1111 1111...
Unsigned Char to 8 bitów czyli Bajt a nie Word, to po pierwsze. Przesunięcia bitowe robi się za pomocą Shift [variable], 8*, Right ale tutaj to chyba nie ma zastosowania. To po drugie. * ilość bitów oczywiście do wyboru. ..a po trzecie wystarczy tak: [syntax=vbnet]sub Wraddr(byval x as integer, Byval y as Word) Local Dim Xh As Byte , Xl As Byte Xh =...
Tu masz troszkę prościej, z użyciem operacji przesunięcia bitowego (krótszy kod, łatwiejsza zmiana prędkości linijki led) Dim Led As Byte Dim Kier As Bit Config Portb = Output 'wszystkie porty b jako wyjścia' Portb = &B00000000 'wszystkie porty b w stanie niskim Config Portd = Output 'wszystkie porty d jako wyjscia Portd = &B0000000 'wszystkie porty...
Chyba to połączenie którego użyłeś nie jest dobre, napisałeś że prosto z USB - RS232 Profilica podpiąłeś do portów procka. Pamiętaj że no może na takiej przejściówce i jest 5V ale spójrz jak jest to od strony RS232 jak są zakodowane sygnały. Procek Ci nie zdekoduje ujemnych napięć może tu leży twój problem. Jakiś max 232 by się przydał lub podobne rozwiązanie....
http://obrazki.elektroda.pl/4825749900_1... Witam Chciałbym przedstawić konstrukcję urządzenia, które wykonałem nieco ponad rok temu na drugie urodziny starszego synka. Niedługo kończy trzy latka a nadal lubi czasem tym się pobawić jak i jego młodszy braciszek również potrafi spędzić nieco czasu bawiąc się tą zabawką. Urządzenie zbudowane...
W symulacji AvrStudio to mi tez dziala, a jak wgram program do uC to pierwszy sposob dziala,a z przesunieciem bitowym nie dziala...To jest dopiero ciekawe...A wioskuje po tym, ze mam urzadzenie na magistrali I2C, gdzie za pomoca 3 zworek moge zmieniac adres i widze kiedy układ dziala, a kiedy nie .
tylko i wyłącznie 0.
Próbowałem też rzutować - również źle A konkretnie jak? Tak próbowałeś: [syntax=c] time.data |= (1ULL<<58);[/syntax] ?
Wysłałem filmik na youtube for (i=0;i++<1000;) line(rand()%640,rand(... ok 200 średniej długości (400p) linii/s (nie wiem jak szybka jest funkcja rand() ) 2. Koncentryczne okręgi - ta matryca ma tylko 3 składowe co daje 7 kolorów +tło jednak wizualnie kolorów...
SendSpi(17UL << 11);
https://obrazki.elektroda.pl/7268233500_... Ten artykuł powstał w odpowiedzi na propozycję kolegi (at)Techekspert i jest rozwinięciem mojej prezentacji przedstawionej na konferencji The H(at)ck Summit w dniu 20 października 2023 r. Samą prezentację możesz pobrać stąd: Wyrzucamy algorytm Gutmanna do kosza Podstawowe informacje o niszczeniu...
Kiedy przesuwasz bitowo jakąś wartość, np 0001(binarnie), to na ostatnim bicie pojawia się zero, czyli 0001 << 1 = 0010. W ten sposób, zakładając, że miałbyś na początku włączoną jedną diodę, po naciśnięciu przycisku zapaliłaby się kolejna, a tamta zgasła. Dlatego dajesz OR, który zapala Ci ostatni bit - czyli za każdym razem zapalone diody są...
10% albo i więcej. Projekt wydaje się pisany przez początkującego, w "ui.c" mamy np. takie liczby magiczne: [syntax=c]const char digits[14] = {63, 5, 155, 143, 165, 174, 190, 39, 191, 175, 63, 128, 64, 0};[/syntax] oczywiście w bitach oznaczone są zapalone LEDy w wyświetlaczu 7-segmentowym. Tutaj się zwykle stosuje przesunięcia bitowe i definicje i...
Co do tego całego przesunięcia o 1 w lewo to, żebyś wiedział lepiej o co chodzi, to przytoczę taką sytuację: .db 'PLOT' .db 'KON' W pamięci to wygląda tak (pamięć jest adresowana za pomocą WORD, słowa) adres w WORD zawartosc adres bajtowy 001 'PL' 2 002 'OT' 4 003 'KO' 6 004 'N\0' 8 Jak sam widzisz, żeby uzyskać adres bajtowy należy to pomnożyć razy...
co to robi: int foo(uint32_t a) { a = a ^ (a >> 16); a = a ^ (a >> 8); a = a ^ (a >> 4); a = a ^ (a >> 2); a = a ^ (a >> 1); return a & 1; } Wstępna ocena dostępnych informacji Przedstawiony kod to funkcja `foo`, która przyjmuje jako argument 32-bitową liczbę bez znaku `a` (`uint32_t`). Funkcja wykonuje szereg operacji bitowych na tej liczbie i zwraca...
https://obrazki.elektroda.pl/9290552300_... Witajcie moi drodzy. Zapraszam na kolejną część mojego tutoriala PIC18F2550 i kompilatora SDCC . W tej części poznamy sterownik wyświetlacza LED MM5450, połączymy go z PIC18F2550 i napiszemy od 0 implementację ich komunikacji. Docelowo użyjemy MM5450 do wysterowania wyświetlacza LED 5 na...
Może coś takiego? Nie wiem czy będzie działać więc sprawdź. [syntax=c] for (u8 i=0; i<7; i++) { row_buffer[7] = ((row_buffer[7]<< 1)|0x01); Delay_ms(30); } [/syntax]
Szkoda, że nikt (ze studentów) nie wpadł na to, że wystarczy jedna funkcja, by przedstawić wczytaną wartość w dowolnym systemie pozycyjnym. Chodziło tu o uzmysłowienie sobie ("odkrycie"), że wartość liczby nie jest trwale związana z jej reprezentacją i nie ma znaczenia to, jak liczba jest fizycznie reprezentowana w pamięci komputera. Dlatego było tak...
Przesunięcia bitowe są prostsze
Napisz parsowanie w Javascript obiektu DataView gdzie pierwsze 10 bitów to wartość A, następne 12 bitów to wartość B, a następne 18 bitów to C. Zaproponuj sposoby jak mogę to przetwarzać i rozbić wartości na osobne zmienne Witaj ponownie! Parsowanie skomplikowanego formatu danych z obiektu `DataView` wymaga szczególnego podejścia, ponieważ będziemy...
Cześć, mam przykładową tablicę znaków: [syntax=c] char tab[6] = {'1', '2', '3', '4', '5', '6'}; std::cout << tab[0] << std::endl; // wyswietla 1 [/syntax] czy można na takiej tablicy zastosować operacje przesunięcia bitowego? Jeśli tak, to w jaki sposób to zrobić? Chciałbym, żeby pierwszym elementem tablicy po zastosowaniu przesunięcia bitowego...
Co do pól bitowych to mam Je odbierać i wysyłać więc nie mam wyboru. To nie jest prawda. Odbierane i wysyłane są bajty, odczyt i zapis zazwyczaj realizuje się poprzez maskowanie wartości i przesunięcia (czyli operacje bitowe a nie pola bitowe) Chciałem ułatwić rzycie osobie która nie jest programistą w składanie ramki do wysłania. Po to się tworzy...
Daj sobie powiedzieć, że masz problem z językiem - to nie wina bibliotek, bo z pewnością u (niektórych/większości) innych ludzi chodzą Jakoś z programowaniem w innych środowiskach, w języku C++ nie miałem problemu. W tych projektach mam problem, gdy funkcje zaczynają odnosić się do rzeczy specyficznych tylko dla mikrokontrolerów, gdy pojawiają się...
Słabo wiedzę ten procesor jeżeli pytania są na takim poziomie. Może jakaś literatura o architekturze procesora/komputera najlepiej taka z lat 70/80-tych XXw bo tam rozwiązywano takie problemy. Oczywiście można próbować stworzyć opis ALU zadając pytania na forum ale chyba podręcznik nie jest celem dla forum. Co do problemu Jeżeli rejestr ma oddzielne...
Czy nie ma szybszych alglorytmów? Oczywiście, że są. Wykorzystaj algorytm mnożenia i dzielenia pisemnego. Dzięki temu znacznie ograniczysz ilość dodawań czy odejmowań. Na przykład 1234 * 5678 zrobione metodą powyższą to 1234 dodawania (zakładam, że program jest chytry i sprawdza na początek która liczba jest mniejsza i ją bierze jako licznik pętli)....
Ja tam nie widzę problemu. Problemem jest zamieszczony kod Kolegi, który nawet nie powinien się skompilować - np przesunięcia bitowe na wskaznikach. No i przy okazji chyba niezbyt kolega rozumie te unie i wskażniki generalnie.
Moim zdaniem, mimo obecnie produkowanych komputerów, setki jak nie tysiące razy szybszych od tego AGC, to biorąc pod uwagę ile lat już upłynęło od programu Apollo, wcale aż tak bardzo nie posunęliśmy się technologicznie do przodu. Chyba już nigdy takiego progresu w tak krótkim czasie nie było w historii rozwoju elektronicznych maszyn liczących. Stagnacja...
Znam to kombinowanie jak koń pod górę.. ;) Zazwyczaj jak chce się zrobić taki zabieg to jedna linijka ale w Lua to może być wyzwanie więc powodzenia :) Możesz tez to obejść i przesunięcia bitowe potraktować jako mnożenie bądź dzielenie przez 2*n czyli np.: <<3 jest równoważne pomnożeniu wyniku przez 8
http://obrazki.elektroda.pl/4926270100_1... Diagnozer joysticków (np. do Pegasusa) na Atmega 8 Projekt Przyszedł wreszcie czas naprawić posiadane przeze mnie joysticki do Pegasusa. Zwykle uszkodzeniu (urwaniu) uległ kabel lub taki niesprawdzony/niesprawny joystick został zakupiony bez znajomości jego przeszłości. Jeśli kable się urwały,...
Powyższy zapis wcale nie nadaje zmiennej stan wartości 101, jak zapewne zakładasz, lecz wartość 5. Operator << to operator przesunięcia bitowego, a nie dziesiętnego.
A dzięki za odzew :) Przysiedziałem ciut i zrozumiałem o co w tym programie chodzi. Ja mam poprawić te przesunięcia bitowe sll i sl.25 aby były w pętli RPCT zamiast LOOP. Czytałem helpa, ale do bani jest ten kawałek o składni polecenia RPCT, może kolega ma jakiś pomysł?
Stosując przesunięcia bitowe stworzyć liczbe 4 bajtową [syntax=java] byte n1=0x14; byte n2=0; byte n3=0; byte n4=0; int x= (n1 << 24) | (n2 << 16) | (n3 << 8) | n4 << 0; System.out.println(x); [/syntax]
" >> " i " << " to są operacje przesunięcia, a przepisu na rotate w C nie znam... ;) Proponuję programik wykorzystujący przesunięcia bitowe do efektów z 8 LED : http://www.elektroda.pl/rtvforum/viewtop... Pozdrawiam, Light'I
eeeh no bo zapomniałem przed każdą nazwą bitu dodać uint8_t czyli ma być uint8_t z0:1 uint8_t z1:1 itd - spróbuj Dodano po 1 Ma to działać tak, że po podłączeniu 5v do PA0 zapali się dioda podłączona do PC7, a jeśli nie to zapali się dioda podłączona do PC6. Eeeee - no to na prawdę nie wiem po co ci te pola bitowe ;) - toż to przesada na maxa - chociaż...
uwaga techniczna - przy dzieleniu przez potęgę dwójki, lepiej jest robić przesunięcia bitowe, gdyż zajmują wiele wiele mniej operacji. http://www.atmel.com/dyn/resources/prod_... tutaj możesz zobaczyć na pierwszej stronie ile co zajmuje operacji. Przesunięcie bitowe to jedna instrukcja... :)
Przecież tu się nic skomplikowanego nie dzieje w tych wstawkach asemblerowych - sklejanie par półbajtów w całe bajty. Nie możesz tego przepisać w "zwykłym" bascomie? Chyba bascom wspiera operacje logiczne, przesunięcia bitowe i przypisania? :) Pozdrawiam, Dr.Vee
Cześć, mam pytanie jeżeli chodzi o rejestry oraz taki zapis [syntax=cpp]DDRD |= (1<<PD1)[/syntax] Rejestr DDRD jest 8 bitowy i rozumiem, że na początku wygląda tak: 0000 0000 używamy operacji sumy bitowej. Nie rozumiem tylko zapisu przesunięcia bitowego w lewo (1<<PD1). PD1 jest jedno bitowe i ustawione na początku na 0 ? Przesuwamy 0000...
Dzielenie przez 10 możemy zastąpić przez przesunięcia bitowe w prawo. Od kiedy? Jak juz koniecznie dzielic przez 10 stosujac przesuniacia 2 prawo to może tak? Oczywiscie zakladając wymagana dokładnośc X=a/8-a/32+a/128-a/512+............
Kolega wyżej już wyjaśnił ja dodam jeszcze, że tego typu prostych błędów jest więcej: http://mikrokontrolery.blogspot.com/2011... Druga uwaga, to zdecyduj się - albo stosuj makro _BV(), albo przesunięcia bitowe (1<<x). Ja sugeruję tę drugą wersję.
Jak rozumiem zgodnie z teorią języka C dla AVR Prawie dobrze, ale zamiast 00010000 otrzymasz 00100000, choć końcowy wynik będzie dokładnie taki jak Twój czyli 0xF0, ale to przypadek. A teraz drugi przypadek, gdzie zamiast przesuwać jedynkę o 5 miejsc w lewo, przesuwasz w lewo liczbę 0x10 szesnastkowo (czyli liczbę 16 dziesiętnie lub 0x00010000 dwójkowo)...
Przecież ten uC ma timer - wyśietlanie w pętli z opóźnieniami to zbrodnia. Tak mam TCC, ale wykorzystuję go do animacji. Właśnie w jego przerwaniu robię te wszystkie przesunięcia bitowe itd. Uznałem, że tak będzie prościej, jeżeli część funkcji wstawić w przerwanie, a resztę w pętli głównej. Kod wyświetlania jest skomplikowany, ale inaczej nie dało...
(at)spec220 A jak jest w tym środowisku którego używasz z obsługą peryferiów mikrokontrolera? Czy wszystkie timery, USARTy, I2C, SPI, ADC, DAC, są obsługiwane? czy można ustawić każdy tryb pracy, na który pozwala hardware, czy tylko te popularne? Jak z komunikacją, powiedzmy że chcesz zrealizować DMX512, Modbus RTU, albo LIN, czy masz do tego gotowy...
Najprościej byte a=liczba&0xff; byte b=liczba>>8; składasz liczba=(b<<8)+a; >>/<< to bitowe przesunięcia w prawo/lewo a & to funkcja AND
mam problem z przesunięciami bitowymi i nie wiem jak sobie z tym już poradzić. prosta funkcja, zamienia pierwsze cztery bity z ostatnimi czterema. edit: pomyłka
Można zastosować: a) przesunięcia bitowe (klasyczne lub oparte na makrze _BV();) b) makra sbi(PORTn,x); (ustawia 1 na Pn.x) oraz cbi(PORTn,x); (ustawia 0 na Pn.x) Polecam przeczytać w internecie jakiś kurs C, nie wie skąd kolega się uczy tego C, ale jakoś chyba niezadobrze tam te kwestie tłumaczą ;-)
Oczywiście że się policzy szybciej, bo przesunięcia bitowe uC wykonuje chyba w jednym cyklu o ile się nie mylę. Tylko że autor pisze coś o zajętości pamięci a nie o szybkości wykonywania więc myślę że jego problem leży gdzie inndziej niż w pokazanym kawałku kodu gdyż po skompilowaniu i optymalizacji przez kompilator kod nie powinien zajmować zbyt dużo...
przesuniecie bitowe mikrokontrolery bitowe maski bitowe
odstraszacz dziki focus świeci kontrolka ładowania instrukcja challenger
fluktuacja sygnału regulator ciągu odkurzacza
Pioneer VSX-2021 – aktualizacja firmware, brak dźwięku, naprawa DSP, plik AVR_1011.dat Citroën C5 X7 – lokalizacja i wygląd modułu alarmu, syrena Valeo, sterownik ECU