Tömb feltöltés szubrutinban....
Adott egy tömb, amely 32 db byte típusú változókat tartalmazhat, ill. néhány más byte típusú változó.
A különféle változók értékeivel fel szeretném tölteni a tömböt.
A változók a főprogramban vesznek fel értéket, a tömb feltöltése egy szubrutinban történik ilyen formában:
data(1) = x
data(2) = mb
data(3) = 0
data(4) = elso
data(5) = masodik
data(6) = harmadik
Ezután a tömb kiíratásakor (lcd-re) kiderül, hogy az értékek közül csak az első 4 került bele a tömbbe, a többi nem.
Miért?
A különféle változók értékeivel fel szeretném tölteni a tömböt.
A változók a főprogramban vesznek fel értéket, a tömb feltöltése egy szubrutinban történik ilyen formában:
data(1) = x
data(2) = mb
data(3) = 0
data(4) = elso
data(5) = masodik
data(6) = harmadik
Ezután a tömb kiíratásakor (lcd-re) kiderül, hogy az értékek közül csak az első 4 került bele a tömbbe, a többi nem.
Miért?
Kód: Egész kijelölése
Dim M_data(14) As Byte
Dim Add_1 As Byte
Dim Add_2 As Byte
Dim Add_3 As Byte
.
.
.
sub akarmi
M_data(1) = 0
M_data(2) = 0
M_data(3) = 0
M_data(4) = Add_1
M_data(5) = Add_2
M_data(6) = Add_3
Lcd Hex(m_data(4)) ; " " ; Hex(m_data(5)) ; " " ; Hex(m_data(6))
.
.
.
End SubHívom a szubrutint, onnantól meg a tömb 5. és 6. tagja 0 lesz, annak ellenére, hogy az eredeti változók nem nullák.
Ezért írok én bascom könyvet?????
34. Hibakeresés
Debug, $Dbg, HWstack/SWstack/Frames, Stcheck, Reset ...
34. Hibakeresés
Debug, $Dbg, HWstack/SWstack/Frames, Stcheck, Reset ...
Ez az STcheck nagyon kínai nekem. Olvasgattam a Bascom helpjét, meg amit írtál, de már annyira összekavarodtam a saját programommal, hogy ez már kiverte a biztosítékot nálam.
Visszaírni meg nem volt hajlandóságom. 
Igen, de csak miután a tömb feltöltése visszakerült a főprogramba. Ha hamarabb válaszoltatok volna, akkor nem lett volna időm átírni a programot, és akkor az értéknöveléssel kezdtem volna!Robert írta:$frames és társait ha megnöveled? Mondjuk a duplájára?
Egyszerű:
Az Error változó értéke a következő lehet:
1: ha a hardware stack belelóg/felülírja a soft stack helyet,
2: ha a soft stack hely ütközik a frame hellyel,
3: ha a frame space ütközik a soft stack hellyel.
Kód: Egész kijelölése
.
.
.
'deklarációk után
.
Const Stcheckdbg = 0 '1 vagy 0 kell vagy sem...
#if Stcheckdbg = 1
Dim Error As Byte
#endif
'Vizsgálat
'Stcheck
'Print "ErrorSt" ; Error
sub teszt()
#if Stcheckdbg = 1
Stcheck
Print "teszt:ErrorSt" ; Error
#endif
.
.
end sub
1: ha a hardware stack belelóg/felülírja a soft stack helyet,
2: ha a soft stack hely ütközik a frame hellyel,
3: ha a frame space ütközik a soft stack hellyel.
Ez _nem_ a fordító hibája. Az hogy a stack összecsúszik vagy sem, az működés közben derül ki. pl. szimuláció vagy éles helyzetben....
Gyakorlatilag a PC szinten a StackOverflow is ugyanez.... És azért PCre mennyivel jobb, komplexebb fordítók léteznek. És lám. Ott is belefuthastz ilyenbe:)
A Bascom ennek kezelésére az STCheck illetve a Dbg metódust is megadja....
Amúgy csak bonyolultnak "tűnik". A valóságban nem az.....
Gyakorlatilag a PC szinten a StackOverflow is ugyanez.... És azért PCre mennyivel jobb, komplexebb fordítók léteznek. És lám. Ott is belefuthastz ilyenbe:)
A Bascom ennek kezelésére az STCheck illetve a Dbg metódust is megadja....
Amúgy csak bonyolultnak "tűnik". A valóságban nem az.....