Bo, zasadniczo, strBuf powinieneś mieć zadeklarowany jako char, a nie uint8_t. Widocznie u Ciebie char jest typem ze znakiem.
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.
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, 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...
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ć,...
Tak więc - abstrahując od karkołomności tej konstrukcji- czy mógłbym prosić o opisanie, choćby w kilku zdaniach, co dzieje się w tej linijce?? std::string name( (char *)*componentName+1, (*(UInt8 **)componentName)[0] ); Pozdrawiam W tej linijce deklarowana jest zmienna name typu std::string. Zmienna ta...
Wyjaśnię może na spokojnie: Kompilator patrząc na PINA widzi: dereferencję wskaźnika na volatile u8 spod inta rzutowanego na wskaźnik na volatile u8. Krok po kroku? "Zrób to sam" ;] - przykład dla wskaznikow 16bitowych, i 8bitowej danej: 1. Wez fizyczny adres chcianego SFRa , np. 0x6666 2. Rzutuj ten adres na wskaźnik na volatile u8: ((volatile u8*)0x6666)...
unsigned int *ple=(unsigned int*)&ulamek; wszystko jest ok, bo to mówi mniej więcej tyle, co "postaw wskaźnik na unsigned int na adresie zmiennej ulamek". Jeśli tylko zadeklarowałeś 'ple' nie definiując go, to musisz zmienić wskaźnik (czyli samo ple), a nie to co pod nim jest (czyli *ple), i ten wskaźnik postawić na adresie zmiennej ułamek (czyli &ulamek)....
Nawet dla takiego małego Miki jak ja już na pierwszy rzut oka jest jasne że te kody to potężne źródło problemów. Co widać bez wgłębienia się w szczegóły: * Funkcja main() jako rozbiegówka to słaby pomysł. Kolega stmx napisał coś na ten temat (nawet podaje link w promowanych tematach), warto to przeczytać. * Stos musi mieć odpowiednie wyrównanie, zwykle...
- po co było rzutowanie *(__IO uint32_t*) i dlaczego adres wyliczał się błędnie Nie wiem czemu to usunąłeś, ale to jest KONIECZNE. A to dlatego, że ty nie masz skoczyć pod adres (tablica_wektorów + 4), tylko pod adres który jest zapisany w (tablica_wektorów + 4). I właśnie po to było tam rzutowanie i dereferencja wskaźnika. 4\/3!!
Rozwiązanie z postu powyżej jest najlepszym według mnie: if(v) PORTB |= (1<<PB3); else PORTB &=~(1<<PB3); Żeby jednak traktować pojedynczy bit portu jako osobną zmienną można wykorzystać fakt, że rejestry io posiadają swój adres w przestrzeni danych, przez co można uzyskać adres i rzutować wskaźnik na jakąś bardziej...
...dla takiego wskaznika sa niezdefiniowane operacje ++ i --, generalnie arytmetyka na void nie dziala (bo nie ma jak). Nawet w przypadku rzutowania? (char*)ptr++; Akurat postinkrementacja ma wyższy priorytet niż rzutowanie, więc Twój kod wykonuje arytmetykę na wskaźniku typu void*. Jeśli użyjesz nawiasów, to masz ((char*) ptr)++ i kompilator...
moj_dest_ptr dest = (moj_dest_ptr) cinfo->dest; Tutaj rzutujemy element dest struktury cinfo na typ moj_dest_ptr. Ten znak "->" to jest po prostu dostęp do elementu struktury która jest określona wskaźnikiem czyli: typ_moja_struktura struktura1; typ_moja_struktura * struktura2; //do elementu w struktura1 dostajemy się tak: struktura.element...
Ta funkcja zwraca wartość ukrytą pod adresem który jest jej argumentem. Proste. Ponieważ w twoim przypadku, pod tym adresem kryje się wskaźnik, funkcja zwraca jego wartość czyli adres tego co ten wskaźnik wskazuje. O to chodzi w twoim kodzie bo rzutujesz to na inny wskaźnik potem. Wskaźnik na wskaźnik (**) to najfajniejsza rzecz w C (za wyjątkiem wskaźnika...
Według standardu języka C wynik rzutowania nie jest l-wartością. Dawniej gcc zezwalało na takie konstrukcje, ale od którejś wersji wyrażenia tego rodzaju generują błąd podczczas kompilacji. Radziłbym posługiwać się cały czas wskaźnikiem i ew. rzutować go na DWORD w przypadku gdy potrzebny jest adres. Edit: źle rozumujesz. Wyrażenie w Twoim poście używa...
Może coś takiego będzie działać, sprawdziłem tylko, że się kompiluje: // definicja tablicy wskaźników do funkcji void (*f_Function_table[])... PROGMEM = { f_1, ... f_5 } //----------- // wywołanie void (*f)(); // pośredni wskaźnik na funkcję f = (void*)(pgm_read_word(&&...
Trochę się zmaieszałem. Pomocy :-) chodzi mi o rzutowanie wskaźnika np mam taka deklarację (uint32_t *) ?
Pierwszy zapis o który pytasz, to tablica wskaźników na funkcję, która to funkcja nie zwraca wartości i nie przyjmuje wartości. Zapis const oznacza, że tablicy nie będziemy modyfikować. Zapis, moim zdaniem bardziej czytelny, który sam stosuję w takim przypadku (z głowy): typedef void (*pVector_t)(void); __attribute__ ((used,...
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...
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...
// tablica "napis" znajduje się w PROGMEM - w kodzie jest pgm_read_byte: OK char napis[] PROGMEM = {"test"}; // zmienna "text"również jest w PROGMEM: wywołanie fun(text.wsk) odwołuje się do złej pamięci t_text text PROGMEM = {napis}; zamień: fun( text.wsk ); na coś pokroju:...
Obejść prosto - wystarczy jawnie rzutować typ wskaźnika.
"Mu?" ;-) Z pomocą operatora + możesz dodać liczbę do wskaźnika - to przesunie wskaźnik o liczba × rozmiar typu po wyłuskaniu. Oczywiście z void* nie przejdzie, bo void* nie da się wyłuskać. Ale w C tak naprawdę nie trzeba rzutować wskaźnika struktury na void*, bo w C istnieje niejawna konwersja wskaźników. Wychodzi na to, że ten wskaźnik void* jest...
Tak wiem, że nie muszę przywracać zabezpieczenia, tylko spróbowałem ale się nie udało :). Rzutujesz wskaźnik na int16_t, a zmienna uparcie jest "short int" - po co? Bo tylko tak działa! Nie wiem jak inaczej mogę to zrobić ?
Czyli zostaje tylko taki potworek Tak właśnie powinno być jak napisałeś. Poza tym czemu "potworek"? Powiedziałbym, że to eleganckie wyrażenie. Widać ładnie, jak poszczególne typy kolejno "maszerują". Praktyka programowania wymusza często bardziej skomplikowane twory. Trochę jeszcze skoryguję to, co napisałem poprzednio, bo nie było to do końca poprawne....
Czy możecie mi wyjaśnić gdzie mam dopisać PROGMEM czy coś w tym rodzaju? Powinno wystarczyć przy deklaracji konkretnej zmiennej, a jak nie to wszędzie gdzie popadnie Polecenie: pStateFunc = pgm_read_byte(&menu_state[i]... nie działa. Jak to się robi prawidłowo? Wskaźnik do funkcji na pewno jest dłuższy niż 1 bajt, zapewne 2, ale...
Musisz poszukać w dokumentacji do Keila jak realizują offsetof - masz też wsparcie ze strony producenta. To makro nie jest standardem dla C i jeśli jakiś kompilator jest za bardzo papieski to się czepia, że rzutujesz wskaźnik na int. Niemniej na pewno jest jakieś specyficzne dla Keila rozwiązanie.
W C rozmiar struktury jest zawsze stały. W C++ pewnego rodzaju rozwiązanie mogą stanowić klasy pochodne (ale też rozwiązanie statyczne). W C można co najwyżej zastosować pseudoobiektowość, tzn. zadeklarować wiele struktur z takim samymi danymi na początku (dane wspólne) i odpowiednio rzutować wskaźnik przy dostępie.
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...
Kompilator domaga się wskaźnika zamiast liczby całkowitej. Musisz dodać rzutowanie typów: [syntax=c] wsppk = eeprom_read_word((uint16_t*)36); [/syntax]
adres należy rzutować na wskaźnik. ostatnio był podobny temat
Przypisanie do kolejnych pól tabeli liczby 0 rzutowanej na wskaźnik do struktury K.
Zamiast int16_t użyj uint16_t (dla tablicy w eepromie, rzutowanie też jest zbędne)
Pamięć wewnętrzna 2KB - 1514B na ramkę, reszta na stos. Sekcję data, bss oraz opcjonalną stertę wyrzucić do zewnętrznego ramu, chociaż nie wiem na czym niby polega trudność w rzutowaniu wskaźnika - pamięć i wewnętrzna i zewnętrzna są dostępne w dokładnie ten sam sposób. Co do odczytywania przy odbiorze i składania przy nadawaniu można wykorzystać dwie...
Zrób sobie pole bitowe jakie sobie chcesz (wiki), a potem rzutuj sobie PORTB na ten typ danych lub zrób wskaźnik tego typu i przypisz mu wartość PORTB.
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)
Keil jest ciut inny niż GCC. Z O2 i O3 kod z Keil armcc jest praktycznie niedebugowalny. Jednak z moich obserwacji wynika, że czasy, gdy optymalizacja powodowała, że program nie działał, raczej już minęły. Odkąd bawię się Cortexami, tylko jeden raz zauważyłem, że optymalizacja O2 na ARM "zepsuła" program, ale tak naprawdę to był błąd w programie (zmieszanie/rzutowanie...
No może faktycznie trochę przesadziłem zaprzęgając struktury do przechowywania takich prostych, "jednotypowych" danych. Ostatecznie skorzystam chyba z rady kolegi shg i zastosuje do tego celu zwykłe tablice. Jednak chciałbym do końca wyjaśnić zagadnienia poruszane w tym temacie. Czy jedynym sposobem na rozwiązanie tego typu problemu jest tablica wskaźników...
Adres zmiennej _main_ram_start który jest równy wartości 0x20000000 jest rzutowany na wskaźnik na strukturę framebuffer. W konsekwencji wskaźnik fb też przyjmuje adres 0x20000000.
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...
tak ale : [syntax=c]temp2=(unsigned char*)pgm_read_word(temp);[/syntax] [syntax=c]temp = (unsigned char*)pgm_read_word(&menu[pozycjaMenu].L... [/syntax] i bez rzutowania na char na wskaźnik na char
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....
Dla ścisłości dodam, że uint8_t nie jest strukturą . A tym bardziej uint8_t* również nie jest strukturą... (uint8_t*)5 robi z literału 5 wskaźnik No robi, robi. Bądźmy precyzyjni: literał 5 jest rzutowany na "wskaźnik na uint8_t". Czyli jest to informacja dla kompilatora, że literał 5 ma zostać potraktowany jak wskaźnik na uint8_t...
Linia z #define to makro preprocesora, po, nomen omen, definicję i opis odsyłam do Googli. :) To makro przyjmuje wskaźnik, rzutuje go na wskaźnik na strukturę pole_bitowe (słowo kluczowe volatile to zakładam, że wiesz, co robi) i zwraca samą strukturę. Prawdopodobnie da się to opisać jaśniej, bardziej poprawnie i wciąż po polsku, ale mi się już spać...
Można użyć wskaźnika na void do przenoszenia wskaźnika na funkcję, wszak oba zajmują tyle samo. Można wskaźniki tego typu między sobą przepisywać bez potrzeby rzutowania. Pod tym względem nie trzeba zwracać wskaźnika na funkcję. Jakkolwiek, nie dało by się zrobić (dziwnie wyglądającego - swoją drogą) czegoś typu funkcja(ptr1)(ptr2)/*...*/, jak i traci...
Spróbuj: glcd_str_P((char *)pgm_read_word(&menus No TAK, to takie oczywiste! Odczytujemy adres, a więc 2 bajty (word) i rzutujemy na wskaźnik na char. bo przecie funkcja tego oczekuje. Wiedziałem, że pomroczność mnie zaćmiła. Dziękuję! robiw
Sprawdz jakich parametrów oczekuje funkcja eeprom_write_byte() Z tego co pamiętam oczekuje ona wskaźnika a nie int'a, Dokładnie o tym informuje Cię kompilator że zrobił rzutowanie. Włóż tam wskaźnik a powinno pomóc.
Nie wiem, czy nie bezpieczniej byłoby użyć wyłącznie wskaźnika i rzutowania (timer: Pointer; TTimer(timer).Enabled:=false). Biblioteki DLL bardzo nie lubią niestandardowych rozwiązań, jako choćby nawet Stringi :) Pamiętaj, ze DLL nie widzi wywoływanego jej programu, stąd zapis form1.timer1 jest zupełnym nonsensem dla DLL.
#include <stdio.h> #include <memory.h> int main(int argc,char**argv) { float f = 13.1456789; printf("%f\r\n",f); //13.1456789 char *s; s = (char*)&f; //rzutowanie na wskaźnik do tablicy charów float b = *(float*)s; printf("%f\r\n",b); //13.1456789 int i; memcpy(&i,&f,sizeof(int&...
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...
Dziwne rozwiązanie z tym rzutowaniem wskaźnika. W STM32F1 nie było takiego kombinowania. Może jednak dane są wyrównywane do lewej, a nie jak pisze w RM do prawej. Co będzie jak dasz tak: [syntax=c]SPI1->DR = dane<<8;[/syntax]
Freddie Chopin : Masz drobny błąd w kodzie - na wskaźnik rzutujesz nie adres zmiennej "data", tylko jej wartość. Ogólnie warto jest posiadać funkcję do wysyłania bloku danych - wystarczy podać wskaźnik oraz długość danych.
W takiej sytuacji kompilator wygeneruje błąd niezgodności wskaźników. Wskaźnik na FLASH nie można niejawnie rzutować na zwykły wskaźnik. Jeśli potrzebujesz przesyłać do jednej funkcji wskaźnik na FLASH i na SRAM należy użyć __memx. Ta przestrzeń jest kompatybilna z przestrzeniami FLASH i SRAM, a kompilator generuje kod odbsługujący obie możliwości....
Zgodnie z podpunktem 9 p. 6.5.6 oba odejmowane wskaźniki muszą wskazywać na elementy tej samej tablicy lub na element tuż za tablicą. Jeszcze podpunkt 7 mówi, że na potrzeby punktu 6.5.6 wskaźnik do obiektu, który nie jest tablicą, liczy się jak wskaźnik do tablicy elementów danego typu o długości 1. Czy (char*) NULL wskazuje na obiekt? Zgodnie z punktem...
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...
Wyświetla 0x55 co by oznaczało, że do funkcji została przekazana stała 0x55, czyli innymi słowy takie rzutowanie wskaźnika na int na stałą jest prawidłowe. Muszę się zastanowić nad jego mechanizmem, skoro jest prawidłowe, chyba, że dondu to szybko wyjaśni. Z góry dziękuję...prefix PS. Pozostaje temat nadmiaru kodu, skoro chcę przekazać wyłącznie jedną...
Jak ta książka ma być wzorcem, gdy autor na pierwszych już stronach już daje przykłady używając typedef struct?? Przecież to nic złego... Tak jak nadużywanie preprocesora, operacji na wskaźnikach, rzutowanie wszystkiego co się da na "void*" i tym podobne "normalności" (;
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...
Bardzo ważne info - memcpy() jest specjalną funkcją. Kompilatory wiedzą co ona robi i zwykle jeśli np. wywoła się memcpy() dla jednego czy kilku bajtów (które są odpowiednio wyrównane!), to kompilator sam to "zoptymalizuje" i przekopiuje sobie co trzeba "ręcznie", bez wywoływania funkcji. To taka uwaga jakby ktoś chciał napisać, że "to na pewno mniej...
To jest rzutowanie . Tzn. jeśli jedna klasa dziedziczy po drugiej i mamy wskaźnik do klasy która jest starsza w hierarchii (tzn. jest "rodzicem", w tym przypadku object) to możemy z pomocą rzutowania otrzymać wskaźnik klasy która jest młodsza w hierarchii (tzn. jest "dzieckiem", w tym przypadku Button).
jesli dane nie zostały ruszone to mozesz rzutować adres na typ wskaźnika lub nawet na strukturę i tak odzyskasz dane. [syntax=c] unsigned char* ptr = (unsigned char *) 0x16e0c20; [/syntax]
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...
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)....
(*(TC0_t *) 0x0800).CTRLA = TC_CLKSEL_DIV8_gc; i to to jest? o co tu chodzi? nie kumam tego. (TC0_t*)0x0800 - liczba 0x800 rzutowana na wskaźnik, czyli to wyrażenie jest wskaźnikiem na strukturę TC0_t (która jest pod adresem 0x800, tam gdzie akurat sa odpowiednie rejestry timera) *(TC0_t*)0x0800 - zawartość struktury TC0_t umieszczonej pod adresem...
Nie można było tak od razu? Teraz przynajmniej mogę Ci powiedzieć dlaczego działa. Deklarując te 8 tablic i wkładając je do tablicy liczb całkowitych, dokonujesz niejawnego rzutowania z wskaźnika na tablicę (którym jest nazwa tablicy) na liczbę całkowitą. Potem jak wkładasz kolejne elementy tablicy tab do funkcji rejestr to dokonujesz znowu konwersji...
Witam, Poszukuję metody napisanej w C++ która zamienia liczbę Hexadecimal na float (hex to float). Do tej pory znalazłem kod: unsigned char adres[4]; //bo float ma 4 bajty unsigned char *wtab = adres; float liczba = 15.6; *(reinterpret_cast<float*>(... = liczba; //do z rzutowanego wskaźnika char na float przypisujemy...
Usunięcie tablicy nie przyniosło oszołamiających efektów, choć poprawiło sytuację. Dane są wysyłane poprawnie do mniej więcej 32 czy 64-tej próbki, a ja chciałbym wysłać ich 255. Kolejne próbki po bodajże 64-tej znów są przekłamane. Nie wiem w czym piszesz, ale dziwnie działasz na wskaźnikach/adresach. Poza tym rzutując na unsigned char ograniczyłeś...
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...
That's the point. Dla producenta procesorów pisanie softu i dokumentacji to upierdliwa konieczność a nie cel ich działalności :( - No oczywiście poza sztucznie wykreowanym powodem braku "const" przy wskaźniku. No ale z drugiej strony dla kogoś, kto wie o co chodzi z "const" i ogarnia temat nie jest też problemem zrobienie rzutowania wskaźnika z (const...
Ja miewałem takie problemy i zawsze problem wynikał z mojej winy. Ja dysponuję debugerem więc ze zlokalizowaniem przyczyny nie miałem większego problemu. Przyczyn może być dużo, niezainicjowane wskaźniki, niewłaściwe indeksy, rzutowania, braki sufiksów na stałych, niewłaściwe wektory przerwań itp itd. Kod który przedstawiłeś nie jest cały to tylko funkcja...
Z tego co wymieniłeś wszystko jest OK (zakładam, że 3. to wskaźnik na funkcję, a nie jakieś dziwne rzutowanie). Ja bym się jednak początkowo skupił na zainicjalizowaniu w main() wszystkiego co inicjalizuje Keil w startupie, czyli po prostu wywołaniem SystemInit() - jeśli to zrobiłeś to następnym krokiem będzie zastanowienie się, czemu kod w Keilu generuje...
No to tylko ta tablica variantów (array of variant) mi przychodzi do głowy, ale musiałbyś ją tworzyć przed każdym przekazaniem do funkcji sortującej. Od biedy tablica wskaźników, ale w funkcji musiałbyś odpowiednio rzutować (a więc i poinformować funkcję, na jaki tym ma rzutować oraz taką tablicę wskaźników utworzyć - sama z siebie by nie musiała być...
Ale dlaczego dwie gwiazdki? Po co to rzutowanie wartości hexadecymalnej?
Alternatywnie możesz skorzystać z dynamicznej alokacji pamięci. Sprawdzi się szczególnie w przypadku dużych tablic. Deklarujesz najpierw typ type tZmienna = array [min...max] of jakis_inny_typ; następnie zmienną wskaźnikową rzutowaną na ten typ var zmienna = ^tZmienna; W inicjalizacji programu musisz przydzielić pamięć new (zmienna);...
Tablica uint8_t może nie być wyrównana (jej pierwszy adres może być równy np 1 albo 3, a ARM7 nie obsługuje niewyrównanego dostępu. Jeśli odczytasz uint16_t z niewyrównanego (niepodzielnego przez 2) adresu rezultat jest nieprzewidywalny, włącznie z zawieszeniem układu. Sam dodatkowo wprowadzasz zamieszanie, bo adres rzutujesz na wskaźnik ze znakiem,...
typ pointer to jest w Pascalu odpowiedni w C to będzie void * , jest to najbardziej ogólny typ wskaźnika który można potem rzutować na dowolny typ struktury.
(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...
A co to by miało dać w/g Ciebie?:) Po co chcesz rzutować to co zwraca ciało funkcji na wskaźnik ?
Czyli z Twojej wypowiedzi wynika,że volatile jest tak wskawione bezzasadnie i przez to pogłębia się problem? Otóż nie, nie wstawiając volatile, program jest optymalizowany i nie będzie działał. A rzutując wskaźnik na wskaźnik na typ volatile (a nie wskaźnik volatile) nic się nie zmienia w kodzie wyjściowym. Po co bezpieczeństwo typów nie lepiej pomyśleć...
Działa, zmienione kody bibliotek do pcf8833 w załączniku. Jako ostatni parametr funkcji podajemy wskaźnik na czcionkę rzutowany jako (unsigned char*). Czcionki w mojej wersji zapisujemy w pamięci FLASH układu. Dzięki za programik jeszcze raz za świetny programik;-)
Dlaczego nie działa rzutowanie tego typu ? A mógłbyś wyjaśnić, co znaczy nie działa? Bo zazwyczaj działa... [edit] Musisz tylko pamiętać, że kompilator jest uprawniony do wyrównywania ułożenia pól w strukturach w zależności od wymagań architektury procesora. Jest prawdopodobne, że pole wskaźnika payload zostanie przesunięte w pamięci (wyrównane) do...
Niestety, ale jeśli chcesz tablicę wskaźników, przy czym wskaźniki wskazują na konkretne bloki pamięci, musisz je inicjalizować. Jeśli obie tablice są globalne, to bez problemu powinno dać się to zrealizować jakoś tak: [syntax=C]static char buff0[5][20]; char *menu_main[5] = { buff0[0], buff0[1], buff0[2], buff0[3], buff0[4] };[/syntax] lub równoważnie:...
MBR jest w pierwszym sektorze dysku - LBA0. Błędny kod typu partycji nie będzie Ci rzutował na jej rozpoznawanie. Zwróć uwagę na numer sektora początkowego partycji 1 048 576 000. Nie mas wskaźnika F w oknie DMDE - dlatego obawiam się, że operacja naprawy partycji ostatecznie zakończy się niepowodzeniem, ale jeśli już zabezpieczyłeś możliwe do odzyskania...
Podsunąłeś mi pewien pomysł... zrzutowałem sobie wskaźnik na tekst w pamięci programu na typ void* Kompilator rozpoznaje typ void* i odróźnia go. Później znowu sobie go rzutuje na const char*. o t6akiej opcji tez myslalem :)... ale stwierdzilem, ze przesada... i, ze w razie innych funkcji podobnych, trzebaby ciagle o tym pamietac :)... ale skoro dziala...
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...
Yakhub: wsk->wsp_x //dokładnie taka notacja.. co do definicji wskaźnika samego do siebie można zrobić wskaźnik typu void a potem go rzutować..
Tak przeczytałem. Sposób z rzutowaniem na wskaźnik char* wydaję sie w miarę prosty. Tylko jak pozniej złożyć to juz na PC w Builder C+? Czy można zastosować to w drugą stronę? Na początku spróbuję zrobić transmisje bez przerwań ale w przyszłości będę modernizować program z wykorzystaniem przerwań od UART.
W Twoim przypadku zapisujesz pierwszy (starszy) przychodzący bajt w dane_RX[1] a drugi (młodszy) - w dane_RX[0], bo, jak sam napisałeś, masz dane nadchodzące w big endian a AVR pracuje w little endian, więc musisz odwrócić kolejnośc bajtów w pamięci. I teraz możesz sobie przykładać wskaźnik do typu uint16_t tam, gdzie chcesz, czyli do tablicy dane_RX:...
Witam, na wstępie przepraszam za użycie sformuowania "Aligned writes", bo żadnen polski odpowiednik nie przychodzi mi do głowy. Jakiś czas temu udało mi się dzięki pomocy developerów Free Pascala zmusić kompilator do prawidłowego generowania kodu dla platformy Thumb2. Wszystko fajnie hula, nie muszę już się męczyć z przyswajaniem C. Mam tylko jeden...
Kompilator jak zwykle ma rację ;-) Wskaźnik jest na inny typ niż wskazywana zmienna. Ale zabieg ten jest celowy - zmienna ptr służy do wyłuskiwania kolejnych bajtów z typu uint32_t. Twoja poprawka nie jest dobra - eliminuje warning wraz z ideą. Takie wylanie dziecka z kapielą. Rozwiazaniem jest jawna konwersja (rzutowanie). Ale typ wskaźnika powinien...
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...
...Ponadto tablica w kodzie mickpr jest zadeklarowana globalnie, czego podobno należy unikać. Czy dzięki wskazaniu pierwszego elementu tablicy zyskamy dostęp do całej? Czy wewnątrz funkcji da się wtedy zainicjalizować tablicę w ten sposób : tab = {{.....}, {.....}, {.....}} ? Ja założyłem, że zawsze znamy rozmiar tablicy. Autor nie powiedział,...
Już jest lepiej, ale wciąż nie zastosowałeś się do rady ze wskaźnikiem/referencją oraz rzutowanie na char w tym przypadku nie jest potrzebne.
Chcę zrobić biblioteki do programowania okienek, coś w takim stylu jak C++ Builder, Jak w Borlandzie te manipulowanie wskaźnikami jest wyczarowane, w normalnym C++ takiego czegoś nie ma :cry:, więc jak inaczej to rozwiązać, chyba pozostaje tylko te manipulowanie typami. P.S Jaka jest różnica pomiędzy reinterpret_cast<>() a rzutowaniem z C
To wiem, jak jednak wyjść wskaźnikiem na tablicę poza obszar 64kB? Rzutowaniem? robiw
Jak dla mnie powinieneś używać funkcji pgm_read_ptr(), która służy do odczytywania wskaźników. Całe to rzutowanie z jednego typu na drugi a potem jeszcze na trzeci to coś na czym bardzo prosto sie przejechać. Istnieje szansa, że tak czy siak to nie usunie wszystkich warningów, wtedy trzeba to zrobić "porządnie": [syntax=c]memcpy_P(¤tFont.Char...
kod ktory cie tak zaciekawil polega na tym: 1. jest sobie liczba 0x8000 2. chcesz zeby liczba ta traktowana byla jako adres, jak wiadomo adres = wskaznik, wiec dokonujesz rzutowania (u08*)liczba . od teraz dla kompilatora ten zapis bedzie dokladnie tym samym, co gdybys uzyl najzwyklejszej zmiennej wskaznikowej 3. skoro jest to zwykly wskaznik, to mozesz...
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...
Idea polega na tym, że wskaźniki krążą po buforze w tym samym kierunku, tak jakby koniec bufora połączony był z początkiem, stąd nazwa "bufor cykliczny". Po dojściu do końca bufora wskaźnik przeskakuje na jego początek. Pierwszy zawsze jest wskaźnik zapisu, za nim podąża wskaźnik odczytu. Jeżeli oba wskazują na to samo miejsce to znaczy że bufor jest...
wskaźnik kierunek wskaźnik kierunek wskaźnik doładowania toyota wskaźnik
regulacja prędkości falownik centrala alarmowy schemat wymiana pralka amica
wincor nixdorf zasilacz laboratoryjny lm723
Dlaczego laptop nagrzewa się podczas ładowania w Wietnamie? Ekspres ciśnieniowy Zelmer nie pompuje wody - diagnoza i rozwiązania