Tablica - dziwne zachowanie podczas zwykłego dodawania

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Tablica - dziwne zachowanie podczas zwykłego dodawania

Post autor: matrix » 12 wrz 2011, 9:07

Dla poznania zapisu czy też działania tablicy (bo nigdy nie używałem tego "ustrojstwa") napisałem sobie prosty programik w bascomie.

Zadeklarowałem sobie zmienną o nazwie

Kod: Zaznacz cały

zmienna(5)
Następnie nadałem każdemu elementowi w tablicy wartość:

Kod: Zaznacz cały

 zmienna(1) = 1
 zmienna(2) = 1
 zmienna(3) = 1
 zmienna(4) = 1
 zmienna(5) = 1
A później w podprogramie o nazwie wyswietlanie zacząłem zwiększać wartość każdego elementu w tablicy w ten sposób:

Kod: Zaznacz cały

wyswietlanie:
 zmienna(1) = zmienna(1) + 1
 zmienna(2) = zmienna(2) + 1
 zmienna(3) = zmienna(3) + 1
 zmienna(4) = zmienna(4) + 1
 zmienna(5) = zmienna(5) + 1
return
I tu moje zdziwienie. Każdy element tablicy nie zmienia się zwiększając osobno swojej wartości o 1 jak myślałem, tylko cała tablica zmienia swoją wartość kolejno jakby była jedną zmienną a nie tablicą zmiennych. Czyli zamiast zmieniać się jak się spodziewałem czyli każdy element tablicy będzie miał kolejno wartości 2, 3, 4, 5, itd to zmienia się tak że pierwszy element tablicy owszem zmieni się na 2 ale już następny zmieni się na 3 a następny na 4. Jak piąty element będzie miał wartość 5 to pierwszy zwiększy się o 1 ale od 5.

Czemu tablica tak się zachowuje?

Awatar użytkownika
c4v2
Użytkownik
Posty: 426
Rejestracja: 22 lis 2005, 15:14
Lokalizacja: z przed monitora

Post autor: c4v2 » 12 wrz 2011, 11:21

Nie wiem jakiego typu są zmienne składowe tablicy i jaki mikrokontroler został w programie wybrany.
W moim BascomieAVR symulacja programowa takiego podstawiania/ dodawania wartości do elementów tablicy wygląda bez zarzutu czy to z dyrektywą sim czy też bez niej.
Załączniki
Tab.gif
(18.07 KiB) Pobrany 195 razy

Awatar użytkownika
matrix
Użytkownik
Posty: 1796
Rejestracja: 15 mar 2006, 5:21
Lokalizacja: Sochaczew
Kontakt:

Post autor: matrix » 12 wrz 2011, 17:08

U mnie deklaracje i procesor są dokładnie takie jak u Ciebie. A pętla do...loop i podprogram wyglądają tak:

Kod: Zaznacz cały

 zmienna(1) = 1
 zmienna(2) = 1
 zmienna(3) = 1
 zmienna(4) = 1
 zmienna(5) = 1

cls
do
 if gora = 0 then incr X
  if dol = 0 then decr x
   waitms 50
    servo(1) = x
    servo(2) = x
 home
  lcd "x=" ; x ; "   "
  gosub wyswietlanie

loop
end

wyswietlanie:
 zmienna(1) = zmienna(1) + 1
 zmienna(2) = zmienna(2) + 1
 zmienna(3) = zmienna(3) + 1
 zmienna(4) = zmienna(4) + 1
 zmienna(5) = zmienna(5) + 1

tu mam wyświetlanie wyników na lcd
I to mi nie działa jak myśkałem tylko jak opisałem wyżej.

EDIT:

Nie wiem czemu poprzedni soft nie działał jak trzeba, bo teraz nawet coś takiego:

Kod: Zaznacz cały

zmienna(1) = zmienna(1) + 1
 zmienna(2) = zmienna(2) + 1
 zmienna(3) = zmienna(3) - 1

 locate 2 , 1
  lcd zmienna(1)
 locate 2 , 4
  lcd zmienna(2)
 locate 2 , 6
  lcd zmienna(3)
 waitms 300
działa mi ok

ODPOWIEDZ