Witam, nie można tak realizować inicjalizacji, ponieważ zastępujesz wskaźnik na strukturę wyrażeniem: { {MAIN_SCREEN_ID, MS_BTN_OK_ID,20,20,20,20,(u8*)NU... {MAIN_SCREEN_ID, MS_BTN_ESC_ID,40,20,20,20,(u8*)N... {MAIN_SCREEN_ID, MS_BTN_MENU_ID,60,20,30,20,(u8*)...
Witam! Zapis: g->roz oznacza, że jeśli "g" jest wskaźnikiem do struktury bądź unii, to operator "->" odwołuje się do składowej "roz". Ponieważ g wskazuje na strukturę, do składowej "roz" można się odwołać również: (*g).roz Wskaźniki do struktur i unii są jednak tak często używane, że wprowadzono operator "->".
Witam! A'propos "przytyku" Wszystko zawarłem w pierwszej odpowiedzi. Koledzy chyba posto-nabijacze ? A to fragment cytowanej, Twojej pierwszej odpowiedzi: 1. Pobierasz rozmiar tablicy przy użyciu scanf("%d", &rozmiar) zmienna rozmiar jest typu całkowitego. Skoro pobiera się rozmiar tablicy przy pomocy funkcji scanf od razu zakładam, że rozmiar tablicy...
Co robie źle ?? Wszystko. Alokujesz pamięć (2 bloki po 4 bajty), po czym gubisz otrzymane wskaźniki (wyciek pamięci) nadpisując je wartością z zewnątrz i wskaźnikiem do zmiennej lokalnej, który przestaje być ważny po wyjściu z funkcji. Do kopiowania stringów możesz w tym przypadku użyć funkcji strdup() z nagłówka <string.h> - zastąpi strlen(),...
ale jak już przy tym jesteśmy to rozumiem że ta operacja *(struktura.wsk) = ... zadziała tak jak chciałem? czyli podstawi wartość do zmiennej wskazywanej przez ten wskaźnik ??? tak a jeszcze przy okazji, gdyby ten wskaźnik był wskaźnikiem na jakąś tablicę i chciałbym go zwiększyć o N żeby wskazywał N-ty element tablicy, to hmmm mam to tak zapisać???...
Dodano po 1 w ogóle to nie wiem po co korzystasz z 2ch funkcji jak spokojnie możesz to zrobić w jednej: [syntax=c] #include<stdio.h> #include <stdlib.h> typedef struct{ int x; int y; }polozenieS; int getXvalue(void); //your functions int getYvalue(void); int random(int min, int max); polozenieS* add_structure(void); int main(void) { int...
Tak dla porządku wyjaśnię, że zwykłe przypisanie: tablica[i]->imie = "Jan"; jest błędne i niebezpieczne, ponieważ powoduje nadpisanie wskaźnika do pamięci zaalokowanej wcześniej przez malloc(). Działa tylko z pozoru dobrze, ale może nieźle namieszać. Natomiast sposób jaki jest na listingu jest poprawny (z dokładnością do brakujących nawiasów). Sposób...
// 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:...
Należy pamiętać, że w nowszych wersjach avr-libc nie należy używać PROGMEM do deklaracji typu: Typedef Documentation prog_char Note: DEPRECATED This typedef is now deprecated because the usage of the __progmem__ attribute on a type is not supported in GCC. However, the use of the __progmem__ attribute on a variable declaration is supported, and this...
Po kiego grzyba Ci pola bitowe? Nie wolno w ten sposób odwoływać się do kolejnych elementów struktury. Działa tylko dlatego, że przy kompilacji włączona jest opcja -fpack-struct . No i po co Ci struktura do trzymania kilku elementów tego samego typu? Od tego są tablice, a jeżeli chcesz koniecznie mieć tam wpisane nazwy, to sobie je możesz zdefiniować...
ponieważ operujesz wskaźnikiem na strukturę musisz wskaźnik wyłuskać (komunikat błędu linia 16) i dopiero możesz się odwoływać. Masz dwie opcje: 1/ (*Bufor1).rozmiar=0; 2/ Bufor1->rozmiar=0; Przy stosowaniu operatora u8 i = 2; char* ch = "test"; char ch2 = i[ch]; // kompiluje się i jest równoważne ch[i] Jednocześnie oznacza...
Dopiero wskaźniki pokazują na jakieś miejsce w pamięci. Po co autor wprowadza dwie nazwy dla tego samego?
Róznica jest taka, że pierwszy przykład zamienia wskaźniki, a drugi zamienia zawartość struktur. Jeśli np. istaniałyby jeszcze jakieś wskaźniki do obu struktur to dałoby się to rozróżnić.
Masz rację . Myślałem trochę inaczej , że już sama nazwa wskaźnika jak funkcji na którą ma wskazywać przypisuje mu jej adres. Jest odwrotnie to nazwa może być wskaźnikiem. Tak jak w przypadku tablic. Tzn nie jest konieczny operator &.
Poczytaj sobie jeszcze o wskaźnikach na funkcję...tu już bardziej przydatny mechanizm. Inne ważne zastosowanie to wskaźniki do niejawnych struktur danych umożliwiające całkowite ukrycie szczegółów przed światem zewnętrznym. Jest to tzw. hermetyzacja albo enkapsulacja.
Chodziło mi o 1 i 3 przypadek, a pytanie o wskaźnik to efekty moich kombinacji. Kompiluje to w BORLAND C v3.1 i nie mogę przebrnąć czegoś takiego: jakas_struktura jakas_funkcja(void) jakas_struktura jakas_funkcja(struct jakas_struktura teststruct) Wywala błąd: Declaration syntax error i dlatego, nie mogąc znaleźć opisów obsługi struktur...
Chcesz wskaźnik na strukturę, deklarujesz wskaźnik na "char", wiec czemu dziwisz się kompilatorowi że zgłasza błąd? struct mystruct* wsk = &czas; Warto popracować nad podstawami wskaźników w języku C, bo braki wyjdą przy pierwszej nadarzającej się okazji.
Witam, mam problem z optymalizacją kodu, może ktoś będzie wiedział (w chwili obecnej mam 80% czasu w przerwaniu, dużo). Mam pętle regulacji wrzuconą w timer i przerwanie FIQ od niego. W przerwaniu są obliczenia i wymaga ono kilku zmiennych dostępnych także dla programu w main'ie - nastaw regulatorów. Jak zrobić to żeby dostęp do tych danych zabierał...
Poczytałem trochę manuala do avr-libc dołączonego do najświeższego WinAVR i jak byk pisze tam, że aby zadeklarować i zainicjować tablicę łańcuchów w pamięci programu trzeba osobno zadeklarować samą tablicę jak i stringi ... Natomiast jeśli chodzi o struktury to powyższa reguła nie znajduje zastosowania! Ależ znajduje: tmf polega na stworzeniu typu...
w "if(set=1)" - powinno być " ==" zamiast goto exit; można napisać "break;" a co do menu to przy bardziej rozbudowanych trzeba zrobić na listach ja znalazłem na AVRFREAKS fajne menu chyba "simplemenu" bodajże się nazywało więc będziesz musiał co nieco poćwiczyć wskaźniki do struktur i takietam.
nie jestem specjalistą w ARMach Atmela, dlatego odpowiem Ci tylko na ostatnie pytanie mianowicie co to jest " -> ". Strzałka oznacza wskaźnik do struktury, co oznacza, że pPIO jest wskaźnikiem do struktury zawierającej w sobie element PIO_OER. Ogólnie zastępuje to konstrukcję (*pPIO).PIO_OER.
Moim zdaniem AVR to stanowczo za małe mikrokontrolery, by zarządzać w nich dynamicznie pamięcią Właśnie z tego względu dynamiczna alokacja może się okazać konieczna. Nie chcę przez to powiedzieć iż w moim wypadku tak jest bo oczywiście, że wykorzystanie statycznych struktur do tego akurat zadania pewnie wystarczy, jednak chcę przetestować dobrze to...
Mi się wydaje, że reprezentacja tablicowa będzie do bani bo jak macierz ma 1000x1000 to pamięci może nie starczyć na taką operację. Po za tym jak będzie tylko 10 nie zerowych wartości w tej tablicy to będzie to marnowaniem pamięci przechowywanie takiej liczby zer. Dodatkowo tablica potrzebuje ciągłego obszaru pamięci co może być trudne do wygospodarowania...
Użyj po prostu operatora adresu (&) a następnie dokonaj prostego rzutowania na (unsigned int)
Szczerze, trochę od podstaw. Struktura to nie obiekt. Obiekt to coś co zawiera kod i dane w "jednym". Struktura to tylko trochę danych jak każda inna zmienna, tyko nieco większa. Struktur się nie tworzy jawnie, jak obiekty. Struktury są tworzone w momencie ich deklaracji automatycznie, tak jak każda zmienna. Proszę, pomyśl nad zrozumieniem obiektowego...
Niestety muszę zgodzić się z kolegą "jestam", bo wiem, że również zna się na rzeczy, słuchaj, jest przed Tobą mega wyzwanie z każdej możliwej strony widzę, od strony programowania polecam książkę K.N Kinga "język C, co nowego w standardzie c99". Tam jest bardzo ładnie wytłumaczone co to są struktury, jak działają, jak wykorzystuje się wskaźniki do funkcji,...
Mam kolejny problem z C na ARM'a. Jest taki kod: const BYTE USB_ConfigDescriptor[] = { //tu pełno danych }; DWORD tym = ((DWORD *) USB_ConfigDescriptor)*; który w skrócie opisuje mój problem. Otóż cała tablica trafia do pamięci programu (i dobrze) tylko pod losowy adres, a w LPC23xx jak odczytuję 32-bity to adres musi...
Witaj Jacku. masz świadomość, że przekazujesz strukturę przez wartość, tzn od tej pory oryginał i kopia żyją własnym życiem? Masz twarde powody aby nie użyć np const & ? Tak, mam świadomość. Niestety nie mogę użyć ani referencji ani wskaźnika, ponieważ mam podefiniowane wszystkie piny procka w postaci: #define PA7 = { .PORT = &PORTA, .PIN = &PINA, .DDR...
Witam, mam do napisania program w języku C++. Polecenie wygląda tak: 1) Definiujemy struktury. 2) Tworzymy tablice przechowującą wskaźniki na strukturze z punktu 1. 3) Tworzymy funkcję: Dodaj i Wyświetl - dodawanie nowej struktury do tablicy, - wyświetlenie struktur z tablicy. Mój problem polega na tym, że w swoim kodzie używam zmiennych globalnych....
Witam, Zapis do EEPROM jest przykładowy i nie ma tutaj większego znaczenia. W moim docelowym programie używam struktur danych. Dla uproszczenia użyłem zmiennych typu int16_t. Chodzi raczej o przekazanie parametrów (wskaźników do pamięci Flash) w funkcji. W jaki sposób należy prawidłowo to wykonać? Czy należy ustawić wskaźniki poza funkcją? pozdrawiam...
Dzięki za odpowiedź. Szczerze mówiąć, użycie wskaźników w ogóle do mnie nie trafiało (same wskaźniki jak najbardziej, dobra rzecz), więc stąd te dziwne rzeczy. Już sobie poradziłem. Wrzucę ostateczny kod. Jeszcze raz dzięki za zainteresowanie i pozdrawiam!
To ograniczenie jest dla 8-bitowej wersji avr-gcc i ma związek z tym, że adresy są 16-bitowe. W nowym avr-gcc wskaźniki mogą być także 24-bitowe, więc teoretycznie da się zaadresować do 16 MB, ale tylko z wykorzystaniem wskaźników. Nie wiem jak inne kompilatory na avr, ale przypuszczam, że sytuacja jest podobna. malloc też nie rozwiązuje sprawy, bo...
To utworzenie zmiennej globalnej o typie BlowerState (czyli takiej struktury jaką widzisz w typedefie) o nazwie idleState z przypisaniem jej wartości domyślnej do jedynego pola tej struktury -> wskaźnika na funkcje handle. Myślę, że dzięki Waszej pomocy zmienne strukturalne możemy teraz zostawić w spokoju - załapałem o co chodzi. ...........................................
Te twoje trzy wskaźniki uimeść w unii - bedziesz miał jeden wskaźnik, do którego odwołasz się przez pola unii. W sturktudrze można użyć volatile i można takiemu polu przypisać zmienną nie-volatile.
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...
Witam! Jednym z rozwiązań jest zadeklarowanie pola struktury jako wskaźnika do np LEV-elementowych tablic typu "wskaźnik do char" np tak: [syntax=c]typedef struct { char *opis_msg; char *(*alarmy)[2]; } AL_TABLE;[/syntax]a nastepnie odwoływać się do nich następująco np: [syntax=c]printf("%s\n", (al_tab[2].alarmy[2])[1]);[/syntax] Analizując wiersz z...
Tzn. chcesz napisać program symulujący tablicę żarówek (takie żółte kropki układające się w litery), czy może coś prostszego i po prostu wyświetlać odpowiedzi w formie tekstu pisanego "normalną" czcionką?? To drugie byłoby znacznie prostsze, choć pierwsze też możliwe do zrealizowania ;) Jak wspomniał poprzednik, można to napisać prawie we wszystkim,...
Kłopot polega na tym, że deklaracja: struct t keytab[MAXW]; nie alokuje pamięci dla samych stringów, a tylko dla wskaźników. Stąd zapewne efekt, że wszystkie wskaźniki wskazują na ten sam ciąg znaków. Pomyśl dokładnie co robią poszczególne instrukcje. v-wyraz, keytab[i].w=v; v jest typu char*, prawda ? Jest więc wskaźnikiem -- w każdym...
Nie wsysa, tylko, według mnie, po prostu opuszczają stację. Masz błędne wyświetlanie listy Odjazd - zamiast wyświetlać całą kolejkę, wyświetlasz na stałe cztery pierwsze elementy. Kolejkę czy listę najlepiej obsługiwać iteratorem. [syntax=cpp] for ( deque<rozklad>::iterator Iter = Odjazd.begin, Iter < Odjazd.end, ++Iter ) { cout << Iter->ID...
Error[Pe167]: argument of type "FIL volatile *" is incompatible with parameter of type "FIL *" Obawiam się że to wina kompilatora, bo przykład jest zaczerpnięty z ksiązki w której autor używał kompilatora Eclipse. Czy jest na to jakis sposób? :/ Jasne, od razu wina kompilatora. Kompilator poprawnie się zachowuje. Jeśli...
Najlepiej jakby każda wartość wkładana do kolejki była wskaźnikiem (albo strukturą, która ma wskaźnik etc.) na dane. Jest to chyba najwygodniejsze/najprostsze w obsłudze. Żeby nie alokować pamięci non-stop i wciąż można zaadoptować Twój pomysł. Tzn stworzyć bufor raz (nawet nie musi być w takim przypadku dynamiczny) i przekazywać do kolejki strukturę,...
Dlaczego nie zrobić funkcji typu void a strukturę przekazywać poprzez wskaźnik?
Dzięki wielkie za bardzo szybkie odpowiedzi i pomoc ;) Zastanawiam się teraz jak zrobić edycję oraz usuwanie poszególnej struktury w liście. Móglibyście mi pomóc raz jeszcze?, cały problem polega na tym, że usuwając strukturę ze środka listy, trzeba przepisać wszystkie wskaźniki do struktur znajdujących się od usuwanej do końca. I tu właśnie jest problem,...
W zasadzie te pola to uint32_t (jak widać w przytoczonym przeze mnie kodzie) dla tego, że rejestry peryferium (DMA) do których idą te wartości są właśnie takiego typu. Nie ma rejestrów typu void *, bo dla sprzętu to wszystko jest liczbami. Czasem tylko rejestry są dłuższe lub krótsze, ale dalej są to tylko uinty. A ta biblioteka jest właśnie tak pisana,...
Jeśli masz wskaźnik na jakąś strukturę to wykonanie delete (*wskaznik_na_wezeł_listy) zwolni pamieć zarezerwowana na całą strukturę. Nie trzeba zwalniac poszczególnych pól. Czyli pierwsze polecenie jest poprawne.
Nie wiem na ile jesteś w stanie ingerować w kod, ale... Cała obsługa transmisji po SPI powinna zostać przeniesiona do funkcji obsługi przerwania od SPI. Funkcje z pętli głównej powinny tylko przekazywać wskaźniki na struktury z danymi i callbackiem do "drivera" SPI. Driver SPI powinien atomowo zbierać te wskaźniki do swojego bufora i inicjować transmisję,...
Nie chcę przekazywać stringów do funkcji bo to bez sensu żeby funkcja za każdym razem je konwertowała na swoje potrzeby. Chcę je raz odczytać, wsadzić odpowiednie wartości do struktur i funkcje będą sobie do nich sięgać. Generalnie już mam w głowie pomysł na to. Nurtuje mnie tylko jedna kwestia, mam taki kawałek kodu: /* Create tasks */ /* Function...
Prawdopodobnie zła wartość wskaźnika/rezerwacja pamięci.
Witam, Piszę od jakiegoś czasu mój pierwszy ambitniejszy program w C na AVR, i przy okazji sukcesywnie poznaję ten język. Ostatnio zabrałem się za projektowanie prostego menu i utknąłem. Na początek przejrzałem projekty takie jak MicroMenu, TinyMenu itp., ale stwierdziłem że wskaźniki do struktur i funkcji to jeszcze nie mój czas, chociaż wydaje mi...
Wszystkie zmienne automatyczne w funkcjach są niszczone po wyjściu z funkcji. Jeśli chcesz, żeby funkcja tworzyła strukturę i ją jakoś zwróciła, to w C zazwyczaj robi się to brzydko: - strukturę deklaruje (lub alokuje) się na zewnątrz funkcji, a do funkcji podaje wskaźnik do niej, żeby funkcja tę strukturę zainicjalizowała; - na zewnątrz funkcji deklaruje...
tablica struktur wskażnik struktur fotografie struktur
wyświetlacz esp32 wyciszyć silnik słuchawki mikrofonem laptopa
samsung ue48h6800 samsung ue48h6800
Drgania w Mercedes W211 - przyczyny i diagnostyka Mikrofony i mikser Rduch do chóru w sali 200m2