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?
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.
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...
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...
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...
powiedz prowadzacemu zajecia, ze nauka ahdl to czysta strata czasu; a moze lepiej nic nie mow ... :) /.../wydaje mi się że dobrze/.../ troche bledow jest :) 1. variable A S powinno byc zadeklarowane jako 5 bitowe DFF, a obliczane tak samo jak powyzej: S[] = ( 0, S_ab[] ) + ( ... 4.wyj[]=S[] div B"0100"; ahdl nie pozwoli ci na dzielenie niczego poza...
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...
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...
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;
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!.
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 :)...
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...
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.
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 !
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,...
żeby po samym naciśnięciu switcha Co Masz na myśli ? By zmienić kolejność przesuwania bitów Musisz albo nacisnąć drugi raz ten sam przycisk, lub też nacisnąć inny, ewentualnie jeśli skończy się przesuwanie w lewo, nastąpi przesuwanie w prawo. Jeśli ma być to ten sam przycisk to Musisz dodać informację, która będzie widoczna dla podprogramu, który z...
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ż...
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...
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))...
Ok, dziękuję wszystkim za chęć pomocy, właśnie rozwiązałem problem i chcąc oszczędzić czas przyszłym potencjalnym osobom błądzącym w tym samym rejonie postaram się trochę przybliżyć temat: 1. Pierwszą rzeczą, jaką zrobiłem było napisanie programiku działającego na zasadzie obliczania, a następnie sprawdzania sum kontrolnych. W internecie były dostępne...
Wiem że jest to zależne od typu mikrokontrolera. Mnie interesuje AVR.. a w jakich prockach przesuniecie w lewo dodaje 1? 4\/3!!
jak sie nie myle to jest przesuniecie bitow w lewo w pierwszym przypadku o jedna pozycje w drugim o dwie
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.
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...
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...
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 --->...
w pierszym przypadku dla rozwinięcia i czytelności - przesunięcie bitowe w lewo - shl - powinno się znaleźć ;)
1.Masz błąd w kodzie Zauważ, że jak czujnik wyśle wartość 100,200,300,400,505 to wszystkie diody się zapalą i tak zostanie. PORTC musisz zerować przed każdym zapaleniem diod, bo inaczej one nie zgasną dopóki W nie przyjmie wartości z zakresu 506..1023. 2.Lepiej gdyby kod był taki Do W=Getadc(5) Portc= &B00000000 //ustawiamy wszystkieg diody na 0 Portc.4=(W/512)...
Witam muszę nauczyć tworzyć rejestry n bitowe z przerzutników typu D i T z funkcjami przesunięcia w lewo lub w prawo, zapis, i np suma. Wszyto ma być w zapisie VHDL walczę już z tym od 2 tygodni mam problem z odwzorowaniem wszystkich sygnałów dla przykładu rejestr 5 bitowy na przerzutniku D z funkcjami zapis , xor, przesunięcie w lewo przyjąłem y1(SW7)...
Procedura odczytu wartości jest całkiem zła, a ustawień przetwornika nie pokazałeś. Obecnie masz coś takiego: czytasz bez potrzeby w kółko nieważną wartość z ADC, a czytanie przerywasz po ustawieniu bitu gotowości, który być może został ustawiony już po odczytaniu nieważnej danej. Nie rozumiem dlaczego bit "DONE" miałby być ustawiony po odczytaniu...
Nie wiem dokładnie jak to działa... Działa to tak: Przetwornik w LPC1768 na ustawione próbkowanie na wartość np. 100,0 kHz. Ustawiam ten odczyt w pętli for (;;), która wykonuje się 20 razy (oznacza to liczbę próbek). W rezultacie daje to okno częstotliwościowe równe 5,0 kHz, czyli że w tym oknie zmieści się dokładnie 1 okres przebiegu o częstotliwości...
zamienić moją zmienną na system dwójkowy Piszesz tak: "Integer.toBinaryString(a)". Tu masz przykład do zabawy: 255<<3 = 2040 11111111<<11 = 11111111000 255>>3 = 31 11111111>>11 = 11111 255>>>3 = 31 11111111>>>11 = 11111 Zacznij od zrozumienia przesunięć bez przypisania, a zrozumiesz o co chodzi. Różnica między...
Przeanalizowałem kod z przykładu pobranego ze strony NXP "Sample Code ADC" (kod niestety nie działa... ;/) i z dokumentacją napisałem kod, który zatrzymuje się w funkcji int ADC_GetData (uint8_t ChannelNumber) przed linijką [syntax=c]LPC_ADC->ADCR |= (1<<ChannelNumber);[/syntax] i nie wiem dlaczego tak to się zachowuje :?:. [syntax=c]#include...
Dzięki za chęć pomocy, oto program który wysłałem na maila: #define F_CPU 1000000UL // oscylator wewnetrzny AtMega8 #include <avr/io.h> #include <stdlib.h> #include <util/delay.h> #define WE 5 // przypisanie linii 1-Wire dla pinu PC5 #define PORT_1WIRE PINC #define CLEAR_1WIRE DDRC&=~_BV(WE) // stan niski magistrali #define...
Witam, problem tkwi w wyświetleniu temperatury na LCD. Czujnik działa w trybie 12 bitowym. Szczytuje pierwsze 12 bitów z pamięci scratchpada, sprawdzam czy temperatura jest + czy -, a następnie dokonuje konwersji temperatury na string. Na wyświetlaczu pokazują się jednak dziwne rzeczy. Użycie funkcji typu sprintf odpada (zajmuje za dużo miejsca). Konwersja...
Witam. Od niedawna uczę się ARMów i mam problem. Kiedyś napisałem funkcję do obsługi ds18b20 na AVRy, teraz chciałem ją zaimplementować pod LPC2142 w środowisku Keil i niestety mi nie wychodzi. Poniżej przedstawiam kod źródłowy już zmodyfikowanej funkcji pod LPC. ds18b20.h #include <stdio.h> #include "lpc214x.h" #define WE 20 #define...
Nie wiem czy dobrze wybrałem dział, ale nie wiem czy błąd tkwi w oprogramowaniu czy w podłączeniu :D Na razie podłączałem jeden czujnik do portu D0 docelowo mają być dwa czujniki temp jeden przy całym układzie a drugi dalej by móc mierzyć temp na zewnątrz, wyświetlacz 8-segmentowy razy 2, temp będzie mierzył od 0 do 99 stopni, za pomocą przełącznika...
jak zadajesz takie pytanie, to zawsze podaj: -jaki procesor -ile ew. masz miejsca w pamieci (na tablice itd.) -raczej podawaj dokladnie problemy, bo to jest dosyc ogolne... -jaka ma byc dokladnosc tego jest cos takiego jak fixedpoint math - to taka matematyka na liczbach ulamkowych z uzyciem liczb calkowitych. Polega to na tym, ze zamiast...
Program przepisałem całkowicie z http://student.agh.edu.pl/~coni/avr_1wir... zmieniłem tylko port na PC5. Najpierw podłączyłem dobrze i otrzymywałem takie coś: -16.1\0x00\0x00\0x00-16.1\0x00\0x00\0x00... No w moim mieszkaniu to tak ok 24°C. Potem wyciągnąłem...
Witam! Od jakiegoś czasu staram się oprogramować żyroskop, który znajduje się w zestawie rozwojowym Stm32f3-discovery. Jest to żyroskop L3GD20. Komunikuje się z uC poprzez interfejs SPI (narzucone przez konstrukcję zestawu). Generalnie komunikacja działa, ale bardzo chaotycznie. Przykładowo: - na zapytanie o rejestr WHO_AM_I dostawałem kiedyś odpowiedź...
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
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....
Witam. Skoro tak to zastosuj układ CD40194. Pozdrawiam.
Temat zamykam, ponieważ problem został rozwiązany.
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. 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ę...
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...
operacje bitowe przesuniecie mikrokontrolery bitowe przesunięcia bitowe
tracer highlander silent makita wirnik iskrzy odlicza timer
gdzie montować zawór mieszający gdzie montować zawór mieszający
Zbyt wysokie obroty silnika w agregacie prądotwórczym Zbyt wysokie obroty silnika w agregacie prądotwórczym