Jakiego typu jest time.data? Rozumiesz warning który Ci pokazał kompilator?
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]
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ą...
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...
Przesunięcia bitowe będą najszybsze.
http://infocenter.arm.com/help/index.jsp i klikasz, aż się doklikasz do instrukcji asm... ;) http://infocenter.arm.com/help/topic/com...
A to jeszcze lepiej - wzór na zastąpienie prawostronnej jedynki zerem: x = x & (x - 1); co można też zapisać tak: x &= x - 1;
Samo przesuniecie jest ok, tylko, że 4 starsze bity zostały dopełnione zerami, a chciałbym żeby były jedynkami, jak to zrobić? Nie da się zrobić (po przesunięciu) sumy logicznej z czterema jedynkami na najstarszych pozycjach?
Możesz użyć przesunięć bitowych shl i shr. Poczytaj: http://pl.wikipedia.org/wiki/Przesuni%C4... i tutaj: http://doctor.programuj.com/operatory-bi... Nie napisałeś nawet w czym kodujesz! Pozdrawiam!
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...
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...
Zacznijmy od tego, że: Przycisk podpięty do INT0 (PB2) i do +5V. Jaki według Ciebie jest poziom na wejściu INT0, gdy przycisk nie jest naciśnięty? Zmienna status także powinna być volatile. Drobiazg: cli() i sei() w przerwaniu są zbędne, ponieważ: The I-bit is cleared by hardware after an interrupt has occurred, and is set by the RETI instruction to...
Dodaj do jedynki ul i powinno działać: 1ul<<i Domyślny rozmiar zmiennych to zapewne 16-bitów i do tego jeszcze standard mówi o zmiennych ze znakiem, więc twoja liczba (1<<cokolwiek) nie może być większa niż 32767. Jedynka na ostatniej pozycji oznacza liczbę ujemną, więc kompilator dokonuje dopasowania 16-bitowej liczby ujemnej do 32-bitowej...
... tylko powiedzcie mi jak można zrobić operacje Np. [syntax=c]ulamek = ( (temp & 0x0F) + ( (temp & 0x0F)<< 2 ) ) >> 3;[/syntax]
Troche skomplikowanie to wygląda - ale ja nie znam C++ :-) Rozumiem, ze to czesc wiekszej całości? Działa? Ja osobiście podziały bajtów (lub liczb wielobajtowych) realizuję (podobnie jak koledzy wyżej) przez maskowanie odp. fragmentów bajtów (lub większych wielobajtowych zmiennych) za pomocą masek bitowych + odpowiednie przesunięcia bitowe.
poczytaj o przesunięciu bitowym... zamiast wpisywać do tablicy możesz zadeklarować jakiegoś integera przesuwać o 1 bit i dodawać kolejne odczytane bity, w ten sposób będziesz miał liczbę całkowitą reprezentującą odebrany kod a zamiast wielu if możesz użyć case trochę to uprości.
Polecam Książkę Pana Mirka http://atnel.pl/wydawnictwo Właśnie wczoraj skończyłem czytać o języku C po 2 razie kiedy to przeczytałem już wiele rzeczy mi się rozjaśniło. Polecam poczytać dowiesz się ze można to robić w bardziej jasny sposób stosując operatory logiczne oraz przesunięcia bitowe. Pozdrawiam ;) w szczególności Pana Mirka :D
Może mało eleganckie rozwiązanie, ale: 1. Skopiować zmienną Kontrola_produktu do zmiennej tymczasowej. 2. Użyć rozkazu przesunięcia bitowego w prawo na zmiennej tymczasowej. Przesunięcie o N bitów, gdzie N to zmienna Miejsce_kontroli. Wynik zapisać do zmiennej tymczasowej 3. Użyć rozkazu iloczynu bitowego z 2 zmiennych: zmiennej tymczasowej i liczby...
... co wynika z tego, że gdybyś używał nazw pinów (a nie numerów) oraz przesunięć bitowych, to błędu byś nie popełnił: [syntax=c]#define E (1<<PB1)[/syntax] Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011...
Logiczne i arytmetyczne w prawo działają tak samo (wsuwają z prawej zero, a bit z lewej idzie w kosmos). Logiczne w lewo wsuwa z lewej bit zerowy, a skrajny prawy bit leci w kosmos. Arytmetyczne w lewsu z lewej wsuwa kopie najstarszago bitu, a z bit prawy leci w kosmos. Odwrotnie. Arytmetyczne w prawo sluzy do dzielenia signed numbers, a logiczne w...
Na AVR'ach typ int ma 2 bajty, a wszystkie literały liczbowe domyślnie są typu int. 34816 pewnie normalnie powinno by powodować warning, gdyż komu chciało by się pisać 34816U żeby zaznaczyć, że literał ten ma być int'em bez znaku? Ten warning mogli jawnie wyrzucić, jednak w przypadku operacji 17*2048, jeśli obie liczby traktować jako int ze znakiem,...
1. Nie używaj przypisań typu Rejestr=liczba. Używaj przesunięć bitowych i nazw bitów w rejestrach. 2. Ponadto co napisał (at)dondu - pamiętaj, że zliczając impulsy ze sporymi częstotliwościami musisz wziąć pod uwagę ilość instrukcji maszynowych, które procesor wykona od momentu zgłoszenia przerwania do zaprzestania zliczania impulsów/zapisania wyników.
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...
To nie zadziała. unsigned int na AVR jest 16-bitowe, a ty próbujesz przechowywać w nim 24-bitowe wartości. Musisz to zmienić np. na unsigned long. A pojedyńcze bajty wyłuskasz z tego za pomocą operacji przesunięć bitowych, albo za pomocą unii: union RGB { unsigned long kolor; struct kolor { uint8_8 r; uint8_t g; uint 8_t b; }; };
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 =...
LISTA& operator --(); // deklaracja operatora dekrementacji przedrostkowej. LISTA& operator --(int); //deklaracja operatora dekrementacji przyrostkowej. --(*this); // użycie operatora dekrementacji przedrostkowej. (*this)--; // użycie operatora dekrementacji przyrostkowej. To C++ Builder i Visual C++ postanowili zastąpić jedną formę drugą w przypadku...
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...
Vitling , przeczytaj ten artykuł [url=http://mikrokontrolery.blogspot.com... i zerowanie bitów, powinien Ci pomóc w zrozumieniu przesunięć bitowych. Zerknij też na [url=http://mikrokontrolery.blogspot.com... mikrokontrolerow...
W takim razie mam pytanie raczej z programowania w C, a nie AVRów. Czy tak wygląda przesunięcie zmiennej var o wartości 1 o 12 miejsc w prawo, taki jest wynik działania? 0000 0000 0000 0001 >> 12 jest równa 0000 0000 0000 0000 Czytałem trochę o operatorach w Symfonii i może będzie to głupie pytanie ale nie rozumiem dlaczego mimo wszystko wartość 1 pozostaje...
ja się tam nie znam ... ale nikt nie odpowiada więc wtrącę moje dwa grosze.... stosując operator<<(rezystor) kompilator spodziewa się, ze będzie to wykorzystywane do operacji na bitach. Ty natomiast używasz to do wrzucenia wyniku w strumień. musisz przeciążyć operator strumienia a nie przesunięcia bitowego: (...) friend ostream & operator<<...
ten KOD bez błędów raczej i kompiluje się [syntax=c] #include <avr/io.h> #include <util/delay.h> #include <stdlib.h> #define p0 0x01 #define p1 0x02 #define p2 0x04 #define p3 0x08 #define p4 0x10 #define p5 0x20 #define p6 0x30 //#define F_CPU 1000000 // tu definiujesz wartość uzywanego kwarcu void InitUSART( unsigned long int baud...
Trochę chaotycznie napisany program: 1. skoro używasz przesunięć bitowych, to używaj je konsekwentnie. bo sprawdzenie, czy prawidłowo ustawiasz ADMUX zmusza do szukania. co oznacza 0xE9 itp. Przy zmianie kanału zmieniaj tylko bity ADMUX odpowiedzialne za nr kanału: A single conversion is started by writing a logical one to the ADC Start Conversion bit,...
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...
Wykorzystując operacje przesunięć bitowych (>> lub <<) ale nie tak jak to zrobiłeś, bo w twoim przypadku zmienna dane jest przesuwana o wartość PD2 bitów w lewo, a następnie wykonywana jest operacja sumy logicznej z wartością PORTD. Ten fragment powinien mniej więcej wyglądać tak: Dodano po 44 Oczywiście to czy przesuwasz w lewo czy prawo...
Cos chyba kolega przekombinowuje z tym projektem (tak się domyślam po metodzie zjechania z 10 bitów do 8). Proponuje zamiast mnożyc floaty zrobić V8bit = V10bit >> 2; Nie używam za dużo przesunięć bitowych, nawet nie wiedziałem, że jest taka możliwość. Dziękuje za wskazówkę. dodatkowo mnożąc przez ułamek używałeś do tego armaty w postaci biblioteki...
to ja jeszcze dodam, że zdecydowanie ładniej jest uzywać typów uint8_t zamiast unsigned char oraz uint32_t zamiast unsigned long. Są to typedef'y dodane do standardu C99 języka C: http://en.wikipedia.org/wiki/Inttypes.h#... Jest to też poprawnie zdefiniowane dla avr-gcc w bibliotece avr-libc - plik inttypes.h - zauważ, że wszystkie funkcje z...
Takie operacje na bitach w strukturach nazywane są polami bitowymi. Jeżeli chcesz gdzieś zmieścić wartość 10 bitową, to przecież możesz przechowywać tę wartość w zmiennej o wielkości 16 bitów. Co do używania struktur z polami bitowymi i rzutowania na nie innych wartości, to zwróć uwagę, że są to elementy wrażliwe na kolejność przechowywania bajtów w...
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 .
W ten sposób i po sprawie: [syntax=c] for (i=0, i<n, i++){ wynik *=2; wynik +=pow((double)(tab[i]-'0'), (double)(i)); } [/syntax] Tak na serio to twoja funkcja może być o wiele krótsza - i nieco bardziej sensowna - gdybyś skorzystał z typu unsigned long long (lub też _u64 lub unsigned __int64) zamiast double (poczytaj sobie o strukturze liczb zmiennoprzecinkowych...
w pierszym przypadku dla rozwinięcia i czytelności - przesunięcie bitowe w lewo - shl - powinno się znaleźć ;)
Poza tym pobieżnie przejżałem DS ATTiny i nie widzę instrukcji analogicznej do DIV w 8051?? Jak w nim dzielić liczby?? A czy znalazłeś MUL? ;) Do takich obliczeń niestety trzeba pisać własne funkcje. Można mnożyć i dzielić poprzez wielokrotne dodawanie lub odejmowanie danej liczby, ale to jest oczywiście dosyć mało optymalna metoda. Oczywiście mnożenie...
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...
Musisz posłużyć się komendami ustawiania adresu zapisu danych. Te wyświetlacze mają pamięć 2*40 znaków (mają możliwość przewijania zawartości w prawo i lewo, żeby zobaczyć dalsze znaki) i aby przejść do drugiej linijki musisz zrobić odpowiednim poleceniem skok do adresu znaku 41. Co do części kodu, o której wyjaśnienie prosisz - zamień zapis szesnastkowy...
Na pewno będzie szybciej 3 razy mnożyć niż 4 A jeszcze szybciej dwa razy mnożyć i wykonać przesunięcie bitowe w prawo, bez jakiegokolwiek dzielenia.
No bo tak trzeba, wyłączać na czas zmian tranzystory steruujące....
Zacznij od zrozumienia przesunięć bitowych, potem poczytaj o portach GPIO w STM32 (rejestr MODER działa ciut inaczej niż DDR w AVR). No i jeszcze timery - też całkiem różne od tych w AVR.
Sam kiedyś z ciekawości i chęci sprawdzenia jak mają się pomiary różnymi czujnikami do siebie zbudowałem taki układ z termoparą, LM35, DS18B20 i czujnikiem NTC. Jeśli te pomiary Ci się w kodzie "nie spieszą" to może przyda Ci się taka prosta metoda. Jako że ADC czyta się do Word bo ma więcej niż pomieści Byte to pozostaje w tej zmiennej dużo wolnego...
Przy przesunięciu bitowym w lewo zgodzę się z Tobą. Jednak w wyniku przesunięcia bitowego w prawo (dzielenie) otrzymam liczbę całkowitą co zmniejsza dokładność czujnika.
Przesunięcia bitowe są prostsze
Witam. Mam problem z przesunięciem bitowym. Mam taki kod: long int wire_temp(void) { long int zmienna_w; int temp1, temp2; temp1 = 0xCBCF; temp2 = 0xEBAA; zmienna_w = ((temp2 << 16) | temp1); return zmienna_w; } i wynik działania jest błędny. zamiast 0xEBAACBCF jest 0xFFFFCBCF. Widać, że dwa najstarsze bajty się...
1 jest typu int więc jest 16 bitowa Dokładnie, po prostu pierwszy argument w wyrażeniu przesunięcia x : ( x << y ) jest 16-bitowy , więc jeśli chcemy użyć 32-bitowego - to trzeba zrobić rzutowanie typu.
Witamy kolegę. Jak widać na naukę nigdy nie jest za późno. Cyfrowy świat nie jest tylko dla młodych. M. S. 52l. Nie znam narzecza arduino ale zapoznaj się z pętlą for, której przebieg "programuje" się na konkretną ilość razy. Np. [syntax=c]for(x=0;x<X;x++) { } //Rozpocznij od x=0; jeśli x<X ponownie wykonaj pętlę i zwiększ x o 1, w //przeciwnym...
Witaj [syntax=c]#include <avr/io.h> // jak tego nie dodam to wywala błąd, tak powinno być ? [/syntax] Dołącza plik nagłówkowy do sterowania wyjściami/ wejściami dla mikrokontrolera AVR. [syntax=c]for(i=0x80;i;i>>=1){ //tej pętli nie rozumiem, jak to może działać ? : )[/syntax] Pętla działa dopóki i jest prawdą, czyli jest różne od zera....
Nie mam w tej cwili czasu na dokładniejszą analizę, ale zauważ że w celu uzyskania bardziej znaczącego bajtu zmiennej typu uint16_t należy podzielić przez 256, a nie przez 255. Zwiększ też wartość zmiennej ac_adder na 256, bo przy 24 otrzymasz przebieg poniżej 5Hz. Błąd jest na pewno w algorytmie bo np. to działa bez problemu (sprawdziłem dla pewności):...
Rejestry GPIOx->BSRRH i GPIOx->BSRRL to "połówki" rejestru BSRR opisanego w manualu, a więc wpisywanie tam wartości większych niż 16-to bitowe nie odniesie żadnego skutku. Zobacz czy w nagłówkach nie ma albo dostępnego rejestru GPIOx->BSRR (bez ...L albo ...H) albo odpowiednich makr GPIO_BSRRx_Bx_xx (z ...L... lub ...H...). W ostateczności w liniach...
Witam. Skoro tak to zastosuj układ CD40194. Pozdrawiam.
Cenna uwaga, z tym, że lepiej stosować przesunięcia bitowe, czyli (1<<DIODKA).
Ja bym radził natomiast skorzystać z AND i przesunięcia bitowego. W ten sposób możesz wyciągnąć dwa bajty z jednego int16.
Zdaje się, że klasa BigUnsigned ma przeładowane operatory przesunięć bitowych... Pytanie - czy potrzebujesz znaku?
Dziękuję za wyjaśnienie co do operatorów to akurat na tym etapie jest jasne jak i przesunięcia bitowe. Pozdrawiam
1. VRef + kondensator, Vcc można wybrać jako VRef programowo. 2. To zależy od rozdzielkczości ADC, dla 10 bitowej masz zakres 0..2^10-1 3. To fragment niepotrzebny, gdyż pisze się po prostu dana=ADC lub ADCW. << to operacja przesunięcia bitowego.
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...
<<= to operator przesunięcia bitowego w lewo, a >>= to operator przesunięcia bitowego w prawo. Odpowiadają one odpowiednio przemnożeniu przez 2 i podzieleniu przez 2. |= to operator sumy logicznej. Czyli działa to tak: (dopóki jest jakiś bit do przesunięcia w zmiennej liczba) 1.pomnóż odwrocona przez 2 (zrób miejsce na nowy bit). 2.Jeżeli...
bo nie zauwazylem ze ona go ustawiła nie wiadomo po co Nie właczaj ADLAR bo on przesuwa w lewą stronę ... wynik Właśnie o tym pisałem w poście, który skomentowałeś: proponuje nie pisac niezbyt przemyslanych postów no tak, to jest uwzględnione, wyswietlam ( odczytuje) tylko wynik ConversionResults Czy jesteś tego pewna? Koledze Piotrus_999 chodzi o...
Ok, dzięki za odpowiedź. Proszę jeszcze o wyjaśnienie kwestii litery 'U' przy przesunięciu bitowym: [syntax=c]GPIOD->OSPEEDR |= 3 << 30U;// alternatywnie dla podglądu GPIOD->AFR[1] |= 2 << 28U; [/syntax]
btw nie jestem pewien ale za pomocą przesunięcia bitowego w lewo << na AVR się chyba nie da otrzymać liczby 32 bitowej. Trzeba albo przesuwać w prawo albo inaczej cudować :)
Zastanów się co się stanie, gdy zwiększasz wartość zapisaną w rejestrze PORTB na początku pętli nieskończonej: PORTB = 0b00001000 - mamy włączone podciąganie W czasie przyciskania: PORTB = 0b00001000 PORTB = 0b00001001 PORTB = 0b00001010 PORTB = 0b00001011 PORTB = 0b00001100 PORTB = 0b00001101 PORTB = 0b00001110 PORTB = 0b00001111 PORTB = 0b00010000...
Mnożysz lewą cyfrę przedstawiającą wartości dziesiątek x10 i dostajesz 10100 binarnie mnożenie warto zrealizować jako odpowienie przesunięcie bitowe, gdy mnożysz x10 to tak jakbyś mnożył x8 i mnożył x2 27x10 = 27x(8+2)= 27x8 + 27x2 = 27x2^3 + 27x2^1 czyli wynik mnożenia dowolnej liczby x10 jest rowny sumie jej przesuniecia w lewa o 3 bity i przesuniecia...
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.
Nie wspominając o takim doborze dzielnika, aby 16,368V dawało maksymalny odczyt. Wtedy nawet mnożenia nie trzeba. Wystarczą same przesunięcia bitowe. Albert
Pamiętam, że procesory (a jaki masz na myśli?) mają rozkazy przesunięcia bitowo w prawo i w lewo. Poszukaj takiego, który przenosi pierwszy/ostatni bit na drugą stronę, bo i takie są.
Zacząłbym od tego: Otrzymujesz wartość zmiennej temperatura równą np. 1871819,25. Jak przemnożysz to przez 16 to okaże się, że wyrażenie (temp1 + (temp2*256)) zwraca wartość 29 949 108. Teoretycznie zmienne temp1 i temp2 nie powinny przyjmować wartości większych od 255, więc wartość maksymalna wyrażenia (temp1 + (temp2*256)) = (255 + (255*256)) = 65535....
Procesor nie wie, co to jest liczby dziesiętna. Komputer operuje wyłącznie na liczbach binarnych, które Ty w programie możesz sobie zapisać dowolnie, np. jako dziesiętne. Funkcja pow(), oprócz tego, że daje wynik przybliżony, ma jeszcze tę własność, że wykonuje się kilka tysięcy razy wolniej od przesunięcia bitowego.
Użyj przesunięć bitowych. Wtedy 80 bitów zapiszesz w 8 bajtach, czyli w jednej zmiennej long long int(nie znam odpowiedników dla bascoma).
Czy błędnie obliczona wartość wilgotności może mieć związek z tym, że w pewnym momencie przesunięcia bitowe prowadzone są na liczbie ujemnej -38 ? Jeśli przesunięcie bitowe byłoby robione w C/C++ to nie spodziewałby się problemów ale w Lua to ciężko stwierdzić. Chyba najprościej będzie Ci sprawdzi na piechotę na jakimś przykładzie np. zadeklaruj wartość...
Dla RSA potrzebujesz wyłacznie przesunięcia bitowego, mnożenia, potęgi. Każda biblioteka zawiera znacznie więcej, więc jeżeli twój kod się nie mieści to zaszło jedno z dwóch: - napisałeś strasznie nieoptymalnie - każda gotowa biblioteka się nie zmieści.
Banalny przyklad: P1DIR = 0x40; P1OUT = 0; Programista majacy nawet duzo doswiadcznia w C nie wie po prostu do czego odwoluja sie te 2 zmienne i co gorsza dlaczego np 0x40 oznacza w launchpadzie(plytka z TI do msp430) zielona diode. To jest kiepski przykład, bo tak programują tylko i wyłącznie początkujący. Prawdziwy programista użyje przesunięć bitowych,...
Może sobie wyobrazić za pomocą [url=https://gmplib.org/]GMP. ;-) Co do mnożenia - nie ma obaw. Przy włączonych jakichkolwiek optymalizacjach kompilator sam zamieni x * 2 na przesunięcia bitowe.
a czemu dwa razy na bcd?
Zrób sobie ring bufor do którego wrzucasz pomiary i za każdym razem jak jest potrzebny wynik policz średnią. https://pl.wikipedia.org/wiki/Bufor_cykl... jak znasz angielski to zajrzyj na wersję angielską - standardowo lepsze opisy. W sumie jeśli nie potrzebujesz "wyjmować" próbek, to nie potrzebujesz wskaźnika odczytu. Ilość próbek przyjmuj jako potęgę...
a słyszałeś kiedyś o przesunięciu bitowym? uint16_t intidzer = 61674; uint8_t msb_intidzera = intidzer >> 8; uint8_t lsb_intidzera = intidzer & 0xFF;
łatwiej stosować ci te przesunięcia bitowe, gdy zdefiniowane masz wszystko elegancko w CMSIS do stm? Ci jest czytelniejsze? USART1_CR1_UE czy 1<<2 ?? BlueDraco czepianie się tego UL to przesada, i chyba tylko tobie wadzi. Lepiej by było jeśli gdzieś miałoby zabraknąć.
"przesuwa" zmienną i o jeden bit w lewo (tj. mnoży przez 2). Równoważne czemuś takiemu: << to operator przesunięcia bitowego w lewo.
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ł?
Na pewno język C. Gościu bezsensownie nam wytłumaczył jak działają przerzutniki w rejestrach i kazał zrealizować wyżej wymienione układy wejść/wyjść Podajemy liczbę w systemie dziesiętnym a potem dokonujemy przesunięć bitowych.
kordirko ma rację, każdy uP w sumie ma operacje przesunięć bitowych. Jeżeli asembelr Cie przeraża zrób to tak: LICZBA = Q4*8 + Q3*4 +Q2*2 +Q1 Nawet BASCOM powinein poradzić z tym sobie odpowiednio (zrobić przy użyciu przesunięć).
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
" >> " 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
Naucz się używać definicje bitów i przesunięcia bitowe, bo aby sprawdzić co chcesz ustawić trzeba sięgać do datasheet, a mało komu chce się to robić. [syntax=c]// nie tak PORTA^=(1<<2); //tylko tak: PORTA^=(1<<PA2);[/syntax] Podobnie dla WDTCSR, itd.
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ę...
Wpisz do rządka poszukiwania Google - register przesunięcia 8 - bitowy - zasady dzialania
Widzę tam trochę dziwne założenia: W definicjach masz podane, że wykorzystujesz piny D3-D6, co prawda kolejno, ale nie na granicy nibble, natomiast w kodzie: [syntax=c] // Funkcja wysyłająca 4 bity danych do wyświetlacza LCD void Send4BitsLCD(uint8_t data) { PORTD &= 0xF0; // Wyczyszczenie starszych 4 bitów PORTD |= (data & 0x0F); // Ustawienie...
witam, właściwie rozpoczynam przygodę z AVR'ami i językiem avr-gcc i muszę przyznać, że kompletnie zgłupiałem poniżej zamieszczam kod (jako wycinek większej całości), który moim zdaniem nie działa prawidłowo używam AVRStudio 4 ustawienia projektu: 1. ATmega8 2. fcpu 1000000 3. optymalizacja -O0 (wyłączona) oto kod : [syntax=c] #include <stdint.h>...
Nie wiem o czym jest ta dyskusja, już w 5 poście napisałem, że rozwiązaniem są pola bitowe, umożliwiające praktycznie stworzenie definicji takich jak użytre w programie (z bardzo niewielkimi, możliwymi do automatycznego przeprowadzenia zmianami). To wy tu dywagujecie o operacjach przesunięć bitowych i magicznych makrach...
kolega xury podał ci dodatkowo nazwy poleceń do przesunięć bitowych, które można wykorzystać , chociaż można byłoby je samemu spokojnie poszukać. Teraz wystarczy też tylko zajrzeć do helpa Bascoma żeby zobaczyć jak można się nimi posługiwać. W helpie masz prawie gotowca.
Ok, nie zauważyłem, umieść ten kod w znacznikach syntax. Zapisuj te konfiguracje z wykorzystaniem przesunięć bitowych. Nich timer jeśli już zmniejsza wartość licznika ustawionego na ustawiony odcinek czasu. Wykorzystaj tryb CTC do odmierzania czasu. Do wykrywania impulsu wykorzystaj przerwanie zewnętrzne.
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]
Pokaż schemat. Zdecyduj się na jedno z rozwiązań ustawiania bitów: [syntax=c]_BV(ADSC) //użycie makro (1<<ADSC) //przesunięcia bitowe[/syntax] Nie mieszaj tych dwóch sposobów, by kod był jednolity. Przykłady: http://mikrokontrolery.blogspot.com/2011...
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.
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+............
przesuniecie bitowe mikrokontrolery bitowe brother przesunięcia
zacięcie stacji serwisowej zasilacz domofonu elfon sonoff temperatura
paromat simplex paromat simplex
Palnik na olej opałowy gaśnie po kilku minutach pracy Lokalizacja króćca zasilającego w pompie VW LT 2.5