String trükk

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Kis ajánlás a tanfolyam kiegészítéséhez!
Már több Bascom útmutatót átnéztem, de még sehol nem láttam az alábbi string kezelésre példát.
Pedig működik és sokszor nagyon hasznos. Pl.:

Kód: Egész kijelölése

'$regfile = "m128def.dat"
$regfile = "m64def.dat"

$crystal = 16000000

$hwstack = 174
$swstack = 174
$framesize = 174

$baud = 19200
$sim


'String müveletek
   Dim Keystring(8) As String * 30 ' 8db 30 karakteres string létrehozása.
   Dim I As Byte


 Keystring(1) = "ABCDEFG"
Print Keystring(1)
Keystring(2) = Left(keystring(1) , 5)
Print Keystring(2)                                          'ABCDE
Keystring(3) = Right(keystring(1) , 3)
Print Keystring(3)                                          'EFG
Keystring(4) = Mid(keystring(1) , 2 , 3)
Print Keystring(4)                                          'BCD

For I = 5 To 8
    Keystring(i) = Keystring(i - 1) + Keystring(i - 4)
    Print Keystring(i)
Next I

'......


End                                                         'end program
Itt az Indexelhetőségben van a nagy lehetőség!
8)
Avatar
ampervadasz
Bitmanipulátor
Hozzászólások: 119
Csatlakozott: 2008. január 19. szombat, 7:00

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

kapu48!

Nagyon szépen köszönöm ezt a kis rutint. A fényújságomhoz pont ideális megoldás! A változókat gyorsan, egyszerűen le lehet tárolni. Pont ideális nekem az autóbuszba tervezett menetirány jelző táblámhoz!

Köszi szépen.

Ampervadász.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Kösz!
:D :wink:
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Ugyan hogyan lehetne 2db egyforma stringet összehasonlítani úgy, hogy megkapjam, melyik elem különbözik?
Van egy vekker string: 12:34:56 és azt kellene tudnom, melyik karakterei változtak meg. Közben túrtam és próbálkoztam:
Tömb(1)=egyik_string-másik_string
beteszi a tömbbe az első karakter különbségét.
Sajnos tovább nem megy, de érdekes :)
Szóval csak a ciklusos MID()-es szétválogatás/komparálás mehet?
JAni
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Nem tudom, hogyan csináltad?
Nekem mindig az elöl levő Stringet adja vissza a kivonás:

Kód: Egész kijelölése

 $regfile = "m64def.dat"

 $crystal = 16000000

 $hwstack = 174
 $swstack = 174
 $framesize = 174

 $baud = 19200
 $sim


 'String müveletek
    Dim Keystring(10) As String * 30                        ' 8db 30 karakteres string létrehozása.
    Dim I As Byte


    Keystring(1) = "12:34:56"
    Keystring(2) = "12:34:60"
    Keystring(3) = "12:40:56"
    Keystring(4) = "1:34:56"
    Keystring(5) = Keystring(1) - Keystring(2)
    Print Keystring(5)                                      '= 12:34:56
    Keystring(6) = Keystring(2) - Keystring(1)
    Print Keystring(6)
    Keystring(7) = Keystring(3) - Keystring(4)
    Print Keystring(7)
    Keystring(8) = Keystring(4) - Keystring(3)
    Print Keystring(8)
    Keystring(9) = Keystring(1) - Keystring(4)
    Print Keystring(9)
    Keystring(10) = Keystring(4) - Keystring(3)
    Print Keystring(10)


 '......

 End                                                        'end program

Szimulátorban is futathatod.

:?:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Á, van egyszerűbb:
(fejbol iretam, lehetnek benne kisebb elirasok)
A trukkje: egymasra definialod a sztringet es a tombot

String:
AB:CD:EF + lezáró 0 karakter
Tömb: az egyes karakterek ASCII kódjai
A Tömb azért nem lehet string elemű, mert minden eleme akkor elem + 0-ás stringvége karakterből állna...
Azaz, ha a 0-s kódú karaktert %-l jelülve:

Kód: Egész kijelölése

String:
AB:CD:EF%
Tömb elemei
[1] = chr("A")
[2] = chr("B")
[3] = chr(":")
[4] = chr("C")
[5] = chr("D")
[6] = chr(":")
[7] = chr("E")
[8] = chr("F")
Így a program:

Kód: Egész kijelölése

Dim szoveg1 as string*8
dim karakterkod(8) as byte at szoveg1 overlay

Dim szoveg2 as string*8
dim karakterkod2(8) as byte at szoveg2 overlay

for i = 1 to 8
 if karakterkod(i) <> karakterkod2(i) then 
   print "elteres:";i;"   ";chr(karakterkod(i));" !=";chr(karakterkod2(i));
 end if
next i
end
A hozzászólást 1 alkalommal szerkesztették, utoljára Robert 2012. július 17. kedd, 11:14-kor.
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Én tömbbe tettem a különbséget, de persze semmire sem jó, csak érdekes. (meg nem jelzett hibát)
Ezt az "AT"-os dolgot kipróbálom :)
Köszi!
Kíváncsi leszek, hogy fog mutatani, ha vacak lesz, felgyújtom.
JAni
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

Az AT az megmondja a változónak, hogy melyik memóroacímtől legyen.

Kiegészítettem, mert kell az Overlay (átfedás)...
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Address out of bounds HIBA.
Mifene...
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Ja, ok. Overlay... Csak gyorsabban jár a kezem, mint a maradék eszem. (inkább zongoráznom kellene...)
JAni
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Csak így a 10-nél kisebb számok elé kel egy „0”.
Különben nincsen meg a 8 karakter!
:?
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Megy ez, mert nem tetszőleges számokra van, hanem
vekkerre. Itt látszik a vektoros számkipakolás (hogy lehessen nagyítani ugye), persze tud normálisan is firkálni,
de nem bírtam ki hogy ne effektezzen.

http://data.hu/get/5351440/vektorora.mp4

Kb így néz ki.
12mega.
Az elsőnél janiregister=0, a második
újraindulásnál meg átkapcsolom 1-re.
(ezt egy cimbora nevezte el így, mert nem értette mire jó az egyenesrajzoló rutinban, de aztán beépítette az FPGA-jába is :)
Ha 0, akkor a hosszregiszterben megadott hosszúságig látszik a kívánt egyenes, de tovább húzza, csak nem rajzolja ki. Ha 1, akkor a hosszban megadott értéknél be is fejezi a vonalhúzást, kilép, mint ha ott lenne a vége.
JAni
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Nekem TETSZIK!
Főleg a második kihúzásos effekt jó.

Menyi munkád van benne?
Valamikor lesz publikálva, a project?

:o
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

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

Szétszórva, amikor tele az agyam más hülyeséggel, pofozgatom a rutinokat. 3D rutinok is készen vannak, de úgy látom, át kell vésni integer-esre és még nem vitt rá a lélek. Így is mennek, de figyelni kell, ki ne lyukassza a kijelzőt a 3D transzformáció. Egy kocka kb 50 frame/sec-el forog, tehát elég gyors, a kisűrhajó olyan 30-al.
Csak most ezt a vektoros nagyítást ki kellett próbálni valamin, oszt benneragadtam. Lehet, le kellene kódolni a teljes karaktertáblát. Itt úgy van csinálva, hogy a normál HD447xx bitmap LCD karakter van vektorizálva, így amikor a zoom=1, akkor pont olyat kapsz, mint a normál LCD 5x7-es karakterek, csak egyel kisebb zoom van (0), akkor még olvashatóak, csak furcsák.Most írtam meg majdnem mindent EADOGM SPI-s kijelzőre, mert ott csak akkor van normál grafikád, ha virtuális képernyőt használsz, aztán ha az már megvolt ugye...
Különben nem titok az egész, csak nem akarok vacakot kitenni.
Így is biztos lesz olyan, aki sokat tud rajta optimalizálni. No, meg agyon kellene kommentezni, hogy mi-miért van. Amíg én is el nem felejtem.
JAni
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

/ Off:
Októberben úgyis lesz a szokásos éves projektpublikálás :)
Válasz küldése