Skocz do zawartości

[C] Struktury, wskaźniki i tablica tablic - problem


Gorki

Pomocna odpowiedź

Witam!

Jako, że jest to mój pierwszy post, chciałbym się serdecznie przywitać z wszystkimi forumowiczami.

Słowem wstępu. Pracuję nad prostym robotem sterowanym przez Serial Port za pomocą odpowiednich 8-bajtowych kodów poleceń. Aktualnie napisałem sobie prostą konsolkę w C# wysyłającą i odbierającą polecenia z mikrokontrolera. Jako "mózgu" robota używam Arduino UNO, planuję w przyszłości przesiadkę na DUE (więcej portów IO, DAC, więcej pinów przerwań i kilka innych bajerów 😋)

Mój problem wystąpił kiedy próbowałem przebudować znacznie mechanizm odbierania poleceń z uC. Obecnie mechanizm działa tak, że uC znajduje się w pętli nieskończonej z warunkiem (connected). W każdym obiegu pętli sprawdza, czy w buforze znajduje się 8 bajtów danych, jeśli tak to po przetworzeniu zawartych informacji wykonuje odpowiednie polecenie (ruch lub odczyt danych z czujników) i wraca na początek pętli.

Nie jest to rozwiązanie zbyt optymalne.

Dlatego chcę przenieść funkcję pobierania danych z bufora do funkcji serialEvent(), nie jest to to czego szukam, ale na dobry początek wystarczy. Problem pojawia się, kiedy próbuję utworzyć 4 elementową tablicę zawierającą w każdym elemencie po 8 bajtów danych. Utworzyłem więc strukturę order o następującej treści

struct order
{
 byte data[8];
};

i tablicę zawierającą 4 elementy order

typedef volatile order orders[4];

volatile - ponieważ w przyszłości zamierzam pokombinować i wywoływać funkcję pobierania danych z bufora za pomocą przerwania a uC usypiać aż do odebrania przez bufor 8 bajtów instrukcji

wszystko działa pięknie do momentu w którym próbuję uzyskać dostęp do bajtu w strukturze order

if (buffer[0] == consoleID)
{
       for (int i = 0; i < 4; i++)
       {

         orders[0].data[0] = buffer[0];
//orders[0].data = buffer;

}
}

niezacytowane i zacytowane przypisanie wywołuje błąd o następującej treści:

exit status 1

expected unqualified-id before '[' token

Nie wiem co robię źlę. W c# nie raz tworzyłem tablice struktur/klas które miały wewnątrz kolejne tablice (a czasem i te tablice miały kolejne np. lista postaci -> lista ekwipunku -> jakaś tablica wewnątrz przedmiotu) i dało się do nich odwoływać normalnie

tablica_struktur[x].tablica_wartości[y].itd[z]

W temacie wspomniałem o wskaźnikach. Wyczytałem, że można stworzyć tablicę wskaźników do kolejnych tablic i w ten sposób utworzyć tablicę tablic, ale udało mi się to z równie opłakanym skutkiem. Prosiłbym kogoś kto zna się na C o pomoc.

Pozdrawiam

ps. tak jestem świadomy że C# jest językiem obiektowym a C (czy w przypadku arduino pseudo c++) niekoniecznie i niektóre zagrywki mogą nie działać, ale myślałem, że skoro istnieje coś takiego jak struct to uda mi się w prosty sposób zrobić tę tablicę tablic 😃

Link do komentarza
Share on other sites

i tablicę zawierającą 4 elementy order
typedef volatile order orders[4];

Zastanów się i napisz nam co według Ciebie robi ten kod? Podpowiedź - to nie jest utworzenie tablicy.

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Padłem jak to zobaczyłem, gdzieś podczas szukania po angielskich internetach mi to wcisnęli i nie dziwię się, że wszysko mi się posypało 😃

typedef volatile order orders[4];

tworzy alias typu order o nazwie orders i jeszcze próbuje wcisnąć w to tablicę 😃 aż dziwne że kompilator nie wywalił błędu za te nawiasy na końcu

dzięki za pomoc, sam bym chyba nigdy tego nie znalazł 🙂

poprawione i zadziałało jak należy

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.