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. Kod można skrócić o połowę. 2. Stosuj sobie przesuniecie bitowe zamiast liczb szesnastkowych bo można się pogubić. 3. To nie C++ tylko C.
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...
Dzielenie zmiennej int16 na dwie mniejsze możesz zrobić tak:[syntax=c]int 16_t zmienna, zmienna1; int8_t mala_zmienna, mala_zmienna1; mala_zmienna = zmienna >> 8; //przesuniecie bitowe skopiuje 8 bitów starszych mala_zmienna1 = zmienna; // skopiuje tylko 8 bitów najmłodszych zmienna1 = (mala_zmienna << 8) + mala_zmienna1; [/syntax]
Witam ! Przyklad dla zmiennej 8 bit unsigned char dana=0; //deklaracja zmiennej 8bit unsigned char a,b; //wartosci odczytane z przetwornikow signed char x; //roznica dana=dana<<1; //przesuniecie bitowe w lewo if( (a-b)>x) //sprawdzenie warunku dana=dana|1; //wpisz "1" Mysle ,ze o to chodzilo. Pozdarwiam ogr
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?
Czy takie całkowanie "trapezowe" ma sens w przypadku równomiernego próbkowania? Jest dokladniejsze, rownomierne probkowanie nie ma tu nic do rzeczy. Co do samego sposobu calkowania to wystarczy sobie wyprowadzic wzor na pole obszaru pod funkcja liniowa. Sklada sie to pole z sumy pola trojkata prostokatnego i prostokata czyli wzor podany powyzej. programowo...
Jedyną "trudnością" jaką musisz pokonać to to, że przesuwać tak da się tylko w prawo :)
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...
Przede wszystim, jesli oczekujesz pomocy, musisz podac na jaki procek ten assembler. Po komendach widze ze nie jest to x86, czyli PCet. Byc moze chodzi o jakis mikrokontroler. Nie wiem czy wiesz, ale assembler nie ejst przenoscym jezykiem i nie ma jakies jego standardu - w przeciwienstwie do Ansi C czy pascala. Dalej nie wiem czy wiesz, ze nawet jesli...
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;
Nie znam składni pascalowej, więc napiszę w pseudokodzie: a = 10000011; b = 10000000; for (i=0;i<8;i++) { if ((a and b) == 0) then tablica[i] = false; else tablica[i] = true; przesuń "b" bitowo w prawo; }
for - pętla, tak jak napisałeś bit= (buf>>j)&1; Operacje bitowe: ">>" przesuniecie w prawo,"&" operacja AND-owania. Poczytaj o operatorach w c i będziesz wiedzial
Nota, co prawda dla AVR, ale te same reguły obowiązują dla innych USART. Pobieranie prowizji punktowej za publicznie dostępne i darmowe materiały jest sprzeczne z etyką i regulaminem forum. Załącznik usunąłem i dodałem link to źródła.
Czy mógłbyś napisać dlaczego 0x38 i 0x39 ? Bo adres musisz bitowo przesunąć o jeden w lewo (czyli przemnożyć x2) ze względu na bit R/W, który znajduje się na końcu transmisji.
operacje mnozenia i dzielenia dumnie opisane jako przesuniecie bitowe lepiej zrealizowac jako przesuniecie bitowe ;) polecenie Shift, szczegóły w helpie... inne propozycje jak bede mial wiecej czasu ;) Pozdrawiam
Dzięki za pomoc BlueDraco, podziałało 1ul << x : ) , nie przyszło mi na myśl że przesuniecie bitowe działa tylko dla 16 bitów, ciągle człowiek się czegoś uczy. Jeszcze raz dzięki i pozdrawiam!.
Po pierwsze to po resecie mikrokontrolera piny są ustawione jako wejścia więc nawet nie trzeba tego robić Po drugie to kierunek ustala się za pomocą rejestru DDRx a nie PORTx (to nie Bascom) Po trzecie to musisz doczytać jeszcze o przesunięciach bitowych bo szybko na tym polegniesz w C. To podstawa. Po czwarte to klawisze (słicze) musisz mieć albo podciągnięte...
Witam, wie ktoś może jak zbudować obwód żeby podzielić 4-bitową liczbę przez 2? czyli przesunąć każdą jedynkę w liczbie o jedną pozycję w lewo
Przesuń w prawo o 2 bity.
wlasciwie te dwa sposoby to identyczne sa :D... tylko oczywiscie, jesli chodzi o iplementacje, to lepiej stosowac przesuniecie bitowe (pomnozyc przez 2^n to to samo co przesunac liczbe o n miejsc w lewo... dzielenie w prawo :)), gdyz procesor szybciej to liczy :)...
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.
Tez mi sie wydaje dziwne ze nie mozna tak zrobic ale niestety tak jest.Zrozumielem dokladnie o co ci chodzilo jako ze kiedys sam lamalem sobie glowe nad asmem ale w razie jakby chciec to zrobic w ten sposob lepiej jest dac przesuniecie bitowe bo bedzie ono efektywniejsze.
mozesz mi tylko wytlumaczyc jak dziala ta petla while a raczej to w niej bo jakos nie moge tego rozszyfrowac :] Moze w ten sposob bedzie bardziej czytelne: while(rozmiar >= (1 << i)){++i;} (1 << i) to po prostu przesuniecie bitowe (przesuniecie "1" o i bitow w prawo). Aby wiedziec, ile bitow wystarczy do zapisania...
w pierszym przypadku dla rozwinięcia i czytelności - przesunięcie bitowe w lewo - shl - powinno się znaleźć ;)
Tak na wszelki wypadek mozesz poczekac wiecej niz 250 ms (sugeruje poczekac 750 ms tyle co dla DS18S20).Moja uwaga co do samego programu: nie znam sie na bascomie ale nie ma tam przypadkiem czegos takiego jak przesuniecie bitowe >> i << ? Przeciez zarzynasz ten biedny procek dzieleniem i mnozeniem arytmetycznym !
Trochę konfudująca wiadomość, zwłaszcza, że w datasheecie nie ma wzmianki o komórkach. Na wikipedii opisano pamięć EEPROM jako pamięć, gdzie dane są zapisywane w komórkach, które są grupowane w strukturę wielokrotności 8 bitów. Zatem mam tutaj dostęp do 32768 komórek, każda 8-bitowa? Wówczas zapisanie jednej wartości float wymagałaby rozdzielania na...
Co to znaczy "wchodzi klatka z bufora"? To, co napisałeś, powinno w każdym przejściu przesunąć W1..W6 o jeden bit w lewo, wsuwając po jednym bicie z W1_POM..W6_POM. Jeśli jest inaczej, to zapewne błąd leży w procedurze obsługi multipleksowanego wyświetlacza, co by mnie wcale nie zdziwiło - pokaż tę procedurę.
Ustaw wszystkie bity FTH w rejestrach FCR, zarówno dla RX jak i dla TX. To jest pierwsza rzecz którą zauważyłem w Twoim kodzie, która u mnie jest zrobiona inaczej. Natomiast druga - kluczowa - też już była wspomniana: Postraj się używać definicji zawartych w pliku opisowym danego układu. Wpisywania i odczytywanie tych zer i jedyne z przesunięciami przyprawia...
Dzieki za pomoc udalo mi sie zrobic dzialaja przyciski, uP reaguje na nie, ale mam pytanie o ta instrukcje: if((PINB&(1<<PB0))==0) PINB oznacza pine portu B ale nie pisze jaka tylko ogolnie? &-wskaznik czyli w tym momencie jak dziala? 1<<PB0 -przesuniecie bitowe o 1 bit w lewo to wiem, ale dlaczego przesuwamy?Po co to przesuniecie?...
https://stackoverflow.com/questions/1024... czemu u żywasz różnych DeviceId? raz 1 potem 2 ? spróbuj Dim register6() As UShort = master.ReadInputRegisters(1, &H109, 3) bo mam wrażenie że nie odniosłeś się do kwestii HEX Tam (rejestr 109) odbierasz 3x 16bitów bez znaku, więc a*16^4 + b*16^2+c Kolego a jak poskładać...
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...
Da się zrobić tylko układ będzie trochę bardziej skomplikowany. Można odsunąć akcelerometry (żyro pomiędzy) od siebie i mierzyć przyspieszenia liniowe i odśrodkowe i na tej podstawie np. przy dodatkowym użyciu FK liczyć obrót. W segway masz kilka żyroskopów ustawionych pod różnym kątem do siebie. Temat jest bardzo ciekawy. Od rozwiązań prostych do bardzo...
Poczytaj o przesunięciach bitowych to się dowiesz
chyba w AVRach w takim razie w adresie ostatnia cyfra 0 oznacza ramkę "write", a ostatnia cyfra 1 oznacza "read", czyli adres 0x62 w nocie SCD41 oznacza 0xC4 dla nadawania i 0xC5 dla odbioru Nie w AVR tylko ogólnie w I2C. Najmniej znaczący bit określa typ operacji zapis/odczyt. 7 bardziej znaczących bitów to adres urządzenia. Autorzy not urządzeń I2C...
Weźże zapisz te wartości binarne normalnie, z przesunięciami bitowymi, co?
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....
dystans <= ((v_dzwieku / f_zegara)*(zliczone_takty)... - korekcja; o ile operacja mnożenia jest dobrze określona, o tyle w przypadku dzielenia musisz użyć jakiegoś układu który ci ten wynik dzielenia obliczy, no chyba że dzielisz tylko przez 2^n, wtedy wystarczy przesunąć bitowo w prawo. Obawiam się jednak że próbujesz zrobić...
Skoro w przesunięciach bitowych i tak są stałe, to kompilator tak czy inaczej zwinie to wszystko do liczby.
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!
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ę...
Tak, z tym bajtem to oczywiście dla pełnego zakresu obrotu potencjometrem 4 razy będzie rozjaśniać i ściemniać w zakresie 0-63 , więc przesył działał prawidłowo. Z tym Arduino w nadajniku to masz wszystko w porządku? Próbowałeś zamigać ledem co 1s z delay, wysłać coś na UART? Może w ogóle kwarc masz źle ustawiony. Może zamień je ze sobą. Jak w Arduino...
a czemu dwa razy na bcd?
Jak piszesz: if (PINB7!=0) to tak jakbyś napisał: if (0x80!=0) Wynika to z faktu że PB7 to makro odwołujące się do nogi procesora a dokładnie do bitu rejestru który trzyma stan tej nogi. Dlatego nie działa. Następne co cię trapi: 1<<PB7 Tak to przesunięcie bitowe. Więc jeśli piszesz: if (PORTB & (1<<PB7))...
Witam Muszę sprawdzić, czy zawartość rejestru jest większa, czy mniejsza od pewnej stalej (z zakresu 110-120). Zakres wartosci sprawdzanego rejestru rozciaga sie od 0 do 255. Zrobiem to korzystajac z subi, ale w wyniku zawsze dostaje wartosc ujemna i brpl (branch if plus), czy brge (branch if greater) nie dzialaja tak jak ja chce. Rozchodzi sie o to,...
Nie wiem jak się zabrać do tego zadania. Książka od Javy do ręki i czytasz. Poszukaj informacji na temat reprezentacji liczb binarnych, dziesiętnych i szesnastkowych, oraz o przesunięciach bitowych. Tyle mniej więcej powinno Ci wystarczyć do rozwiązania tego zadania.
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...
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...
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...
Dziękuję serdecznie za wszelkie sugestie - temat zamykam jako rozwiązany, skończyłem na przesunięciach bitowych, działa szybko, zajmuje mało pamięci i jest proste. Pozdrawiam i raz jeszcze dziękuję za wszelką pomoc !
Napisałem zanim się domyśliłem - dlatego wykasowałem pytanie o optymalizację :) Takie rzeczy ćwicz w Cmaniaku, bo kod kompilatora dla AVR może robić różne uproszczenia.
Chodzi o to by ilość próbek podlegających uśrednianiu była potęgą liczby 2. Dzięki czemu dzielenie przez N można zrealizować przesunięciami bitowymi. AVR nie ma instrukcji dzielenia.
Bitowe OR czyli ustawi najmłodszy bit na 1 czyli będzie nieparzyste np. 2 binarnie to 10 3 binarnie to 11 Dodano po 2 same parzyste liczby k=( (rand()%118) -9) &(~1); ~ oznacza negacje bitową.
Przy warunkach na konkretne wartości wykonanie ich zależy nie tylko od jednego klawisza ale też od stanów pozostałych pinów portu - rób z przesunięciami bitowymi. Opóźnienia nie są do niczego potrzebne. Sprawdzasz przyciski w pętli? PS: wystawianie 16bit licznika na 8bit port?
Ok, racja, ale implementacja jeszcze zależy jeszcze od tego, czy to będzie assembler, czy np Bascom... ;) W tej kwestii nadal jest cisza ze strony amaram-a . Tak się jeszcze zastanawiam, czy x/10 również da się zastąpić przesunięciami bitowymi ? Pozdr. Light-I
Cześć. Mam taki kawałek kodu: [syntax=c](1) time.data |= (1<<58); //Warning2left shift count >= width of type [enabled by default] - wszystko powyżej 1<<15 wyrzuca ten błąd (2) time.data |= 0x400000000000000;//ok[/syntax] Wersja pierwsza wyrzuca ostrzeżenie i oczywiście nie działa. Próbowałem też rzutować - również źle. Wersja druga jest...
mhy :D analizuję jeszcze operacje na bitach i w niektórych występuje np. PORTB jeżeli jest on zdefiniowany w ten sposób #define PORTB_SFR_IO8(0x18) to wynika z tego też, że ma on wartość 0x18 czyli przy przesunięciach bitowych mam używać takiego ciągu 00011000?
Jeszcze nie czytałem o przesunięciach bitowych, a o przerwaniach nawet nie wiem wszystkiego :) Na razie idę na łatwiznę(chcę aby działało, nie ważne jak ale, żeby działało), później funkcję odczytywania rc5 wykonam na timerach(o których też nie wiele wiem). Chyba po prostu zmienię z systemu dwójkowego na dziesiętny :) nie pomyślałem o tym wczoraj :)
Proponuję rozbić całość na 2 funkcje. 1. Inicjalizacja wartości sumy wywoływana przy każdej zmianie szerokości okna. W ten sposób masz bezpieczny i niezależny sposób zmiany szerokości okna. Wejście: MAFTABlenght Wyjście: None, ew. status. Operacja: Wyznaczenie wartości MAFUTABpointer oraz MAFUSum. 2. Obliczanie wartości po dodaniu kolejnej próbki, czyli...
Pituś Bajtuś masz rację, po prostu myślałem, że nie trzeba pisać przed adresem "np.", a jednak. Jest to oczywiste, że 0x000 to adres przerwania resetu. Mój błąd. Co do twojego pytani adj_max84, to tak jak powiedział Pituś Bajtuś. Możesz do tego celu użyć etykiety, dawno pod asemblerem nie pisałe i jakoś takie rozwiązanie wyszło mi z głowy ;P. Odnośnie...
Tak, tylko dobrze by było przed takim nawet ćwiczeniem dokładnie poczytać w książce właśnie, po pierwsze o samych operatorach w języku C w tym o podwójnych operatorach. Ale także o operacjach logicznych na bitach no i o przesunięciach bitowych << >> . Po przeczytaniu tego i zrozumieniu - te zapisy powyżej przestaną być tajemnicze i nie będzie...
Co do teorii mamy 24 bitowy kolor czyli w przelozeniu na bity RRRR RRRR GGGG GGGG BBBB BBBB a tu 16 bitowy czyli RRRR RRGG GGGB BBBB czyli literka R odpowiada za wartosc koloru czerwonego (np. 1011 0110 - czysty przyklad z kalosza ciagniety) G i B analogicznie - z takiego czegos sklada sie caly kolor Skupmy sie na R (reszta analogicznie) w 24 bitach...
Powiedzmy, że jest zmienna 64-bitowa (long long int). Do tego mam 4 liczby 16-bitowe. Jak wpisać te 4 liczby po kolei do zmiennej 64-bitowej? | 64bit | = | 16bit | 16bit | 16bit | 16bit | Rozumiem, że trzeba to zrobić przesunięciami bitowymi ale właśnie coś nie chce mi to iść gdy np zrobię to w ten sposób: long long int w = 0; w = (1000 <<...
Jak byś poczytał o przesunięciach bitowych i to co napisał mirek to byś sobie sam odpowiedział na swoje pytanie. Nie mam książki Mirka ale wydaje mi się, że na pewno to jest tam opisane. Z resztą dwa posty wyżej jest odpowiedź, z tym, że się Mirosław pomylił bo (1<<1) != 0x01 :) Edit: Widocznie coś źle zrozumiałem, ale nie o to chodzi, autor musi...
A to co masz w tej chwili tobie działa ? Mam na mysli te dwie linijki kodu ? W nocie katalogowej masz gotowce w zakresie inicjowania samego SPI jak i wysyłania i odbioru danych. Jest w c i asm. Mimo że odbierasz tylko dane musisz jednak coś wysłać choćby 0 bo wpisanie tam czegokolwiek jest warunkiem aby wyzwolić impulsy zegarowe SCK(pisząc TAM mam na...
odczytanie i wysłanie całego bajtu [syntax=c]void send_byte(char wartosc) //wysyla caly bajt do ukladu { unsigned char i; //licznik unsigned char pom; //zmienna pomocnicza for(i=0; i<8; i++) { pom = wartosc>>i; //przesuniecie bitowe w prawo pom &= 0x01; //skopiowanie bitu do zmiennej pomocniczej send(pom); //wyslanie bitu na magistrale...
Jak komuś bardzo przeszkadzają te owiane magią zakłócenia to może zawsze wsadzić A/D na drugą stronę płytki , na inną wydzieloną płytkę . Zrobić 8 pomiarów i wynik przesunąć bitowo w lewo lub 100 innych rzeczy :) Jest całe stado elementów typu filtry , dławiki , czy zwykłe 100n aby wyeliminować / ograniczyć zakłócenia o ile w przypadku tak prostych...
Nie wiem też po co to dzielenie przez 16 w kodzie, przecież wystarczy przesunąć zmienną o 4 bity w prawo, a kod zmaleje w oczach :) Jeśli chodzi o C to przesunięcie bitowe liczby ujemnej jest niezdefiniowane w standardzie. Albert
Nie załączyłeś w jaki sposób ładujesz palete do karty graficznej, ale z tego co przypuszczam wykorzystujesz bezpośrednie zapisywanie do rejestrów. Nie wiem gdzie, ale kiedyś wyczytałem taką uwage, że rejestry karty graficznej przechowujące wartość każdej ze składowych są tylko 6cio bitowe, przy czym ważne jest właśnie 6 młodszych bitów. Aby załadowanie...
Dzielenie zrobiłem jako przesunięcie bitowe , więc teraz chyba na pewno nie będzie problemów z atomowością. Dziekuje za pomoc wszystkim.
Zła odpowiedź była karta z mapą bitową - napisałem że nie można przesunąć ekranu do góry tak jak zaleca producent
TH0 i TL0 to rejestry 8-bitowe - przy czym TH0 to starszy, a TL0 młodszy bajt licznika T0... zatem, aby prawidłowo wpisać je do zmiennej typu unsigned int, należy najpierw TH0 przesunąć o 8 bitów w lewo, a następnie operacją bitową (OR) dodać młodszą część licznika. Załóżmy, że: (odstępy zrobiłem dla lepszej czytelności) TH0 = 0b 1000 1000 TL0 = 0b...
XOR to nie jest odejmowanie. negacja z dodaniem jedynki a pozniej OR to jest odejmowanie. Żebyś lepiej zrozumiał, xor nie daje ci przesunięcia, w związku z tym jeśli przesuniecie w działaniu powinno nastąpić to xor nie zadziała jak odejmowanie. przykład: 12 - 8 = 4 i 12 xor 8 = 8, to tak jak byś w systemie dziesiętnym próbował odjąć od 2 liczbę 8. Jeśli...
Chcialbym zauważyć kolego DR.Vee, że twój algorytm choć poprawny, to jednak nie jest optymalny. Spróbuj nim obliczyć np NWD(100000000, 1) :) Lepiej użyć jednego z nastepujacych algorytmow NWD(a,b) := { jesli ktoras z liczb jest rowna zero, zwróć tą drugą, w przeciwnym wypadku zwroc NWD(min(a,b), max(a,b) modulo min(a,b))...
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...
Zdzis_ek: Faktycznie, do budowy ścian i linii w grach ten zestaw wydaje się być lepszy. Jeżeli możesz, to mam prośbę, żebyś na próbę narysował te podwójne ramki cieńsze (2 piksele marginesu zamiast 1) i jeszcze raz przedstawił planszę PacMana. Zobaczymy, jak będzie wyglądać. Czy w prawdziwej (sprzętowej) Cobrze da się w prosty sposób dorobić rejestr...
Jedyne, co mi przychodziło do głowy, to przesunięcie bitowe w prawo i tak właśnie napisałem, jednak albo moja odpowiedź była zbyt ogólnikowa, albo nie o to chodzi wykładowcy. To jest ośmiokrotne przesunięcie bitowe w prawo. Ten sam efekt uzyskamy, odrzucając cały młodszy bajt. Jeżeli zaokrąglenie ma być zgodne z zasadami arytmetyki, to gdy młodszy...
McMonster - są to podstawy totalne, i wszelkie przesunięcia cykliczne, arytmetyczne, logiczne, piszemy w zeszycie w kratkę.. ;) np mam 11001011 i muszę ten kod przesunąć cyklicznie w prawo/lewo o 1 bit, potem 2,4,5 bitów właśnie z uwzględnieniem bitu C.
Z mojego doświadczenia i opisanych objawów wynika, że Twój program zmienia konfigurację pinów PA13 i PA14. NIe spodziewałbym sie błędu po stronie ST. Najbardziej prawdopodobny jest zapis do rejestrów GPIOA bez wykonania maskowania. Może też być błąd w przesunięciach bitowych jeżeli używasz magic numbers zamiast definicji z pliku stm32l010xx.h. Inna...
Mirekk36, Twój program już na pierwszy rzut oka bedzie działał, bo pobierasz dane z tablicy. Chciałem na początek poćwiczyć z tymi przesunięciami bitowymi... Tehaceole, strasznie to zagmatwane, ale wierzę, że działa :D Na razie jestem na tzw. oślej łączce, więc skupiam się na podstawach, proste operacje na bitach, konfiguracja portów itp. Widziałem...
Dobra, czyli dla czytelności kodu będę stosować przyrostki U i UL dla wartości powyżej 65535 i przy przesunięciach bitowych, natomiast co do długości zmiennych widzę, że zdania są tu podzielone, więc nie wiem. Sprawdzę to chyba empirycznie, ile czasu zajmuje ta sama operacja na zmiennej 8, 16 i 32-bitowej. Przed operacją ustawiam pin, po operacji zeruję...
Ale tablica potrzebna do wyznaczenia wartości elementów ciągu ma rozmiar tylko taki, który element ciągu chcesz poznać. Jak chcesz 50-ty, to potrzeba tablicy 50-elementowej typu long long. Co więcej - po wyznaczeniu wartości elementu ciągu można śmiało ją usunąć. W algorytmie sita nie ma możliwości efektywnego skrócenia wielkości tablicy o więcej, niż...
To po twojej stronie masz problem, zmienne pewnie są 32bitowe a ty czytasz 16bitowe rejestry tak ustawiłeś w Logo. Zmień na Dword i zrób przesunięcie bitowe. Większość liczników odczytuje się jako Real 32 bit lub wodomierze 64 bit
<< - przesunięcie bitowe w lewo (na polski - pomnożenie razy 2) >> - przesunięcie bitowe w prawo (na polski - podzielenie przez dwa do części całkowitej) ~ - negacja logiczna (NOT) & - iloczyn logiczny (AND) *x - wskaźnik na element (podczas definiowania; podczas użycia - jest to wartość elementu wskazana przez wskaźnik)
nieprawda przesunięcie bitowe "zwróci" liczbę 16 bitową
Ja zrobiłem bezsensownego ora tylko w przykładzie, funkcja CMSIS robi za to bezsensownego anda i o jedno bezsensowne przesunięcie bitowe więcej Biorąc pod uwagę fakt, że 99,666% przypadków użycia tej funkcji to stały parametr, myślę że optymalizator sobie z tymi przesunięciami poradzi. Teraz sprawa się nieco komplikuje, ale to nie problem. Komplikacja...
Ale projektuję nową wersję swojego urządzenia i nie wiem czy lepiej będzie stłumić sygnał dzielnikiem hardware-owo czy software-owo. Zwykle lepiej jesty wykorzystywać pełną rozdzielczość ADC, a potem ew. robić przeliczenia softwarowo. Czyli tak jak ci kolega doradzał - przesunięcie bitowe i tyle. Jeśli z 24 bitów robisz 16 to nie ma siły - jakoś te...
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ść...
Poniżej przedstawiam działającą procedurkę jaką sobie napisałem do obliczania CRC16 w komunikacji po ModBusie z falownikami. Nie wiem tylko pojęcia czy algorytm obliczania dla ModBus jest jednakowy np z tym dla czujników dallasa z 1-wire ale CRC to CRC :) ;crcl, crch - zmienne zdefiniowane w wewnętrznej RAM ;-----obliczanie CRC16----r0, r1, acc----...
Witam wszystkich. Mam małą prośbę mam do zrobienia układzik mnożący liczby 8 bitowe bez znaku (mnożenie przez dodawanie i przesuniecie). nie wiem zbytnio od czego mam zacząć. prosiłbym o pomoc. z góry dzięki dla wszystkich którzy pomogą.
To co chcesz osiągnąć robi się poprzez tzw przesunięcie bitowe i na twoim przykładzie wygląda to tak: [syntax=csharp] short wynik = (short)((147 << 8) | 7) [/syntax]
Aaaaa, no to wiele tłumaczy :) Musisz zastosować przesunięcie bitowego. Twoja 16 bitowa wartość jest zapisana w dwóch rejestrach 8 bitowych. Czyli została podzielona na młodszy i starszy bajt. Gdybyś zrobił normalne przypisanie: rejestrH o osiem bitów w zmiennej doWysłania , to spowoduje że dostaniemy wartość: 1111111100000000 Zamiast (tak jak na początku):...
Kolego... notę cały czas czytam :) No właśnie chyba nie bardzo :) O ile dobrze zrozumiałem twój kod to po prostu odczytujesz wartość 16-bitową z przetwornika. Czyli przez pierwsze 5 bitów tego co odczytujesz trwa konwersja i odczytujesz zera, potem jest bit przerwy i dopiero dostajesz wartość po przetworzeniu. A że tobie już zostało tylko 10 bitów...
Hunterhouse ten sposób z liczeniem liczby modulo jest genialy :) Sam na to wpadles?? Na koncu jest jeszcze obliczany pierwiastek,tez to jest dosc czasochlonne dla procka , zastanawiam sie czy na niego nie ma podobnego sposobu :) Czyli beta przyjmuje wartosci od 0- 31, i zmienia sie w zaleznosci od k ,ale caly czas w zakresie 0-31 . Jak dokladnie obliczone...
Dzieki wielkie, ustawilem przesunięcie bitowe tak jak powiedziales i zadziałało :)
Przy operacjach bitowych dobrze czasem pomagać sobie przesunięciami Np. 1 << 0 oznacza bit 0 (wartość 1 - szesnastkowo 0x01) 1 << 1 oznacza bit 1 (wartość 2 - szesnastkowo 0x02) 1 << 2 oznacza bit 2 (wartość 4 - szesnastkowo 0x04) .. 1 << 31 oznacza bit 31 (wartość 2147483648 czyli szesnastkowo 0x80000000) Zamiast kombinować...
Tony, Dziekuje za odpowiedz. Bledy w ISE sa malo intuicyjne. ISE WebPack nie wystarczy, musze ISE Fundation zalatwic :(. Grave, Licze sie z takim czasem. Synteza pol dnia, implementacja pol dnia i akurat z pracy wroce. ;) Potrzebuje czegos naprawde ogormnego - implementuje siec neuronowa :). W chwili obecnej chce sprawdzic jaka najwieksza architekture...
TCCR0 = _BV(x<<CS00); Źle użyłeś makra _BV. _BV(x) jest równoznaczne z ( 1 << x ), czyli w Twoim przypadku próbujesz wykonać podwójnie przesunięcie bitowe. Jeżeli x = 3 (CS00=0): _BV(3<<CS00) = _BV(3) = (1<<3) = 0b00001000 czyli TCCR0 będzie równe 0b00001000 . Innymi słowy, próbujesz ustawić bit tylko do odczytu, zamiast...
Zrobilem kilka prostych doswaidczen i moje wnioski to: 1) dlugosc hasa nie wplywa w zaden sposob na wielkosc pliku wynikowego (nawet przy znacznych roznicach dlugosci hasel plik wynikowy ma rozna dlugosc co do bajtu) --->haslo raczej nie jest zpisywane w pliku rar 2) Jest roznica dlugosci miedzy plikiem wynikowym spakowanym bez hasla i z haslem --->...
Wbrew pozorom użycie warunku którego chcesz uniknąć jest najbardziej optymalne. I jeśli przerzucasz się na c, przywyknij to operacji bitowych i z przesunięciami. Ewentualnie jak wspomniano można wykorzystać pola bitowe o ile rozumiesz pojęcie struktury i unii.
operacje bitowe przesuniecie mikrokontrolery bitowe przesunięcia bitowe
naprawa medion magnetofon mechanizm podzielnik koszt
antena pokojowa pralka amica pb5514
Pralka Polar PTL 1109 nie włącza się, brak kontrolek Brak prądu w piecu Buderus - jak zdiagnozować?