Tablica data to bufor (z komendą), jeżeli jej drugi bajt oznacza komendę USBASP_FUNC_SETLONGADDRESS, to następne cztery bajty (od data[2]) zawierają adres wpisywany do prog_address. Tak wynika z tego programu. Rzutowanie na wskaźnik na unsigned long jest po to, aby ta pierwsza gwiazdka "wyciągnęła" z pamięci unsigned long. Inaczej, takie użycie to bezpośrednia...
Jest to rzutowanie na wskaźnik do zmiennej typu uint8_t, a nie na zmienną. Ta gwiazdka to oznaczenie wskaźnika. Samo z siebie nic nie robi, powoduje tylko, że kompilator nie rzuca ostrzeżeniem lub błędem.
To wiele wyjasnia, dziękuję bardzo. Korzystając z okazji chciałbym jeszcze zapytać o wyrażenie : *(int*)20000=7 Ja to rozumiem jako wpisanie do zmiennej typu int mieszczącej się pod adresem 20000 wartości 7. Samo (int*)20000 oznacza rzutowanie na wskaźnik do zmiennej typu int, zmienna mieści się pod adresem 20000, Dodanie gwiazdki * przed nawias powoduje...
Próbowałeś wyświetlić adres przekazując wskaźnik na char do cout, ale cout interpretuje zawsze wskaźnik do char jako tekst i wyświetla tekst. Właśnie dlatego trzeba zrobić rzutowanie do (void*), żeby "przekonać" kompilator, że chcemy widzieć wartość wskaźnika. To powinno wyjasnić wszystko: [syntax=c]for(int i = 0; i < 7; i++) { cout << "wsk....
tmf : Nie zupełnie. Problemem tutaj jest to, że autor tematu rzutuje wartość, a nie wskaźnik na adres w pamięci. Poprawne rzutowanie w tym wypadku podał kolega szelus . gafek : Te dwa kody robią to samo. Nie mogą działać różnie. Jeśli tak jest, to problem jest gdzieś indziej. Co do reszty, kompilator nic sam nie robi. Jak każesz mu skopiować obiekt...
Język C nie wspiera dynamicznych tablic wielowymiarowych. Masz dwie możliwości: 1- wykorzystać "tablicę tablic" czyli tablicę wskaźników; 2- użyć tablicy jednowymiarowej i liczyć indeksy "na piechotę". Twój przykład jest zbliżony do metody pierwszej, tzn. tabpix jest u Ciebie wskaźnikiem na wskaźnik, a ponieważ w C wskaźnik na element jest równoważny...
ad.1 Aby zrozumieć co się dzieje w tej linijce musisz dowiedzieć się co to są wskaźniki i rzutowanie typów. Jeżeli restart to tablica, to: [syntax=c]x=restart[0];[/syntax] przepisze pierwszy element z tablicy do zmiennej x. Nazwa tablicy to jednocześnie wskaźnik (adres w pamięci) do tej tablicy. I na przykład: [syntax=c]x=restart[1];[/syntax] zadziała...
Yagi009 - tak jak pisze FCh zmienne static sa inicjowane implicite na 0, chyba, ze to zmienisz definiujac je inaczej. Nie ma wiec sensu ich inicjowac, jesli poczatkowa wartoscia ma byc 0 - to nie tylko jest bez sensu, ale proewadzi do wydluzenia kodu - czasami optymalizator da ciala i twoja ponowna inicjalizacja nie zostanie wyrzucona. W swiecie embedded,...
Niekompatybilny wskaźnik - o co chodzi? Chodzi o funkcję int uart_putchar (char c) Wedle definicji funkcji: fdevopen (int(*put)(char, FILE *), int(*get)(FILE *)) fdevopen oczekuje jako pierwszego argumentu wskaźnika na funkcję, która przyjmuje dwa parametry. Twoje uart_putchar() które zapodajesz jako...
Do funkcji w przykładzie przekazywany jest wskaźnik. W C/C++ nazwa tablicy jest jednocześnie wskaźnikiem na początek tablicy(tłumaczyłem Ci to bodajże przy okazji Twojej walki z jpg:). Czyli: Text_1234 == &Text_1234[0] Więc robisz dobrze w swoim kodzie(a przynajmniej w pierwszej jego wersji). Tak: &Text_1234 mógłbyś zrobić gdyby funkcja przyjmowała...
Czyli rand() % 4 oznacza, że ma losować z liczb 0,1,...3 ???? Tak rand() % 4 oznacza że losuje liczbę 0 lub 1 lub 2 lub 3 a int JakasZmienna JakasZmienna=rand() % 4 że wartość tej zmiennej to ta losowa liczba. Liczby często losują się te same ale uruchamiając mój kod ileś tam razy wylosuje każdą z możliwych liczb, jedną więcej razy inna mniej, jedna...
Przeniosę to przerwanie i tablice do plików .c. Ale wtedy w pliku głównym .c mam includować plik przerwania .c? Myślałem, że tam inkluduje się tylko pliki .h Nie musisz include'ować pliku .c, a nawet nie powinieneś. W Makefile dopisz go tylko do plików źródłowych (SRC = $(TARGET).c przerwanie.c inny_plik.c itd.) a linker odwali resztę roboty. Zostało...
jak poprawnie rzutować na wskaźnik void w języku C Aby poprawnie rzutować na wskaźnik void w języku C, należy zastosować następującą składnię: ```c (void*) pointer ``` Przykładowo, jeśli chcemy rzutować wskaźnik typu `int*` na wskaźnik typu `void*`, można to zrobić tak: ```c int x = 10; int* ptr = &x; void* void_ptr = (void*) ptr; ``` Warto zauważyć,...
Bo, zasadniczo, strBuf powinieneś mieć zadeklarowany jako char, a nie uint8_t. Widocznie u Ciebie char jest typem ze znakiem.
(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...
Witam, mam pewien problem z rzutowaniem. Mianowicie w jednej z klas mam wskaźnik voida, do którego umieszczam inną z klas. Gdy chcę użyć rzutowania, kompilacja przechodzi, natomiast, jeżeli jak już wywołam tą funkcję gdzie jest te rzutowanie to już podczas kompilacji wywala błąd: error C2664: 'print_list' : cannot convert parameter 1 from 'void...
witam ma ktoś może pomysł jak zrobić wskaźnik laserowy wyświetlający obraz na ścianie?? coś w rodzaju zabawek laserowych,które sprzedają mających nakładki do wyświetlania różnych kształtów. http://obrazki.elektroda.net/50_12786226... Z tą różnicą,że potrzebuje żeby to wyświetlało prosty obraz zaprojektowany przeze mnie ( jakiś napis albo nieskomplikowany...
Kod jest niezrozumiały. Pojawiły się takie znaczniki, jak """ czy ">". Jaki plik nagłówkowy jest wymagany, aby móc skorzystać z funkcji esp_clk_cpu_freq()? Przepraszam za zamieszanie związane ze znakami specjalnymi w kodzie. Prawdopodobnie wynika to z formatowania HTML. Oto poprawiony kod w C++20, który wykorzystuje wyrażenie lambda do uzyskania...
Co ten zapis w/g Ciebie oznacza? Bo tak w sumie to: &SPI2->DR - bierzesz wkaźnik na rejestr, 32 bit (volatile uint16_t *) - konwertujesz na wskaźnik na liczbę 16 bit, ale wskaźnik, jak to wskaźnik ma tutaj dalej 32 bit (uint32_t) - i rzutujesz 32 bit wskaźnik na 32bit liczbę Na pewno takie rzutowanie jest potrzebne przy długości transmisji poniżej...
Po pierwsze jest to kod c++ a nie c. Odpowiednik w c: [syntax=c] int wbuffer[]={1,1,1,1,1,1}; const int *bufor; //1 bufor = (const int*)wbuffer; //2 printf("B: %d\n", bufor[1]); //3 error bufor[1] = 3; printf("B: %d\n", bufor[1]); [/syntax] To co tutaj zachodzi to tak zwane rzutowanie. Umożliwia ono zmianę jednego typu na drugi (o ile jest to możliwe)....
W prosty sposób nie uda ci się tego zrobić. Ostrzeżenie można łatwo wyeliminować jwnie rzutując typ, ale to tylko maskuje problem. Musisz wiedzieć na jakiego typu zmienną wskazuje wskaźnik. Ty napisałeś kompilatorowi, że wskaźnik wskazuje na zmienną typu uint8_t. Jeśli zrobisz dereferencję wskaźnika to uzyskasz wartość o typie uint8_t. Jeśli wskaźnik...
No to połowa sukcesu za Tobą :) Druga połowa to pokazanie, że kod generowany przez kompilator jest taki sam (lub lepszy) jak przy łopatologicznym: TIMSK |= _BV(3); I tutaj chyba polegniesz, bo z tego co pamiętam to pobranie adresu rejestru, rzutowanie na uint a następnie rzutowanie na wskaźnik będzie skutkowało wygenerowaniem nie sbi/cbi, tylko...
Wygląda to na błąd wynikający z niezrozumienia przez programistę tego, czego właściwie jest to adres. Komuś wydawało się zapewne, że ma być +5, bo najmniej znaczący bit wartości ładowanej przez instrukcję skoku w Cortex M musi być jedynką. Rzutowanie na wskaźnik do kodu załatwia to automatycznie, a w tym konkretym przypadku nie chodzi nawet zapewne...
nazwa typu "kłamie", jak chcesz znak to mów znak (zastanów się czy signed, czy unsigned, żeby po zmianie opcji kompilatora nie wyleciało w powietrze.) A jak liczbę (Intxxxx), to dlaczego inicjujesz literkami? [syntax=c]Int8* WskaźnikNaDupe = Text_ABCDE[3];[/syntax] Nie myślałeś o czymś takim? Po to zabawa typami, aby rzutowanie było zbędne. Rzutowanie...
Rozumiem, że chodzi o linie oznaczone numerami 1 i 2? Bo pozostałe linie to deklaracje zmiennych. Ad. 1. test.c:17:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] j = (uint16_t)&*(uint8_t*)j; ^ test.c:17:6: warning: cast from pointer to integer of different size...
Zobacz, jak jest zdefiniowana zawartość ROM. Rzutowanie jest niezbędne, żeby z liczby zrobić jakikolwiek wskaźnik, a to jest wskaźnik na wskaźnik na tablicę. Samo przypisanie tego wskaźnika do zmiennej jest natomiast bez sensu, bo wystarczyłoby to zgrabnie zrobić przez #define.
to już dawno zrobiłem, tylko rzutowanie prowadzi do takiego ostrzeżenia: warning: cast to pointer from integer of different size a tego już obejść nie potrafię.
OK pierwsza linijka: deklaracja wskaźnika s. druga linijka: &f - pobranie adresu w pamięci zmiennej f (jest ona typu float). Ta operacja zwróci wskaźnik do float, czyli float*. Ale zamieniamy to na char*, więc wykonujemy rzutowanie (char*)&f. Wskaźnik s będzie wskazywał na adres zmiennej f, ale jest typu char*, więc działa jak wskaźnik do tablicy charów...
Dokładnie tak jak piszesz, malloc to rezerwacja pamięci (memory allocation). Nawias to rzutowanie - informujesz kompilator, że świadomie chcesz przypisać wynik działania funkcji malloc (która zwraca wskaźnik na void - http://www.cplusplus.com/reference/cstdl... ) do wskaźnika na int.
(at)JacekCz To nie jest UB (tj rzutowanie dowolnego typu na char *). No ale pewnie to wiesz z tych wszystkich książek. Interpretowanie struktury jest
Utworzyłem typ strukturalny : typedef struct Interface { int Time; BOOL Thread; unsigned char Buffer_I[100]; unsigned char Buffer_O[100]; unsigned char NumberOfBytes; unsigned char CountError; unsigned char Status; }; następnie zmienną tego typu : Interface InterfaceRS; Teraz w funkcji obsługującej wątek, chcę podać adres tablicy...
Rzutując wskaźnik na tym char. char *bajtpobajcie = (char*)&Pomiar; EDIT Proszę pamiętać, że w przypadku przesyłania danych bajt po bajdzie pomiędzy różnymi urządzaniami w przypadku danych większych niż jeden bajt w interpretacji ma znaczenie architektura (konkretnie kolejność bajtów aka BIG_ENDIAN, LITTLE_ENDIAN)
To już łapie. Teraz przy "rzutowaniu" bo nie wiem jak to nazwać fachowo[syntax=asm]MOV AX, WORD PTR Byte4 ; <--- po wykonaniu AX = 0x0102 [/syntax] ma taką wartość bo wczytuje Byte4 ale i zahacza Byte1 bo są obie wielkości bajt. Oki lecz rodzi się kolejne pytanie. To znaczy że wskaźnik pokazuje z powrotem na Byte1 przy okazji pobierania wartości...
Pozwolę sobie upewnić się. funcxxx(&s1.cde3); Funkcji zostanie przekazany adres od razu do pola cde3? I funkcja zadeklarowana jako void funcxxx(uint8_t *costam) Będzie operować na s1.cde3? Jeśli oczywiście dane pole ma ten sam typ? I dalej w funkcji jak z normalnym wskaźnikiem postępujemy? Rozumiem, że deklaracja: void funcxxx(void* *costam) uniezależnia...
Jest to jak najbardziej do osiągnięcia - na tej samej zasadzie działa rzutowanie w EOTechu. Trzeba dobrać tylko odpowiednie proporcje. I bardziej zastanawia mnie czy jest ktoś w stanie coś takiego wydrukować(?) Tak, możliwe. Ale wg mnie idąc tym tropem można również przerobić Opla Vectre na Forda Mondeo. Wymaga sporo precyzyjnej mechaniki (regulacja...
objaw jaknajbardziej prawidlowy. zapomniales o tym, ze jak masz komorki o adresach: 00 01 02 03 04 05 06 07 to na raz odczytac mozesz tylko pod takim warunkiem: - 1 komorke zawsze - 2 komorki na raz (16b) tylko jesli adres jest podzielny przez 2 - 4 komorki na raz (32b) tylko jesli adres jest podzielny przez 4 :) Dzięki, czekałem na potwierdzenie tej...
(at)-psiak- Znowu zgoda, dzisiaj mam dzień "pomroczności jasnej". :wink: (at)Damian7546 Standardowe rzutowanie z typu całkowitego na float zrobi zwykłą konwersję liczbową tzn. tak, aby wartość była jednakowa, a nie reprezentacja bitowa w pamięci. Stad konieczność użycia "po drodze" typu wskaźnikowego, aby wskazać, że trzeba inaczej interpretować zawartość...
Ok, nie wiem już ile razy mam powtarzać, że to do niczego mi nie potrzebne - po prostu w pewnym momencie nie znając dokładnie tych zasad utworzyłem wskaźnik na literał .... i spotkałem się z dziwnym (ale dla mnie zachowaniem) Teraz dopiero z tej dyskusji wyniknęło skąd się to bierze i chyba każdy z was także niechcąco odpowiadając mi sam się dowiedział...
Ja to robię tak: Po stronie uC (w tym wypadku to jakiś ARM): #pragma pack(1) struct registers{ uint8_t zmienna_1; uint16_t zmienna_2; } reg_table; #pragma pack(4) //ARM ma wyrównanie do 4 bajtów #define REG_TABLE_SIZE sizeof(struct registers)//size of registers Po stronie PC: #pragma push() //zapamietujemy istniejące...
Przeważnie jest tak, że wskaźnik jest tego samego typu co zmienna, na którą wskazuje (przynajmniej tak gdzieś wyczytałem). Jednak co w przypadku gdy wskaźnik wskazuje na element struktury? Wówczas powinien on być typu struktury czy elementu? Oto przykład, jest taka oto struktura: typedef struct { unsigned char hundsecs: 8; unsigned char seconds:...
BoskiDialer --> no właśnie cały czas się zastanawiałem jak wyciągnąć spod tego adresu wskaźnik i rzeczywiście tak jak pisałem to odwoływałem się do struktury jakby w pamięci RAM a nie we FLASH. WIELKIE DZIĘKI, jak zwykle zresztą na ciebie można liczyć ;) teraz działa tylko, żeby eclipse nie podkreślało wężykiem, czyli żeby nie było warninga z którym...
Witam wszystkich Próbuje zapisać dane wygenerowane przez program do pliku ale podczas rzutowania za pomocą reinterpret_cast wskaźnika na prostą strukturę, przykładowo: [syntax=cpp-qt] struct test { unsigned int mark; unsigned int w; unsigned int h; }; [/syntax] na wskaźnik typu char*, rezultat rzutowania ma zmieniony endian na big-endian, co jest bardzo...
Oj napiszcie mu dopiero się uczy :) Masz gotowe: srand (static_cast<unsigned int>(time(NULL)))... "Wywołuje ona funkcję srand(), podając jej ziarno uzyskane poprzez time(). Ze względu na to, iż time() zwraca wartość należącą do specjalnego typu time_t, potrzebne jest rzutowanie jej na typ unsigned int. Wyjaśnienia wymaga...
Program napisany jest pod bitmapę 24 bitową czyli brak w pliku palety kolorów przed pikselami. struktura RGB (3 bajty): [syntax=cpp] typedef struct RGBTriplet { BYTE blue; BYTE green; BYTE red; } RGB; [/syntax] zmienna tmp to wskaźnik void. Wskazuje ona na miejsce pamięci gdzie znajduje się width, po to by po jego zmianie był punkt odniesienia. int32_t...
Najlepiej nigdy, przenigdy nie rób takich rzeczy ;) Argumentem tej funkcji powinien być wskaźnik ale ty stosujesz tu rzutowanie i na własną rękę numerujesz komórki pamięci w EEPROM. To doprowadzi cię kiedyś do zagłady ;) jak już to najpierw zdefiniuj sobie zmienną w pamięci EEPROM: unsigned char zmienna EEMEM; a potem np: mem_year = eeprom_read_byte(...
Postanowiłem liczbę typu float rozbić na 4 bajty stosując rzutowanie na wskaźnik char. A następnie przesyłać bajt po bajcie do PC jednak mam problemy, ze złożeniem tego na PC bo ostatecznie odbieram inną liczbę niż wysyłam.Kody programów zamieszczam poniżej: #include <avr\io.h> unsigned char dane; float wynik=2.9876; int i=0; int a=0; void INI_RS(unsigned...
nie wiem jak działa instanceof w javie ale przechowywanie referencji do innych obiektów czy klas to żaden problem. Deklarujesz sobie jakikolwiek obiekt, który zawiera tablicę wskaźników nawet typu Pointer. W najprostszym z możliwych przypadków bierzesz sobie zwykłą i popularną StringList'ę. Można w niej przechowywać zarówno stringi jak i liczby (wielkości...
Witam, Próbuje usunąć kilka warningów wyrzucanych przez kompilator, tyczących się przypisywania i inicjalizacji niewłaściwych typów ( brak rzutowania ). Nie jestem jednak pewien czy dobrze wykonuje rzutowanie. Mógłby ktoś rzucić okiem? 1. Przypisanie do wskaźnika na funkcję innego typu wskaźnik na funkcję: typy wskaźników: - void (*callback)(uint8_t,uint16_t)...
Witam wszystkich. Od jakiegoś czasu ćwiczę STMy. Przyszedł czas na bootloader, ale stanąłem w zasadzie na początku drogi. Mój zestaw to: - ARM GCC (Linaro) w wersji 4.7 2012q4 - CooCox - STM32F4 Discovery - przykład AN3965 "STM32F40x/STM32F41x in-application programming using the USART" Po kolei: - istniejący i działający program zlinkowałem z użyciem...
Jak użyć stałych zapisanych w pamięci programu przez const unsigned char TEXT[] = "jakiś tekst"; W funkcjach typu strcpy(), strcmp() itp? Te funkcje nie przyjmują wskaźnika do const więc nie można zrobić tego w ten sposób: strcmp(bufer, TEXT); co gorsza nie da się w ten sposób: strcmp(bufer, "jakiś tekst");...
rzutowanie tablicy rzutowanie zmiennych rzutowanie zmiennej
zmywarka bosch sprawdzenie silnika uszkodzić poduszka jednofazowe obwody
SAAB 9-5 2003 3.0 Turbo: Lokalizacja Tunera i Błąd 21 Dzielenie bez reszty w BASCOM-AVR: przykład i wyjaśnienie