(Ze względu na ograniczoną ilość pamięci dostępną na większości płyt Arduino, czasami napotykam problemy przy użyciu poprawnego kodu C/C++, więc to pytanie dotyczy konkretnych problemów o użyciu struktur na Arduino.)Wyjaśnienie użycia struktur z Arduino i przechowywanie struktur w PROGMIE
Widziałem example code of using structs in Arduino, ale nie omawiałem żadnych wymagań dotyczących pamięci.
- Czy rozmiar struktury jest po prostu sumą typów danych jej pól?
- Czy przechowywanie znaczników w PROGMEM jest opcją? Czy są problemy z szybkością dostępu?
- Są to pola z możliwością zapisu w formacie struct (np. Przykład poniżej
s1.LED1.state = 0;
) (ale nie w przypadku, gdy jest on zapisany w PROGMEM, oczywiście). - Czy mogę zdefiniować pole struktury jako inną (inny typ) strukturę?
- Czy można iterować za pomocą struktury przy użyciu
for..in
lub według indeksu?
Moim zastosowaniem jest to, że mam 64 diody LED napędzane przez układ MAX7219. Ze względu na wymagania dotyczące fizycznego układu okablowania, wygodne byłoby zorganizowanie kolejności diod LED w bardziej logiczny sposób za pomocą struktur, aby uczynić programowanie łatwiejszym/bardziej spójnym.
typedef struct {
byte row : 6;
byte col : 128;
byte state : 1;
} LED;
typedef struct {
LED LED1 : {1,1,1};
LED LED2 : {1,2,1};
LED LED3 : {1,4,1};
LED LED4 : {1,8,1};
LED LED5 : {1,16,1};
LED LED6 : {1,32,1};
LED LED7 : {1,64,1};
LED LED8 : {1,128,1};
} LED_SECTION;
LED_SECTION s1;
s1.LED1.row = 1;
s1.LED1.state = 0;
Ciekawe, że nigdy nie widział „szerokość” zapis na elemencie :) Gdyby 'byte' nie być' LED' w 'LED_SECTION' struct? – leppie
Również "bajt" ze 128 bitami? Czym jest to szaleństwo? – leppie
@leppie - tak. skopiuj/wklej błąd. dzięki za wskazanie –