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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. június 27. szerda, 7:43

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
Tartózkodási hely: Mátraterenye
Kapcsolat:

HozzászólásSzerző: ampervadasz » 2012. június 30. szombat, 14:06

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. június 30. szombat, 18:00

Kösz!
:D :wink:

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. július 17. kedd, 9:33

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. július 17. kedd, 10:42

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. július 17. kedd, 11:03

Á, 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
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. július 17. kedd, 11:11

É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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. július 17. kedd, 11:14

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
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. július 17. kedd, 11:21

Address out of bounds HIBA.
Mifene...

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. július 17. kedd, 11:23

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. július 17. kedd, 11:26

Csak így a 10-nél kisebb számok elé kel egy „0”.
Különben nincsen meg a 8 karakter!
:?

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. július 17. kedd, 12:25

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: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. július 17. kedd, 14:50

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
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. július 17. kedd, 15:07

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: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. július 17. kedd, 16:05

/ Off:
Októberben úgyis lesz a szokásos éves projektpublikálás :)


Vissza: “Bascom-AVR nyelvű programozás (AVR programozásának lehetőségei)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég