17-11-2018, 19:31
Witam
Dzisiaj spotkałem się z problemem z tablicami na Arduino Uno.
Tworzę trzy tablice char:
char a[320];
char b[320];
char c[320];
tworzę sześć zmiennych int, które potem będą potrzebne mi do przetwarzania
int x, y, z, r, s, t;
teraz tworzę pętlę for:
for (int i=1; i<318; i++){
x = a[i];
y = b[i];
// z = c[i];
r = a[i+1];
s = b[i+1];
// t= c[i+1];
a[i] = a[i+1];
b[i] = b[i+1];
// c[i] = c[i+1];
}
jak zauważyliście trzy linijki zmienione są w komentarze, już tłumaczę dlaczego.
Całość oczywiście jest w głównej pętli void loop (). Gdy trzy linijki są jako komentarze cała pętla loop() jest wykonywana w nieskończoność, i taki jest zamysł cąłego projektu. Jednak jeśli którąkolwiek z linijek które są aktualnie komentarzami zamienię na normalną czyli usunę ukośniki // to pętla loop() jest wykonywana tylko dwukrotnie (sic!) i Arduino się wiesza, a właściwie nie wiem co się z nim dzieje bo przestaje cokolwiek robić. Kiedy znowu wstawię tą linię jako komentarz, wszystko działa prawidłowo.
Kolejną ciekawostką jest to, że dzieje się tak tylko z tą trzecią tablicą c[320], jeśli zmienię środek pętli for() na coś takiego:
x = a[i];
//y = b[i];
z = c[i];
r = a[i+1];
s = b[i+1];
// t= c[i+1];
a[i] = a[i+1];
b[i] = b[i+1];
// c[i] = c[i+1];
czyli w tym momencie wstawiłem komentarz do linijki drugiej y=b[i]; a usunąłem komentarz z linii trzeciej z=c[i]; to pętla loop() rónież zostanie wykonana tylko dwa razy.
Coś ktoś wie? Ktoś coś słyszał? Przepełnienie stosu? Przepełnienie pamięci? O co chodzi? Czemu dopiero po trzecim odwołaniu się do tych samych tablic?
Z tego co pamiętam (teraz nie jestem w stanie podać), ale po skompilowaniu pokazuje mi zajęte 75% pamięci.
Dzisiaj spotkałem się z problemem z tablicami na Arduino Uno.
Tworzę trzy tablice char:
char a[320];
char b[320];
char c[320];
tworzę sześć zmiennych int, które potem będą potrzebne mi do przetwarzania
int x, y, z, r, s, t;
teraz tworzę pętlę for:
for (int i=1; i<318; i++){
x = a[i];
y = b[i];
// z = c[i];
r = a[i+1];
s = b[i+1];
// t= c[i+1];
a[i] = a[i+1];
b[i] = b[i+1];
// c[i] = c[i+1];
}
jak zauważyliście trzy linijki zmienione są w komentarze, już tłumaczę dlaczego.
Całość oczywiście jest w głównej pętli void loop (). Gdy trzy linijki są jako komentarze cała pętla loop() jest wykonywana w nieskończoność, i taki jest zamysł cąłego projektu. Jednak jeśli którąkolwiek z linijek które są aktualnie komentarzami zamienię na normalną czyli usunę ukośniki // to pętla loop() jest wykonywana tylko dwukrotnie (sic!) i Arduino się wiesza, a właściwie nie wiem co się z nim dzieje bo przestaje cokolwiek robić. Kiedy znowu wstawię tą linię jako komentarz, wszystko działa prawidłowo.
Kolejną ciekawostką jest to, że dzieje się tak tylko z tą trzecią tablicą c[320], jeśli zmienię środek pętli for() na coś takiego:
x = a[i];
//y = b[i];
z = c[i];
r = a[i+1];
s = b[i+1];
// t= c[i+1];
a[i] = a[i+1];
b[i] = b[i+1];
// c[i] = c[i+1];
czyli w tym momencie wstawiłem komentarz do linijki drugiej y=b[i]; a usunąłem komentarz z linii trzeciej z=c[i]; to pętla loop() rónież zostanie wykonana tylko dwa razy.
Coś ktoś wie? Ktoś coś słyszał? Przepełnienie stosu? Przepełnienie pamięci? O co chodzi? Czemu dopiero po trzecim odwołaniu się do tych samych tablic?
Z tego co pamiętam (teraz nie jestem w stanie podać), ale po skompilowaniu pokazuje mi zajęte 75% pamięci.