Tömb feltöltés szubrutinban....

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

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?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

A tömböt nem jól definiáltad, 0-s értéket adtál neki, meg még 1000 lehetőség...


A vonatkozó programrészlet birtokában (tömb definiálás. tömb értékkel feltöltése illetve LCDre kiíratás rutinja) sokat segítene a megoldásban.....
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

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 Sub
Csak a kérdéses dolgokat másoltam be. A főciklusban az Add_n változók értékei ott vannak a változóban, lcd-re írással ellenőriztem.
Hí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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Már csak a Bascom fordító verzió kellene....
:P
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

A legfrissebb, és regisztrált. :)
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

Furcsa, de ha a főciklusban töltöm fel a tömböt, és utána hívom meg a szubrutint, akkor meg minden úgy történik, ahogy szeretném. :?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

$frames és társait ha megnöveled? Mondjuka aduplájára?

Pontosra kijátszani a STcheck-l lehet....
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

STCheck? Az mire jó, hogyan kell használni, stb?
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Nézd meg a Bascom help-ben!
Jelzi, hogy történt e Stack méreten túl lépés! Mert ha igen, akkor elvesznek adatok, meg más galibák fordulnak elő!
:arrow:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

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. :roll:
Robert írta:$frames és társait ha megnöveled? Mondjuk a duplájára?
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! :) Visszaírni meg nem volt hajlandóságom. :?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Egyszerű:

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
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.
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

Én az _összes_ szubruti elejére bebiggyeszettem....
Így ha debugolgatni kell, akkor látom az Error értékén hogy hol van baj, és milyen...
Fontos: ha egyszer az Error>0, akkor az nem csökken, folyamatosan ezt az értéket tartja!


A Dbg-vel nem boldogultam nagyobb prg esetén....
Avatar
dummy
Chipgyilok
Hozzászólások: 264
Csatlakozott: 2008. május 24. szombat, 6:00

Hozzászólás Szerző: dummy »

Nem vagyok kötözködős fajta, de ez azért messze túl van az "egyszerű"-n. Mondjuk, ha fordításkor kidobna egy hibaüzenetet, mint pl. egy szintaktikai hibánál, az egyszerű lenne. Erről persze a Bascom készítői tehetnek.
Ettől függetlenül kipróbálom majd!
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Hozzászólás Szerző: Robert »

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.....
Válasz küldése