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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.