 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Sre Nov 14, 2007 3:59 pm Naslov sporočila: Svašta! Debounce ustavi program...?!?!?! [Bascom] |
|
|
LP!
Napisan imam en precej kompleksen program (GSM modem, vhodi z debounce, komunikacija s PCjem, ...), ki pa mi občasno zamrzuje. Sedaj sem se vrgel v odpravo napak in ugotovil sledeče:
Po šestih pritiskih na katerokoli od tipk (isti register, lahko različne tipke, lahko tudi ista) se delovanje programa upočasni (v glavni zanki sem naredil en watchdog, ki ob vsakem prehodu glavne zanke spremenljivko poveča za 1; od začetka gre zelo hitro, po šestih pritiskih pa se upočasni in po osmih (še dveh) se procesor resetira). Po še dveh pritiskih (na tipko) procesor zamrzne (za par sekund), nato pa se resetira.
Kaj bi to bilo??? Isto se zgodi, če namesto debounce ukaza uporabim if strukturo.
Sem naprogramiral že kar nekaj zadev, ampak tole mi je pa dalo vode pit...
Lp, Grega |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Nov 14, 2007 4:11 pm Naslov sporočila: |
|
|
Stack overflow?
Jur |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Sre Nov 14, 2007 4:14 pm Naslov sporočila: |
|
|
Kje naj bi to videl?
Sem sumil na nekaj podobnega, ampak kaj zdaj?
Našel sem ukaz stcheck in se bom malo poigral z njim. Zna biti res to - soft stack...
Se da kako enostavno sprostiti resource, potem ko je podprogram zaključen?
LP, grega
p.s. Fju... To bo to... Sem umaknil nekaj SUB procedur in sedaj zadeva deluje dalj časa... 14 pritiskov... Gremo dalje...
Nazadnje urejal/a mucek Sre Nov 14, 2007 4:29 pm; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Sre Nov 14, 2007 4:25 pm Naslov sporočila: |
|
|
mucek je napisal/a: |
...Se da kako enostavno sprostiti resource, potem ko je podprogram zaključen? LP, grega |
RETURN ukaz na koncu sprosti resource (predvsem tiste od stacka), ko je podprogram zaključen.
Pogosta napaka je, da iz procedure skočiš ven z goto ali kako drugače, namesto z RETURNom.
Jur
____________
goto stack |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Sre Nov 14, 2007 5:49 pm Naslov sporočila: |
|
|
Bascom zna generirati .ASM?
Sicer še nisem poizkušal, ampak ali se da v AVR Studio uvoziti HEX?
Tam imaš še kar uporaben simulator. _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
vilko Član



Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3359 Aktiv.: 14.18 Kraj: Dragomer
|
Objavljeno: Sre Nov 14, 2007 7:01 pm Naslov sporočila: Vprašanje |
|
|
Vprašanje, s katerim želim pomagati sebi, tebi ne morem, ker veš več kot jaz.
Kot vidim, Mucek, komuniciraš a dve strani hkrati, GSM in PC.
Zanima me, ali uporabljaš mikro z dvema hardwarskima uartoma, ali si pomagaš s software uartom, ker imam podoben problem jaz sam, in se že kar dolgo mučim, kako bi software uart prapravil do tega, da bi delal podobno kot hwuart.
Če imaš izkušnje s swuartom, na kaj je potrebno paziti, ker meni ne gre in ne gre!
Pozdrav
vs |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Sre Nov 14, 2007 10:13 pm Naslov sporočila: |
|
|
LP!
Vilko - uporabljam uC z dvema HW UARToma, tako da ti žal ne bom mogel pomagati... Enkrat sem se na M8515 tudi sam ubadal s tem, da sem rabil imeti priklopljeni tri stvari hkrati (comp, doppler radar in še veliki display) in sem zadevo rešil po kmečko - radar je le oddajal (je šel na RX), display le sprejemal (je šel na TX), ko pa sem želel narediti povezavo na računalnik (za nastavljanje parametrov, pobiranje statistik, ...) sem pa RX in TX preko releja preklopil na drug priključek (seveda po ukazu iz samega programa). Seveda takrat naprava ni delovala (merila). Kot se spomnim, je uporaba SW UARTa opisana v knjigi od Bascoma (sem imel hrvaško verzijo - ne vem, kam mi je izginila), vendar si verjetno to že našel...
Jur - RETURN na koncu podprogramov sem vedno (!) uporabljal, pa ni pomagalo nič! Oziroma čudo od čuda - ko sem return ukaze spremenil v GOTO je bilo precej bolje!
Jutri se vržem v zadevo še enkrat in pridem stvari do dna. S precej GOTO ukazi zadeva zdaj sicer dela ok (no, bomo videli jutri, sem pustil laufat čez noč...), a je program precej bolj nepregleden kot je bil prej.
LP, Grega |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Nov 15, 2007 12:35 am Naslov sporočila: |
|
|
Vilko - vcasih si se ukvarjal z x51 arhitekturo (8051 in sorodstvo). Med njimi je *mnogo* predstavnikov z dvema HW UARToma ... druga stvar pa je, ali Bascom to zna podpreti. Morda je cas za zamenjavo orodja ? _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Čet Nov 15, 2007 9:15 am Naslov sporočila: |
|
|
Sokrat, Bascom mi prav lepo krmili tudi 4 HW UARTe na M2560...
Primer sample kode...
Koda: |
'-----------------------------------------------------------------------------------------
'name :
'copyright : (c) 1995-2007, MCS Electronics
'purpose : test for M2560 support
'micro : Mega2560
'suited for demo : yes
'commercial addon needed : no
'-----------------------------------------------------------------------------------------
$regfile = "m2560def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$hwstack = 40 ' default use 32 for the hardware stack
$swstack = 40 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
'$timeout = 1000000
'The M128 has an extended UART.
'when CO'NFIG COMx is not used, the default N,8,1 will be used
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com2 = 19200 , 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 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Enable Interrupts
Config Serialin = Buffered , Size = 20
Config Serialin1 = Buffered , Size = 20 , Bytematch = 65
Config Serialin2 = Buffered , Size = 20 , Bytematch = 66
Config Serialin3 = Buffered , Size = 20 , Bytematch = All
'Open all UARTS
Open "COM2:" For Binary As #2
Open "COM3:" For Binary As #3
Open "COM4:" For Binary As #4
Print "Hello" 'first uart
Dim B1 As Byte , B2 As Byte , B3 As Byte , B4 As Byte
Dim Tel As Word , Nm As String * 16
Config Adc = Single , Prescaler = Auto
Tel = Getadc(0)
Tel = Getadc(8)
Tel = 0
'unremark to test second UART
'Input #2 , "Name ?" , Nm
'Print #2 , "Hello " ; Nm
Do
Incr Tel
Print Tel ; " test serial port 1"
Print #2 , Tel ; " test serial port 2"
Print #3 , Tel ; " test serial port 3"
Print #4 , Tel ; " test serial port 4"
B1 = Inkey() 'first uart
B2 = Inkey(#2)
B3 = Inkey(#3)
B4 = Inkey(#4)
If B1 <> 0 Then
Print B1 ; " from port 1"
End If
If B2 <> 0 Then
Print #2 , B2 ; " from port 2"
End If
If B3 <> 0 Then
Print #3 , B3 ; " from port 3"
End If
If B4 <> 0 Then
Print #4 , B4 ; " from port 4"
End If
Waitms 500
Loop
'Label called when UART2 received an A
Serial1charmatch:
Print #2 , "we got an A"
Return
'Label called when UART2 received a B
Serial2charmatch:
Print #3 , "we got a B"
Return
'Label called when UART3 receives a char
Serial3bytereceived:
Print #4 , "we got a char"
Return
End
Close #2
Close #3
Close #4
$eeprom
Data 1 , 2 |
LP, Grega |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Čet Nov 15, 2007 10:36 am Naslov sporočila: |
|
|
Mogoče pa je res čas, da greš na jezik C...  _________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.70 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Čet Nov 15, 2007 2:20 pm Naslov sporočila: |
|
|
mucek je napisal/a: |
Jur - RETURN na koncu podprogramov sem vedno (!) uporabljal, pa ni pomagalo nič! Oziroma čudo od čuda - ko sem return ukaze spremenil v GOTO je bilo precej bolje! LP, Grega |
Ja, GOTO namesto RETURNa deluje v primeru, če narediš goto na začetek programa, kjer se vse na novo inicializira. Takrat včasih vse deluje, tudi če je stack povožen. Definitivno pa je taka uporaba programiranja slaba. Če ti je z zamenjavo returna v goto program delovalol bolje, to še posebej kaže, da si imel druge logične napake v programu.
V proceduri ni nujno, da je dovolj RETURN samo na koncu. Odvisno od flowa mora biti return še kje vmes, na primer:
Koda: |
start:
...some code here
...
//procedura x
...some code here
if pogoj =true then RETURN
...some code here
RETURN |
Če pri namesto prvega returna uporabiš goto izven procedure, imaš garantiran problem, čeprav morda ne bo viden:
Koda: |
start:
...some code here
...
//procedura x
...some code here
if pogoj =true then GOTO start
...some code here
RETURN |
Jur |
|
Nazaj na vrh |
|
 |
|
|
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
|