Przecież 63 And 19 to właśnie jest 19. Wszystko działa tak jak należy. Błąd jest, ale w tym manualu który podałeś.
Rozwijając to co pisał snnaap o nadpisywaniu, dla pewności lepiej wszystkie wartości maskować/warunkować, wtedy nie ma żadnych nieprzyjemności, jeśli zapomni się o dozwolonych wartościach. Dodatkowo, coś mi nie pasuje przy wysyłaniu danych po SPI. Zakładając, że funkcja wysyła bajt, to w pierwszej linii wysyłasz młodszy bajt słowa, a za drugim razem...
Mam liczbę szesnastkową powiedzmy 0x01 jak się wykonuje natych liczbach operacje bitowe w języku C np. 0x01<<1 albo 0xA3<<2 ?? z góry dzieki. Pozdrawiam
[youtube]https://www.youtube.com/watch?v...
operacje bitowe zastosowanie zboczy rozumienie setowania bit "zawsze1" timery wszelkiego rodzaju zasada działania stacyjek do obsługi napędów/zaworów/siłownikó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...
Poćwicz sobie poszczególne operacje bitowe w kursie C wraz z kompilatorem online Cmaniak: http://mikrokontrolery.blogspot.com/2011... Możesz tam ćwiczyć także symulując Atmega8 (patrz przykład w zakładce Przykłady CManiaka). Dodatkowo: http://mikrokontrolery.blogspot.com/2011...
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...
Założyłeś nowy temat, chociaż zagadnienie nadal dotyczy poprzedniego. [syntax=C] uint8_t tab[8] = {rejestr1.bit0, rejestr1.bit1, rejestr1.bit2,rejestr1.bit3, rejestr1.bit4,rejestr1.bit5,rejestr1.bit... [/syntax] Takie rozwiązanie nigdy nie zadziała, ponieważ tworzysz tablicę 8 bajtów, do każdego z nich przypisujesz jeden bit ze struktury...
Nie, nie zostana spełnione ;) Zeby rozjasnic to kod: [syntax=c] stan+=1<<2; stan+=0<<1; stan+=1<<0; [/syntax] Jest rownowazny: [syntax=c] stan+=1 * 2 * 2; //2 ^2 stan+=0 * 2; // 2^1 stan+=1 * 1; // 2^0 [/syntax][/code]
GPIOC->BSRR = 0x0001 ustawia pin C0 na '1' GPIOC->BSRR = 0x0100 ustawia pin C0 na '0' Chyba raczej nie-bardzo... 4\/3!!
Dla mnie z kolei największą wadą PICów jest ich mała moc obliczeniowa AVR 16MIPS, PIC18 12MIPS - żadna różnica w praktyce. Dodatkowo PIC robi mnożenie 8x8->16 w 1 cyklu, AVR w dwóch:) W mojej opinii wszystkie 8-bitowce to złom w porównaniu do cacek z rdzeniem ARM Cortex-M0, M3 czy M4. Żadne tam cacko. Amd64 robi nawet operacje 128 bitowe (SSE3), w...
... tylko powiedzcie mi jak można zrobić operacje Np. [syntax=c]ulamek = ( (temp & 0x0F) + ( (temp & 0x0F)<< 2 ) ) >> 3;[/syntax]
To jest konwersja na ASCII, np. do wyświetlenia na LCD lub terminalu. Pytania, które zadajesz, nie dotyczą mikrokontrolerów, a podstaw języka C. p jest zmienną wskaźnikową, czyli adresową. *p ++ = x - to zapis x pod adres zawarty w p i zwiększenie tego adresu, tak, aby p wskazywała następny bajt bufora. Jedynka w apostrofach - to znak ASCII - cyfra...
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...
https://obrazki.elektroda.pl/8376286000_... Dzisiaj będziemy rozpracowywać zupełnie nieznany protokół I2C kontrolera LED RGBCW poprzez przechwytywanie i analizę jego pakietów. Użyjemy do tego analizatora stanów logicznych Sigrok, oczywiście zapewniając całemu układowi odpowiednią separację galwaniczną gdyż analizowane urządzenie pracuje...
Witam, No trochę jaśniej jest. Ram który przeznaczyłeś na stos jest prawie całym obszarem RAMU mikrokontrolera. 0x1FE4 - wielkość twojego stosu (obliczone wierzchołek stosu(0x1FF0) - początek sterty(0xc). Stosu Ci zapewne nie zabraknie. np. wywołujesz w mainie moja_funkcja(int param1, int param2, char tab[20]) to musisz przy wywoływaniu z przekazaniem...
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...
Teraz wszystko wydaje się ok :) https://obrazki.elektroda.pl/3673521600_... Nawet ciąg znaków dpID 19 jest wyświetlany poprawnie Mogę przeczytać wszystko za pomocą JavaScript. Jak ma uzyskać to samo z MQTT? EDYCJA: O flagach - nie sądzę, że wydrukowanie na stronie internetowej jakiegoś longintu lub 2 longintów dla statusu flagi przynosi...
Takie operacje znajdziesz w każdym kursie programowania mikrokontrolerów w C. Robi się to tak:[syntax=cpp]switch(op) { case 1: port |= 1<<bit; break; case 2: port &= ~(1<<bit); break; case 3: port ^= 1<<bit; break; }[/syntax]
Zastosuj jawne rzutowanie : [syntax=c]tmp = ( (unsigned char) ~PINB >> 4);[/syntax] W CManiaku sprawdź sobie taki program: [syntax=c]#include <stdio.h> int main(void){ unsigned char a,b; a = 0x11; b = ( (unsigned char) ~a >> 4); printf("%x", b); return 0; }[/syntax]
no i przeciez masz zadeklarowana tablice jako dwuwymiarowa, a operajci poddajesz tylko jako jednowymiarowa innymi slowy dokonujesz operacji typu (unsigneg long*)&(unsigned long) co daje oczywiscie blad, bo operatory bitowe nie sa zdefiniowane dla wskaznikow 4\/3!!
http://pl.wikibooks.org/wiki/C/Operatory Prosze
(at)ElektrodaBot Jak konwertować kod 64-bit na 32-bit? /** (at)file Copyright (c) 2025, Gelip Copyright (c) 2024, Andri Kurniawan Copyright (c) 2020, Seungjoo Kim Copyright (c) 2016, Dawid... Bezpośrednia odpowiedź „Konwersja” istniejącego binarnego modułu UEFI X64 na IA32 nie jest możliwa - trzeba ponownie skompilować kod źródłowy z ustawieniem architektury...
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...
To czego jeszcze nie wiesz? Zrób unię = bajt + struktura pól bitowych i do każdego parametru odwołujesz się przez pola struktury, a jeżeli ten bajt dostajesz lub potrzebujesz wysłać do innego urządzenia, to odwołujesz się do bajtu. Proste i skuteczne. Bardziej interesujące może być pytanie co Ty chcesz zrobić z tymi danymi. Być może sam sobie stworzyłeś...
https://obrazki.elektroda.pl/7393623100_... Witajcie, dziś dla odmiany mała zabawa programistyczna. Przedstawię tu jeden prosty trik na oszczędzanie pamięci przy zapisie typu integer w języku C i nie będzie to po prostu rada w stylu "użyj typu 8-bitowego zamiast 32-bitowego". Pokazany tu typ sam dobierze sobie potrzebną ilość bajtów...
https://obrazki.elektroda.pl/2227184700_... Dzisiaj uruchamiamy moduł MCP9808, czyli cyfrowy termometr działający w zakresie od -40°C do 125°C przy typowej dokładności 0,25°C, zasilany napięciem od 2.7V do 5.5V. Najpierw zaimplementujemy jego sterownik w oparciu o gotowe funkcje dla komunikacji I2C by móc odczytywać z niego pomiary...
Zaraz tak zrobię, ale chciałbym też dodać, że jak wymieniam kości ram żeby je pojedynczo testować w memtest. Nie ważne którą wsadzę, jak próbuje uruchomić komputer to głośnik płyty nie wydaje dźwięku a sam komputer tylko kręci wiatrakami, a na monitorze czerń. Dopiero po wyłączeniu zasilacza, odpięciu kabla 24 pin i ponownym jego wpięciu a następnie...
Chyba zaczyna się ujawniać wyższość procesorów o możliwie długim słowie danych - nawet operacje 32 bitowe będą atomowe. Nie będą niestety o ile operacja RMW będzie realizowana przez kilka rozkazów, które mogą być przerwane. Będzie natomiast w systemie, który będzie modyfikować pamięć jednym rozkazem, który nie może być przerwany (a często mogą być...
Witam. Korzystam z książki Tomasza Francuza "Język C dla mikrokontrolerów AVR. Wydanie II". Używam Microchip Studio v. 7.0.2594 (kompilator 5.4.0). W rozdziale 6. Arytmetyka i operacje bitowe na str. 107 autor zamieścił funkcję konwersji liczby typu stałopozycyjnego na odpowiadający jej łańcuch znakowy - void AccumToStr(_Accum z, char *Bufor). [syntax=c]#include...
Zazwyczaj jak chce się zrobić taki zabieg to jedna linijka Możesz podać przykład w c jak połączyć 8 bitowe wartości w liczbę 24 bitową? W lua i Air200 teoretycznie niektóre operacje bitowe działają, ale jeszcze ich nie testowałem. [syntax=lua]adc_T = temp_msb(0xFA) temp_lsb(0xFB) temp_xlsb(0xFC)[/syntax]
W symulatorze można ustawić taką prędkość zegara jaką zamierzasz zastosować i symulator wyliczy dokładnie ile czasu zajmie wykonanie jakiegoś kawałka kodu, a to już daje jakiś obraz sytuacji
(at)_jta_ Mylisz pojęcia: choć przepełnienie w 'wd' występuje nadal; W języku C są dla wda pojęcia: 1. Przepełnienie - występuje jedynie dla integerów ze znakiem - i jest to Undefined Behaviour 2. Przekręcenie licznika (wrap around) - tylko dla integerów bez znaku W twoim przypadku zmianna wd się nie przepełnia. Przepełnienie występuje w wyrażeniu...
ok, już wyjaśniam - operacje bitowe wykonują się dużo szybciej niż dzielenie, przykładzik: liczba AND 255 - zerujemy wszystkie bity oprócz ostatnich ośmiu które pozostają bez zmian. Jest to odpowiednik reszty z dzielenia przez 256. przesunięcie bitowe w prawo jest odpowiednikiem części całkowitej z dzielenia przez jakąś potęgę dwójki - przesunięcie...
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...
Pytanko z cyklu "jak to robicie?" :-) Załóżmy, że w projektowanym układzie mam port A skonfigurowany następująco: PA.0...PA.4 - skonfigurowane jako wejścia PA.5...PA.7 - skonfigurowane jako wyjścia. Chciałbym jednym poleceniem odczytać pierwsze pięć bitów. Oczywiście mógłbym odczytać cały port: zmienna = portA i wykonać stosowne operacje bitowe na zmiennej,...
Zaletę 51 ja znam tylko jedną - zgrabne operacje bitowe na portach i pamięci. Dalej są same wady, z których główną jest liczba instrukcji potrzebnych do wykonania prostych operacji na danych - zwykle tych instrukcji potrzeba kilka- do kilkunastu razy więcej niż we współczesnych architekturach, co dyskwalifikuje 51 wydajnościowo i pod względem zajętości...
Znasz przecież operacje bitowe: http://mikrokontrolery.blogspot.com/2011... skoro piny ustawiasz i zerujesz. Po prostu zdefiniuj sobie makra za pomocą #define określając, który bit, to który przycisk np. tak: przyciski za pomocą funkcji z biblioteki lub przerwań: http://mikrokontrolery.blogspot.com/2011...
Rozpisz sobie to na bity. Będzi ci łatwiej operować. Te warunki to operacje bitowe (a nie arytmetyczne). Porównywane są zawsze odpowiadające sobie bity. Np. operacja 0x03 & 0x02 da ci dwa, bo tylko bit nr 1 (o wartości liczbowej równej 2) jest ustawiony (ma wartość 1) w obu przypadkach.
Wydajność trudno ocenić - to zależy jak sobie radzi konkretny kompilator. Dla sprytnego jest obojętne czy stosujesz unie czy operacje bitowe do ekstrakcji bajtów (np. gcc w większości przypadków generuje taki sam kod). Pozostaje kwestia wygody i czytelności.
Kompilacja jest jak najbardziej prawidłowa i tego oczywiście należało się spodziewać. Jedna mała uwaga - kompilator generuje kod, który powoduje, że operacje bitowe wykonywane są na bajtach, a nie na słowach 4-bajtowych. Być może jest to powód takiego a nie innego zachowania.
Uwaga czysto techniczna. Zamiast r16 i r17, używaj r24 i r25. Dzięki temu masz możliwość wykonania kilku operacji 16-bitowych w 1 cyklu zegara (adiw, sbiw), co często bywa przydatne. Jeśli wykonuje operacje 8-mio bitowe to po co ma angażować rejestry >=r24?
-makra(?) cbi() i sbi() To są polecenia asemblera, często mówi się "wstawki assemblerowe" jeśli mam rację to które najlepiej wybrać(najszybciej działa), czy nie ma różnicy? bo jeśli nie to chyba po odpowiednim zdefiniowaniu najlepiej użyć makra register_bit. Skoro uczysz się języka C, to warto uczyć się go dogłębnie, więc sugeruje używanie operacji...
Tym razem chcę go podłączyć do płytki Nucleo 144, a tam magistralą steruje każdy inny pin. Jak więc napisać procedurę samego wpisu 8-bitowej wartości na każdy inny pin portu? Czytasz każdy bit po kolei w wartości 8bitowej i wzależności od stanu ustawiasz wartość na pinie. Pomocne mogą być operacje bitowe typu or/and.
No to używasz zabytkowego kompilatora, który akurat jeśli chodzi o operacje 64 bitowe nie jest specjalnie zoptymalizowany. Nowsze mają oddzielne biblioteki pod AVR i stąd różnica, jak widzisz spora. Ja używam 4.7.2/4.8.1. 4.7.2 możesz pobrać ze strony Atmela - wystarczy pobrać sam toolchain, nie trzeba pobierać IDE. Wtedy masz z grubsza to samo co w...
Patriot 60 GB - fajnie by było, jakbyś chociaż podał model dysku, a najlepiej informację, na jakich jest układach. Napis na naklejce niewiele znaczy, najważniejsza jest konfiguracja kontroler+pamięci+oprogramowanie układowe. Bardzo często pod różnymi naklejkami sugerującymi pochodzenie od różnych producentów mamy dokładnie to samo włącznie z topologią...
Tak to wiem ale mam problem bo 8051 może wykonywać operacje 8 bitowe i mam problem z przeliczaniem.
Poszukam. No dobra, ale kod macie, nie ma w nim co optymalizować a to zwykłe operacje bitowe - jak się nie zmieścić? Znaczy sprawdzę w wolnej chwili co on tam zrobił ale to szok ciężki dla mnie - tyle czytam że przy właczonych optymalizacjach są jazdy, a tu w drugą stronę...
Używasz tego rejestru niepoprawnie. Operacje bitowe na nim nie mają sensu, ponieważ zapisanie w dowolne miejsce zera jest w manualu zdefiniowane jako operacja bez efektu, a dodatkowo pojawia się informacja, że rejestr ten jest "write only" i nie należy go odczytywać. Tak więc aby zapalić diodę powinieneś po prostu zrobić: GPIOA->BSRR = 1 <<...
operacje bitowe przesuniecie operacje logiczne operacje matematyczne
awaria ekspresu philips ready samsung przyłącze ziemne
ZUBR ZIE-40-1600 Soft Start Module PCB 8437-545204 Iskrzenie szczotek w silniku - uszkodzony stojan czy wirnik?