www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Stack overflow?

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 17, 2012 4:10 pm    Naslov sporočila:  Stack overflow? Odgovori s citatom

Prišel sem že na rob z živci in sprašujem, če ima kdo idejo kaj bi bil lahko problem oz. kakšna bi lahko bila rešitev.

V Bascom AVR pišem program za GPRS/SMS komunikacijo z main boardom na katerem je atmega2560 in SIM548C. Program je postal že kar obsežen in se mi pregled nad njim že malo zmanjšuje, zato bom težje razložil moj problem.

Moj problem se začne, ko vključim GSM modem in pošljem ukaze za inicializacijo (AT, AT+IPR, AT+CMGF=1, ...). Ko dobim odgovor "Call Ready" pregledam za vrednost signala z (AT+CSQ). Za debug uporabljam prvi HW UART na katerega pošljem vrednost signala. Tukaj pa se zadeva zelo zmeša. Na HW UART na katerega pošljem samo "RSSI: " in vrednost signala vmes pa se mi pomeša še "CME ERROR: 10", ki pa je v kodi vpisan samo v sprejemni rutini in to v IF stavku.

Še bolj čudno je ker uporabljam buffer UART za sprejem, za oddajo pa brez buffra. Res, da imam uporabljene vse HW UARTe, a to ne bi smelo povzročati težav.

Sumim, da je moj problem v stack overflow-u ne vem pa kako bi to rešil. igral sem se z različnimi vrednostmi nastavitev stack-a ampak je vedno enako. Uporabljam:

$hwstack = 128
$swstack = 96
$framesize = 64

Ali mogoče kdo ve kako bi na hitro preveril, ali je res problem v stacku ali naj vzrok iščem drugje.


Koda za izpis v main (DO-LOOP):
Koda:

   If Signal <> 0 Then
      Print "RSSI: " ; Signal
      Signal = 0
   End If


Koda za sprejem:
Koda:

'**********  GSM UART ISR  **********
'-------------------------------------------------------------------------------
Serial1charmatch:

   If _rs232inbuf1(_rs_bufcountr1 -1) = 13 And _rs_bufcountr1 > 2 Then

      Input #2 , Gsm , Noecho
      Gsm_len = Len(gsm)

      If Gsm = "Call Ready" Or Gsm = "+CPIN: READY" Then
         Gsm_ready = 1
         Set Gsm_check_signal

      Elseif Left(gsm , 6) = "+CSQ: " Then
         B_gsm_temp = Charpos(gsm , ",")
         If B_gsm_temp < Gsm_len Then
            Str_temp = Mid(gsm , 7 , B_gsm_temp)
            Signal = Val(str_temp)

            If Signal > 0 And Signal <= 32 Then
               Signal = Signal * 2
               Signal = Signal - 113
            End If
         End If
      Elseif Gsm = "+CME ERROR: 10" Then
         Gsm_off = 1

      End If

      Gsm = ""

   End If

   Clear Serialin1

Return


Odgovor na prvem HW UART-u:
Koda:

GSM vklopljen
RSSI: CME ERROR: 1099
RSSI: CME ERROR: 10-75


Pritisk na tipko pošlje na GSM modem "AT+CPIN?" (spodaj celoten pogovor, 2x pritisnjena tipka na koncu):
Koda:

AT
AT
AT+IPR=0
AT+CMGF=1
AT+CLIP=1
AT+CIPSPRT=1
AT+CPIN?
AT+CSQ
AT+CSQ
AT+CPIN?
AT+CSQCME ERROR: 10
AT+CPIN?
AT+CSQCME ERROR: 10
[/code]
_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
LEDuser
Član
Član



Pridružen-a: Pon 31 Mar 2008 12:06
Prispevkov: 1104
Aktiv.: 5.27
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 17, 2012 4:17 pm    Naslov sporočila:   Odgovori s citatom

Naj pokažem še init UART-ov:

Koda:

Config Com1 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = 115200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com4 = 4800 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

Config Serialin = Buffered , Size = 20 , Bytematch = 10
Config Serialin1 = Buffered , Size = 150 , Bytematch = 10
Config Serialin3 = Buffered , Size = 100 , Bytematch = 10

Open "COM2:" For Binary As #2
Open "COM3:" For Binary As #3
Open "COM4:" For Binary As #4

_________________
Razsvetljujemo od leta 1920!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Dec 17, 2012 7:36 pm    Naslov sporočila:   Odgovori s citatom

Kaj se zgodi, če program povsem oklestiš oziroma začneš ven brisat najbolj nepotrebne dele kode in nato še najbolj nepotrebne globalne spremenljivke.

Imaš kakšne interrupte? Obstaja možnost, da se ti interrupt rutine gnezdijo ena v drugo, ko prejšnja še ni zaključena?

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
mucek
Član
Član



Pridružen-a: Tor 01 Avg 2006 10:47
Prispevkov: 5529
Aktiv.: 24.06
Kraj: Domzale

PrispevekObjavljeno: Pon Dec 17, 2012 8:19 pm    Naslov sporočila:   Odgovori s citatom

Se dogaja nakljucno ali vedno?
Ce prvo, prihaja do tega prej, ce zmanjsas stack?
Ce drugo, se zgodi kaj drugace, ce spremenis dolzino stringov oz. dolzino bufferja za uart?

Lp, g

_________________
...lahko pa se tudi motim ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Tomazp
Član
Član



Pridružen-a: Sob 02 Feb 2008 13:24
Prispevkov: 559
Aktiv.: 2.64
Kraj: Ljubljana

PrispevekObjavljeno: Tor Dec 18, 2012 8:45 pm    Naslov sporočila:   Odgovori s citatom

Sam sem v Cju imel težavo, da so prej delujoče rutine prenehale delovati oz. so delale samo nekatere. Posumil sem na stack. Pa sem našel, da AVR GCC sam upravlja s stackom in da daje vedno maksimalno vrednost stecka. Nato pogledam količino zasedenega pomnilnika. Bila je cca. 98%, kar pomeni da sem bil praktično skoraj brez stacka. Po čiščenju programa je bilo vse bp. Morda je tudi v bascomu kaj podobnega.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group