RTL8019AS hibázik?

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Válasz küldése
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Szép napot mindenkinek!

Nem tudom, hogy más találkozott-e már hasonló érdekességgel a Bascomban...az alap egy M128-CWL RFID modul (persze más része is van a HW-nek, de ez most mellékes).

A tesztelő program, amivel a CWL-től a 2400Baud-dal érkező adatokat fogadom, nagyon jól megy, régóta használom minden gond nélkül, valahogy így néz ki:

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

Cwl_adat:
Disable Urxc1
disable int6

   For Cwl_index = 1 To 8                                   '8 lépesben bekeri a TAG-et az RFID olvasotol
       $timeout = 300000
        Waitus 4700                                         'FONTOS!!!!!!!
      Pstring(cwl_index) = Udr1
   Next Index

Cwl_megszakitas_bit = 1
Enable int6
Enable Urxc1
Return
DE most, ahogy terebélyesedik a program (>50K), elkezd hibázni, az első két adat hibátlanul eltárolódik, de az utánna lévő 6 már nem, vagy össze keverednek, vagy ugyanazt az értéket veszik fel a következők is (de néha hiba nélkűl beolvassa az egészet)!
Ha vissza töltöm csak az alap tesztelő kódot, azzal hibátlanul megy!

Nem jövök rá, hogy mi lehet a hiba!
Az URXC1-int-en kívűl csak az INT6 van használatban, más megszabítás nincs, csak a többi sima I/O port.

Stack/frame méret növelés sem jelentett megoldást!

A változók deklarálása a következő:

Overlayes, statikus helyen eltárolt változók, majd utánna jönnek a sima változók, sram területére írtak és az eepromot használók!

Ha valakinek van valami tippje, bátran ossza csak meg! 8)

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

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

Pedig elsősorban mégis a veremkezelés a gyanús!
Esetleg ha látnánk az új, hibásnak tűnő program részletet okosabbak lennénk!

Mondjuk ez már kapásból hiba: „Next Index”
Inkább : „Next Cwl_index” Kellene
:roll:
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. augusztus 2. vasárnap, 19:07-kor.
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Az cwl_index a programban, csak itt valahogy lemaradt!

Az egész program eddig kb 4000sor, nehéz lenne bemásolni:P

De ami lényeges lehet:

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

'Processzor tipusa
$regfile = "m128def.dat"
'Kvarc
$crystal = 14745600

'///////////////////////////////////////////////////////////////////////////////

$hwstack = 500
$swstack = 500
$framesize = 500

'///////////////////////////////////////////////////////////////////////////////

'EADOGML128 LCD lib.
$lib "glcdeadogm128x6.lbx"

'///////////////////////////////////////////////////////////////////////////////

Config Graphlcd = 128 * 64eadogm , Cs1 = Portb.5 , A0 = Portb.4 , Si = Portb.2 , Sclk = Portb.1 , Rst = Portb.3       'EADOGML128
Config Timer3 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Compare C Pwm = Clear Down , Prescale = 1       'LCD háttér PWM
Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Touch
'TOUCH:
'ADC1
'ADC2
'ADC3
'ADC4

$baud1 = 2400                                               '
Open "COM2:" For Binary As #1
Config Com2 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       'CWL-1
Echo Off

'///////////////////////////////////////////////////////////////////////////////

'I2C busz konfig
Config Scl = Portd.0
Config Sda = Portd.1
I2cinit
majd ezt követik az I/O ill. változó deklarálások...

Utánna Int konfigok:

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

On Int6 Rtl8019as_interrupt
On Urxc1 Cwl_adat

Config Int6 = Rising

Enable Interrupts
Enable Int6
Enable Urxc1
Főprogram

Majd Subrutinok, megszakítás rutinok, LCD font include fájlok és az LCD-ne megjeleníteni kívánk képek cimkéi.

Tudom, hogy így nagyon nem teljes, de az egészet tényleg képtelenség bemásolni...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Hát ez kevesebb, mint a semmi! Gondolom a hiba nem ezek a részletek beírása után, jelentkezet! A lényeg ezekből főleg az újabbak lenének : „Majd Subrutinok, megszakítás rutinok,” :?

(Erre a Max lehetőség kb. ennyi: (Majd este 22h után küldöm az energiát, legyen bekapcsolva a készülék)) :twisted:
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

hwstack, swstack es frames 20%-l novelendo....
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Ok, bekapcsolva hagyom... :lol:

Az a baj, hogy pontosan nem tudom, hogy mi után keletkezett et a hiba, biztonhsági mentést csak éjfélkor csinálok, de az nap elég sokat bővítettem rajta, amikor előjött a hiba...de ha nem lesz meg akkor csak az lesz, hogy a legutolsó hibátlanul működő verziótol elkezdem átnézni....

Robi, mért épp 20%-kal növeljem?

u.i.: ha 20%-al növelem, akkor az értékeket 600ra kellene beállítani, s akkor kifutok már az SRAM-ból...pedig még bőven kellene hely, mert a vége még messze van...eredetileg az értékek 64-en voltak, azért vettem fel, mert gondoltam, hogy az majd megoldja, de semmi...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

Ha van egy hibás verem kezelés, tehetsz bele memóriabővítést is. Azt is megeszi idővel! Szerintem már az 500 is túlsók, ez nem segít a gondodon! :cry:
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Ha stack/frame kezeléssel lenne a baj, akkor szerintem a sima int6-on léve Realtek chip is hibázna, de az most már hibátlanul fut...semmi mással sincs gond, csak ezzel az uart-tal...
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Sikerűlt magtalálni a hibát kizárásos módszerrel 8)

A hiba egy, a főprogrambol folyamatosan meghívásra kerülő rutinban volt:

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

Dim Kuldott_csomagok As Long                                'Küldött csomag számláló
Dim Kuldott_csomaghossz As Byte                             'Küldött csomag hossza byte-ban
Dim Kuldott_byte As Long                                    'Küldött adatmennyiség byte-ban
Dim Kuldott_kbyte As Long
Dim Kuldott_mbyte As Long
Dim Kuldott_mbyte_eprom As Eram Long
Dim Fogadott_csomagok As Long                               'Fogadott csomag számláló
Dim Fogadott_byte As Long                                   'Fogadott adatmennyiség byte-ban
Dim Fogadott_kbyte As Long
Dim Fogadott_mbyte As Long
Dim Fogadott_mbyte_eprom As Eram Long
Dim Fogadott_csomaghossz As Byte                            'Fogadott csomag hossza byte-ban

Sub Eth_forg_szaml
      Kuldott_byte = Kuldott_csomagok * Kuldott_csomaghossz
      Kuldott_kbyte = Kuldott_byte \ 1024
      Kuldott_mbyte = Kuldott_kbyte \ 1024
      Kuldott_mbyte_eprom = Kuldott_mbyte

      Fogadott_byte = Fogadott_csomagok * Fogadott_csomaghossz
      Fogadott_kbyte = Fogadott_byte \ 1024
      Fogadott_mbyte = Fogadott_kbyte \ 1024
      Fogadott_mbyte_eprom = Fogadott_mbyte
End Sub
DE ebben mi kerűlte el a figyelmemet?

Közben átírtam "ésszerűbbre":

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

Dim Kuldott_csomagok As Word                                'Küldött csomag számláló
Dim Kuldott_csomaghossz As Byte                             'Küldött csomag hossza byte-ban
Dim Kuldott_byte As Word                                    'Küldött adatmennyiség byte-ban
Dim Kuldott_kbyte As Word
Dim Kuldott_mbyte As Byte
Dim Kuldott_mbyte_eprom As Eram Byte
Dim Fogadott_csomagok As Word                               'Fogadott csomag számláló
Dim Fogadott_byte As Word                                   'Fogadott adatmennyiség byte-ban
Dim Fogadott_kbyte As Word
Dim Fogadott_mbyte As Byte
Dim Fogadott_mbyte_eprom As Eram Byte
Dim Fogadott_csomaghossz As Byte                            'Fogadott csomag hossza byte-ban
Vagyis a mbyte értéke úgysem lesz több 255nél egyhamar, sem a küldött sem a fogadott, de szükségem lenne lebegőpntos ábrázolásra, amit eepromban tárolok, mert igy a mbyte értéke sosem fog változni, amig 1-re váltana az értéke, hogy beíródjon az eepromba, 10x újraindítom valamiért) így az eram is lehet csak byte! Most már megy...de nem tudom, hogy miért akadt ki az "eram long"on?

Ha nem tudja lekezelni, csak a byte-ot, akkor mért nem dob hibaüzenetet...?
A hozzászólást 1 alkalommal szerkesztették, utoljára norbi 2009. augusztus 2. vasárnap, 22:42-kor.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

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

És ezt a rutint hányszor hívod meg percenként?
Mert az adatlapban van 2 ilyen kellemetlen sor!
„– 4K Bytes EEPROM
Endurance: 100,000 Write/Erase Cycles”
:cry:

Sajnos már elég hosszú sora van a rejtélyesen elmaradó hibaüzeneteknek! :(
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2009. augusztus 2. vasárnap, 22:45-kor.
Avatar
norbi
Chipgyilok
Hozzászólások: 308
Csatlakozott: 2006. augusztus 3. csütörtök, 6:00

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

Csak amikor adat küldés vagy fogadás történt!

Az tény, hogy a főprogramból hívom meg (ematt érthetted félre), de teljesülni kell ahhoz egy igazágnak is. 8)

u.i.: viszon jó tudni, hogy iylet is lehet:

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

Dim Kuldott_mbyte_eprom As Eram Byte At &H5FF Overlay 
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

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

stcheck utsasítás a hibakeresés fejezetből....

stack v. framesből futsz ki....



eram long az szintén megy....
Válasz küldése