Bascom cross-reference
Bascom cross-reference
Bascom alatt írok atmega125 illetve xmega 256 procikra egy nagyobb alkalmazást. Ahogy a kód mérete meghaladta a 64K-t rendszeresen misztikus hibákba ütközöm. Pl nem megy a kijelző inicializálás, de pár byte-al megnövelve a kódot megjavul a dolog. Feltételezem hogy a laphatárra eső táblázatok okozhatják a gondot. Jó volna ha látnám hogy mi hova kerül a memóriába hogy a kritikus részekkel el tudjam kerülni a laphatárt. Viszont nem sikerült kiderítenem a címkék, konstansok helyét a program memóriában. Szóval hogyan lehet bascomban cross-reference táblát generálni.
Re: Bascom cross-reference
Hogy a Bascomban van e már ilyen rutin azt nem tudom!
De én így szereztem meg a flashban levő karakter tábla címeket:
Szerintem bármilyen címke pointerét lekérheted így.
De én így szereztem meg a flashban levő karakter tábla címeket:
Kód: Egész kijelölése
Dim Labelw As Word ’
Dim Labelwl As Byte At Labelw Overlay
Dim Labelwh As Byte At Labelw + 1 Overlay
...
$asm
push r24
ldi r24,low(Font8x8g * 2) 'to point to picture or Font data
* sts {Labelwl}, r24
ldi r24,high(Font8x8g * 2)
* sts {Labelwh}, r24
Pop r24
$end Asm
...
Re: Bascom cross-reference
És vizsgálhatod/állithatod a RAMPZ regisztert, alsó 2 – 3 Bites (adatlap?) a memória lapot címzik.
Re: Bascom cross-reference
Egy-egy címre jó a javaslatod. De egy fordító által generált táblázat szerencsésebb volna. Megelőzendő az ilyen hibákat, arra gondoltam hogy a programba beszúrok egy ORG utasítást ami az első lap vége felé kis hézagot hagyva a program többi részét a második lapra teszi, így nem kerülhet a laphatárra sem adat sem olyan ugrás ami nem kezeli a rampz regisztert.
Re: Bascom cross-reference
Sajnos azt hiszem ezt magadnak kel megírnod!
Ha nagyobb tőmben indexelsz figyelned kel a lap határt, és állítani az RAMPZ regisztert.
Ez megoldható a fenti módszerrel + 1 feltételes elágazással!
Vagy a ram elején foglalsz helyet a tömbjeidnek.
A változók címzésénél már nem vettem észre ilyen laphatár hibát.
Esetleg még a közvetlen címzés az ORG megfelelője:
Dim x as Long at $60 'long uses 60,61,62 and 63 hex of SRAM
Ha nagyobb tőmben indexelsz figyelned kel a lap határt, és állítani az RAMPZ regisztert.
Ez megoldható a fenti módszerrel + 1 feltételes elágazással!
Vagy a ram elején foglalsz helyet a tömbjeidnek.
A változók címzésénél már nem vettem észre ilyen laphatár hibát.
Esetleg még a közvetlen címzés az ORG megfelelője:
Dim x as Long at $60 'long uses 60,61,62 and 63 hex of SRAM
Re: Bascom cross-reference
Konkrétan a hibát nekem egy oledes kijelzőt kezelő általam módosított lib-je okozta, amit még vagy három verzióval korábbi bascomban alakítottam át. Itt az _lpmbyte függvény volt a ludas mert abban megváltozott a rampz kezelése. Alapvetően az a bajom hogy nem tudhatom hogy egy lib hova kerül a lefordított kódban ezért aggódom hogy maradt-e még laphatárra érzékeny rész valamelyik nem általam írt lib-ben ami aknaként várja hogy egy apró módosítás eltolja a kódot hogy az érzékeny részlet kerüljön laphatárra.
Re: Bascom cross-reference
A FLASH adathalmod lé valami ilyet teszel:
Program opcióknál fordításhoz: OBJ állományt is kérsz.
AVRStudio 4.19-ben az OBJ megnyit. Eszköz: Simulator2
Közben aps file ment (projektfile)
Jobbra fenn az ikonok közt: Toggle View - Memory
Itt látod, hogy a flash hogyan épül fel
A LIB esetén kötött karakterlánccal tudod esetleg jelezni, hogy mi hova kerül. És akár a lefordított HEX-ben is rákeresni.
Kód: Egész kijelölése
$data
data "Ke'phalom"
AVRStudio 4.19-ben az OBJ megnyit. Eszköz: Simulator2
Közben aps file ment (projektfile)
Jobbra fenn az ikonok közt: Toggle View - Memory
Itt látod, hogy a flash hogyan épül fel
A LIB esetén kötött karakterlánccal tudod esetleg jelezni, hogy mi hova kerül. És akár a lefordított HEX-ben is rákeresni.
Re: Bascom cross-reference
Ha jól nézem ez ugyanaz mint a lefordított bin file. Ennek alapján még mindig nem látom hogy melyik rutin az ami éppen laphatárra esik.
Re: Bascom cross-reference
Igen ezt javasolnánk 1 kezdő programozónak!
De ha esetleg legyőznénk a lustaságunk!?
És kevés + munkával összedobnánk a kívánságunknak megfelelő rutint?
Itt alant 1 a Bascomból ollózót project:
A hőn óhajtott „cross-reference” kiegészítéssel!!
És a kapott eredmény:
Nehéz volt?
De ha esetleg legyőznénk a lustaságunk!?
És kevés + munkával összedobnánk a kívánságunknak megfelelő rutint?
Itt alant 1 a Bascomból ollózót project:
A hőn óhajtott „cross-reference” kiegészítéssel!!
Kód: Egész kijelölése
'-----------------------------------------------------------------------------------------
'name : ks108.bas
'copyright : (c) 1995-2005, MCS Electronics
'purpose : demonstrates the KS108 based graphical display support
'micro : Mega323
'suited for demo : no
'commercial addon needed : no
'-----------------------------------------------------------------------------------------
'$regfile = "m323def.dat" ' specify the used micro
$regfile = "m2560def.dat"
$crystal = 8000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
$sim
'some routines to control the display are in the glcdKS108.lib file
$lib "glcdKS108.lib"
Wait 2
Print "Config" ' printing will still work as only the receiver pin is disabled
'First we define that we use a graphic LCD
Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 0 , Ce2 = 1 , Cd = 4 , Rd = 3 , Reset = 2 , Enable = 5
'The dataport is the portname that is connected to the data lines of the LCD
'The controlport is the portname which pins are used to control the lcd
'CE =CS1 Chip select
'CE2=CS2 Chip select second chip
'CD=Data/instruction
'RD=Read
'RESET = reset
'ENABLE= Chip Enable
'Dim variables (y not used)
Dim X As Byte , Y As Byte
'******************************************* cross-reference *************************************
Dim Labelw As Word
Dim Labelwl As Byte At Labelw Overlay
Dim Labelwh As Byte At Labelw + 1 Overlay
$asm
push r24
ldi r24,low(Font8x8 * 2) 'to point to picture or Font data
* sts {Labelwl}, r24
ldi r24,high(Font8x8 * 2)
* sts {Labelwh}, r24
Pop r24
$end Asm
Print "Font8x8.font: "; Labelw
$asm
push r24
ldi r24,low(font16x16 * 2) 'to point to picture or Font data
* sts {Labelwl}, r24
ldi r24,high(font16x16 * 2)
* sts {Labelwh}, r24
Pop r24
$end Asm
Print "font16x16.font: "; Labelw
$asm
push r24
ldi r24,low(smallfont8x8 * 2) 'to point to picture or Font data
* sts {Labelwl}, r24
ldi r24,high(smallfont8x8 * 2)
* sts {Labelwh}, r24
Pop r24
$end Asm
Print "smallfont8x8.font: "; Labelw
$asm
push r24
ldi r24,low(Plaatje * 2) 'to point to picture or Font data
* sts {Labelwl}, r24
ldi r24,high(Plaatje * 2)
* sts {Labelwh}, r24
Pop r24
$end Asm
Print "ks108.bgf: "; Labelw
'******************************************* END cross-reference *************************************
Print "Cls"
Cls
Wait 1
'specify the font we want to use
Setfont Font8x8
'You can use locate but the columns have a range from 1-128
'When you want to show somthing on the LCD, use the LDAT command
'LCDAT Y , COL, value
Lcdat 1 , 1 , "123"
'lcdat accepts an additional param for inversing the text
Lcdat 2 , 1 , "123" , 1 ' will inverse the text
'Now use a different font
'Setfont Font8x8
'since the 16*16 font uses 2 rows, show on row 3
'Lcdat 1 , 1 , "2345"
'Lcdat 2 , 56 , "2345656"
Wait 1
Line(0 , 0) -(127 , 64) , 1 'make line
Wait 2
Line(0 , 0) -(127 , 64) , 0 'remove line
For Y = 1 To 20
Circle(30 , 30) , Y , 1
Waitms 100
Next
Wait 1
Glcdcmd &H3E , 1 : Glcdcmd &H3E , 2 ' both displays off
Wait 1
Glcdcmd &H3F , 1 : Glcdcmd &H3F , 2 'both on
'GLCDCMD accepts an additional param to select the chip
'With multiple, GLCDCMD statements, it is best to specify the chip only the first time
Showpic 0 , 0 , Plaatje 'show a comnpressed picture
End 'end program
'we need to include the font files
'Notice that this is a testfont with only numbers defined !
$include "smallfont8x8.font"
$include "font8x8.font"
$include "font16x16.font"
Plaatje:
'include the picture data
$bgf "ks108.bgf"
Kód: Egész kijelölése
Config
Font8x8.font: 1072
font16x16.font: 2860
smallfont8x8.font: 860
ks108.bgf: 5936
Cls
Re: Bascom cross-reference
És, hogy melyik lib milyen méretű?
Persze az alkalmazott „Dim Labelw As Word” miatt a lapváltást csak abból érzékeljük, hogy elölről kezdődnek a címek!
A végén kivonjuk a „cross-reference” rutinunk hosszát.
Lehetne még dolgozni rajta!
Persze az alkalmazott „Dim Labelw As Word” miatt a lapváltást csak abból érzékeljük, hogy elölről kezdődnek a címek!
A végén kivonjuk a „cross-reference” rutinunk hosszát.
Lehetne még dolgozni rajta!
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2015. augusztus 12. szerda, 12:44-kor.
Re: Bascom cross-reference
Nem volt nehéz. Két problémát látok:
Ebben a programomban kb 50 szubrutin, és valamivel több ilyen olyan szövegkonstans, táblázat stb található. Nem tudhatom hogy ezek közül bármelyiknek a laphatárra kerülése esetén jól dolgozik-e a bascom. ( Mondjuk javul, jelenleg csak a kijelző lib-ben levő inicializáló táblázatnál működött hibásan, de azt a libet még kettővel előbbi bascomhoz írtam, és azóta nem piszkáltam. Működött is ami nem került laphatárra az a bizonyos táblázat. )
A másik gond hogy ezek a programba belerakott kiírások maguk is odébb tolják a kódot, tehát nem sokat mondanak a debugg kiíratások nélküli állapotról.
Jeleztem a gondom a supportnak, de nyaralnak 16-ig. Lehet hogy csak egy egy rejtett paramétert kell valahova beírni és képződik cross-referenc tábla. Hiszen ez a fordító tesztelésekor is szükséges volt.
Ebben a programomban kb 50 szubrutin, és valamivel több ilyen olyan szövegkonstans, táblázat stb található. Nem tudhatom hogy ezek közül bármelyiknek a laphatárra kerülése esetén jól dolgozik-e a bascom. ( Mondjuk javul, jelenleg csak a kijelző lib-ben levő inicializáló táblázatnál működött hibásan, de azt a libet még kettővel előbbi bascomhoz írtam, és azóta nem piszkáltam. Működött is ami nem került laphatárra az a bizonyos táblázat. )
A másik gond hogy ezek a programba belerakott kiírások maguk is odébb tolják a kódot, tehát nem sokat mondanak a debugg kiíratások nélküli állapotról.
Jeleztem a gondom a supportnak, de nyaralnak 16-ig. Lehet hogy csak egy egy rejtett paramétert kell valahova beírni és képződik cross-referenc tábla. Hiszen ez a fordító tesztelésekor is szükséges volt.
Re: Bascom cross-reference
Ezt a bugot már vagy 4 éve folyamatosan többen is bejelentették.
De remény hal meg utoljára!
Minden gondod én oldjak meg? Nincsen egy kevés fantáziád?
Az említet, rutin rakhatod a programod legvégére is, minden libek után! A beiktatót 1 szubrutin híváson már nem sok múlhat.
De remény hal meg utoljára!
Minden gondod én oldjak meg? Nincsen egy kevés fantáziád?
Az említet, rutin rakhatod a programod legvégére is, minden libek után! A beiktatót 1 szubrutin híváson már nem sok múlhat.
Re: Bascom cross-reference
Különben, Te ott is rémeket látsz ahol nincs is!
A programfutás közben szükséges lapváltások meg vannak oldva.
A hiba olyankor jön elő mikor a fentebb listázott nagyobb tömbökből olvasol,
és nem oldod meg a laphatár figyelést!
A programfutás közben szükséges lapváltások meg vannak oldva.
A hiba olyankor jön elő mikor a fentebb listázott nagyobb tömbökből olvasol,
és nem oldod meg a laphatár figyelést!