Staram się rozkminić przechowywanie danych w tablicach dwu wymiarowych.
Niby proste a jednak jest problem.
Online help mówi iż:
https://wiki.mcselec.com/bavr/DIM
Tabela z helpa patrz tabela 1 Jak dotąd logiczne.Lets see how memory is organized when using multiple indexes. For the sample we use an array of 5x3 bytes.
'popatrzmy jak pamięć jest zorganizowana gdy używamy wielu indexów. Dla przykładu użyjemy tablicy 5 x 3 bajtów.
Dim ar(5,3) as byte.
This gives us the following possible index values :
To da nam następujące wartości indexu:
1,1 1,2 1,3
2,1 2,2 2,3
3,1 3,2 3,3
4,1 4,2 4,3
5,1 5,2 5,3
Since the memory of the processor is linear, we have 15 cells.
ponieważ pamięć procesora jest liniowa mamy 15 komórek.
Natomiast w realu wychodzi inaczej.
Zmieniając zawartość tablicy 1 o indeksie 2 jakimś dziwnym sposobem zawartość nie trafia do komórki z kolejnym adresem. Natomiast testując funkcję memcopy wszytko działa jak należy index jest zmieniany liniowo.
Widać to na przykładzie wartości 17 która zostaje wpisana do tablicy po zakończeniu funkcji memcopy. Dla testu napisałem mały przykład trzeba go odpalić w symulatorze i oglądać zawartość komórek pamięci.
- $regfile = "m8def.dat"
- $crystal = 16000000
- $hwstack=40
- $swstack=16
- $framesize = 32
- Dim Multi_array(16 , 6) As Byte 'destination array
- dim A as byte 'used for for next to fill up array
- dim byte_count as byte 'used for memcopy to store amount of copied bytes
- Dim index as byte 'index for array idex
- dim source_array(6) as byte 'source array
- 'test1
- Multi_array(1 , 1) = 1
- Multi_array(1 , 2) = 1
- Multi_array(1 , 3) = 1
- Multi_array(1 , 4) = 1
- Multi_array(1 , 5) = 1
- Multi_array(1 , 6) = 1
- Multi_array(2 , 1) = 2
- Multi_array(2 , 2) = 2
- Multi_array(2 , 3) = 2
- Multi_array(2 , 4) = 2
- Multi_array(2 , 5) = 2
- Multi_array(2 , 6) = 2
- Multi_array(3 , 1) = 3
- Multi_array(3 , 2) = 3
- Multi_array(3 , 3) = 3
- Multi_array(3 , 4) = 3
- Multi_array(3 , 5) = 3
- Multi_array(3 , 6) = 3
- Multi_array(4 , 1) = 4
- Multi_array(4 , 2) = 4
- Multi_array(4 , 3) = 4
- Multi_array(4 , 4) = 4
- Multi_array(4 , 5) = 4
- Multi_array(4 , 6) = 4
- Multi_array(5 , 1) = 5
- Multi_array(5 , 2) = 5
- Multi_array(5 , 3) = 5
- Multi_array(5 , 4) = 5
- Multi_array(5 , 5) = 5
- Multi_array(5 , 6) = 5
- Multi_array(6 , 1) = 6
- Multi_array(6 , 2) = 6
- Multi_array(6 , 3) = 6
- Multi_array(6 , 4) = 6
- Multi_array(6 , 5) = 6
- Multi_array(6 , 6) = 6
- Multi_array(7 , 1) = 7
- Multi_array(7 , 2) = 7
- Multi_array(7 , 3) = 7
- Multi_array(7 , 4) = 7
- Multi_array(7 , 5) = 7
- Multi_array(7 , 6) = 7
- Multi_array(8 , 1) = 8
- Multi_array(8 , 2) = 8
- Multi_array(8 , 3) = 8
- Multi_array(8 , 4) = 8
- Multi_array(8 , 5) = 8
- Multi_array(8 , 6) = 8
- Multi_array(9 , 1) = 9
- Multi_array(9 , 2) = 9
- Multi_array(9 , 3) = 9
- Multi_array(9 , 4) = 9
- Multi_array(9 , 5) = 9
- Multi_array(9 , 6) = 9
- Multi_array(10 , 1) = 10
- Multi_array(10 , 2) = 10
- Multi_array(10 , 3) = 10
- Multi_array(10 , 4) = 10
- Multi_array(10 , 5) = 10
- Multi_array(10 , 6) = 10
- Multi_array(11 , 1) = 11
- Multi_array(11 , 2) = 11
- Multi_array(11 , 3) = 11
- Multi_array(11 , 4) = 11
- Multi_array(11 , 5) = 11
- Multi_array(11 , 6) = 11
- Multi_array(12 , 1) = 12
- Multi_array(12 , 2) = 12
- Multi_array(12 , 3) = 12
- Multi_array(12 , 4) = 12
- Multi_array(12 , 5) = 12
- Multi_array(12 , 6) = 12
- Multi_array(13 , 1) = 13
- Multi_array(13 , 2) = 13
- Multi_array(13 , 3) = 13
- Multi_array(13 , 4) = 13
- Multi_array(13 , 5) = 13
- Multi_array(13 , 6) = 13
- Multi_array(14 , 1) = 14
- Multi_array(14 , 2) = 14
- Multi_array(14 , 3) = 14
- Multi_array(14 , 4) = 14
- Multi_array(14 , 5) = 14
- Multi_array(14 , 6) = 14
- Multi_array(15 , 1) = 15
- Multi_array(15 , 2) = 15
- Multi_array(15 , 3) = 15
- Multi_array(15 , 4) = 15
- Multi_array(15 , 5) = 15
- Multi_array(15 , 6) = 15
- Multi_array(16 , 1) = 16
- Multi_array(16 , 2) = 16
- Multi_array(16 , 3) = 16
- Multi_array(16 , 4) = 16
- Multi_array(16 , 5) = 16
- Multi_array(16 , 6) = 16
- 'test part 2
- A= 17
- for index = 1 to 6
- source_array(index) =A
- next index
- index =1 'set index to one for memcopy
- byte_count = Memcopy(source_array(1) , Multi_array(index , 1 ) , 6 , 3)
- Do
- Loop
- End
Co wy na to koledzy ??