Bascom cross-reference

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
Csuhas
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2005. április 22. péntek, 6:00

Bascom cross-reference

HozzászólásSzerző: Csuhas » 2015. augusztus 10. hétfő, 11:41

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.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 10. hétfő, 13:46

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:

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

...


Szerintem bármilyen címke pointerét lekérheted így.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 10. hétfő, 14:07

És vizsgálhatod/állithatod a RAMPZ regisztert, alsó 2 – 3 Bites (adatlap?) a memória lapot címzik.

Avatar
Csuhas
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2005. április 22. péntek, 6:00

Re: Bascom cross-reference

HozzászólásSzerző: Csuhas » 2015. augusztus 10. hétfő, 14:17

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.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 10. hétfő, 14:56

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

Avatar
Csuhas
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2005. április 22. péntek, 6:00

Re: Bascom cross-reference

HozzászólásSzerző: Csuhas » 2015. augusztus 10. hétfő, 15:07

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.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9908
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: Bascom cross-reference

HozzászólásSzerző: Robert » 2015. augusztus 12. szerda, 9:16

A FLASH adathalmod lé valami ilyet teszel:

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

$data
data "Ke'phalom"


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.

Avatar
Csuhas
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2005. április 22. péntek, 6:00

Re: Bascom cross-reference

HozzászólásSzerző: Csuhas » 2015. augusztus 12. szerda, 10:51

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.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 12. szerda, 12:26

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!!

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"

És a kapott eredmény:

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

Config
Font8x8.font: 1072
font16x16.font: 2860
smallfont8x8.font: 860
ks108.bgf: 5936
Cls


Nehéz volt?
:lol:

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 12. szerda, 12:41

É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!
8)
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2015. augusztus 12. szerda, 12:44-kor.

Avatar
Csuhas
Biztosítékgyilkos
Hozzászólások: 64
Csatlakozott: 2005. április 22. péntek, 6:00

Re: Bascom cross-reference

HozzászólásSzerző: Csuhas » 2015. augusztus 12. szerda, 12:43

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.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 12. szerda, 12:52

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.

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3231
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

Re: Bascom cross-reference

HozzászólásSzerző: kapu48 » 2015. augusztus 12. szerda, 13:58

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!


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