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

Pridružen-a: Tor 03 Jan 2006 15:29 Prispevkov: 3473 Aktiv.: 14.63 Kraj: Postojna
|
Objavljeno: Pet Nov 10, 2006 4:58 pm Naslov sporočila: Čudno obnašanje programa |
|
|
Ali se je že komu zgodilo, da program ne deluje pravilno, ko pa dodaš nekaj kode, ki (naj) ne bi vplivala na potek programa, pa zadeva spet dela?
Hotel sem ugotoviti zakaj in kje se zatakne moj program, zato sem vmes dodal printf-e, ampak zadeva je potem delovala. Moj kolega je enkrat dodal samo nop-e in je pomagala, sicer mu je na LCD izpisovalo kvake.
Obnašanje se nanaša na LPC in Keil uVision3 in vgrajene prevajalanike. |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Pet Nov 10, 2006 5:03 pm Naslov sporočila: |
|
|
Imel sem problem, da mi je javljal kompiler neke errorje, problem pa je je bil v printf funkciji, če sem to funkcijo s katero sem si prikazal (preko serijske povezave s PC) indeks for zanke. Ta indeks sem imel deklariran v main funkciji, problem sem pa rešil tako, da sem dal indeks izven main (globalna spremenljivka). Po tem mi je program pravilno skompajliral.
To sem pa delal na demo verziji, ki jo dobiš zraven razvojne plošče. |
|
Nazaj na vrh |
|
 |
oversc0re Član

Pridružen-a: Tor 13 Sep 2005 15:20 Prispevkov: 460 Aktiv.: 1.94 Kraj: Radomlje
|
Objavljeno: Pet Nov 10, 2006 6:10 pm Naslov sporočila: |
|
|
Malo podrobneje predstavljen problem s strani kolega: Zelo ocitno je, da na pravilno delovanje programa vpliva dolzina le tega. Tako ko napisem neko dodatno funkcijo, se zacne program cudno obnasat (namesto temperature dobim na lcd cudne znake, ali pa se napisi popolnoma pokvarijo ali pa program popolnoma zasteka), ko pa dodam se kaksno funkcijo, program spet deluje. Najprej sem sumil printf, zato sem napisal svojo funkcijo za pisanje na LCD, pa je se vedno isto. Potem smo posumili optimizacijo... Ok prestavim optimizacijo iz 6 na 1 in program zacne delat. Jo dam do konca (8 ) in spet dela, medtem ko 6,5 in 4 ne delajo (ostalih nisem probaval). Diagnosticiranje napake je prakticno nemogoce, saj ce izklapljam razlicne dele programa stvar deluje, pa ceprav nimajo deli nobene veze z napako. Pointerje sem izdatno pregledal in ne kaze, da bi kateri pisal po nealociranem pomnilniku. Res cudno. _________________ The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny ...'
Isaac Asimov (1920 - 1992) |
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.34 Kraj: Lovrenc na P.
|
Objavljeno: Pet Nov 10, 2006 8:09 pm Naslov sporočila: |
|
|
Če se vam to dogaja pri LC displayih potem ni problem v dodajanju kode itd. ampak pri inicializaciji in izpisovanju na LCD. Za vsak znak, ki ga vpišemo na LCD moramo dati enable linijo na visoko za določen čas, če je tisti čas premajhen se izpišejo kvake. |
|
Nazaj na vrh |
|
 |
oversc0re Član

Pridružen-a: Tor 13 Sep 2005 15:20 Prispevkov: 460 Aktiv.: 1.94 Kraj: Radomlje
|
Objavljeno: Sob Nov 11, 2006 11:32 am Naslov sporočila: |
|
|
Ne, ne. Tezave so vedno samo s spremenljivkami. Tiste kljuke, ki se prikazujejo, so prikazane vedno namesto vrednosti temperature. Vse ostalo piše kot je treba. Poleg tega me je ze bostjang opozoril na morebitno moznost prekratkega delaya in sem ga za vsak slucaj krepko povecal, pa seveda ni bilo nobenega rezultata. _________________ The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny ...'
Isaac Asimov (1920 - 1992) |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.66 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Nov 13, 2006 10:39 am Naslov sporočila: |
|
|
Zakasnitev (delay) je potrebno uporabiti na pravem mestu. Poizkusi klicati delay za vsakim ukazom v inicializaciji in za vsakim ukazom pri pisanju na LCD. Kvake so tipičen primer napačnega timinga. NOP ali dva je včasih dovolj, da reši problem.
Za test lahko namesto temperature poizkusiš izpisati "AAAA". Če bo izpisalo pravilno AAAA, je verjetno temperatura v napačnem (binarnem?) formatu in jo display pokaže kot nonprintable znak. Običajno je potrebno temperaturo iz senzorja pretvoriti v numerične znake. Če senzor v bytu vrne temperaturo 37 stopinj, in to neposredno izpišeš na zaslon, boš dobil % (kvaka).
Ascii tabela: 037 045 025 00100101 % (percent)
Jur |
|
Nazaj na vrh |
|
 |
oversc0re Član

Pridružen-a: Tor 13 Sep 2005 15:20 Prispevkov: 460 Aktiv.: 1.94 Kraj: Radomlje
|
Objavljeno: Pon Nov 13, 2006 11:23 am Naslov sporočila: |
|
|
A mi lahko prosim verjamete, da izpis na LCD deluje 100%. Saj nisem vceraj zacel programirati mikrokontrolerjev. Printal sem ze s sprintf in ker so se pojavljale napake sem naredil svoje funkcije za izpis temperature, a so napake identicne. _________________ The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny ...'
Isaac Asimov (1920 - 1992) |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.66 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Nov 13, 2006 11:53 am Naslov sporočila: |
|
|
Dejstvo je, da stvar ne dela.
Ali lahko spremenljivke od temperature izpišeš na LED diode, če je kakšen port prost, ali na uart (com port)?
Jur |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.52
|
Objavljeno: Pon Nov 13, 2006 12:10 pm Naslov sporočila: |
|
|
Sta sila skrivnostna - raba bi diagnozo necesa, cesar ne more nihce niti pregledati Moja kristalna krogla je trenutno na popravilu, tako da lahko zgolj ugibam
Meni se je sicer ze zgodilo, da je prislo do tezav z izpisom na LCD (Keil uVision3), ker je bil med dvema izpisoma prekratek delay (a ocitno se vedno dovolj dolg, da je izpis sicer deloval in dalec vecji, kot je specificirano v datasheetu kontrolnega cipa). Celoten drugi niz je izginil v neznano (najbrz je bil vpisan v del RAMa kontrolerja, ki ni mapiran na display - gre za manjsi display).
Enako kot Jur si lahko predstavljam, da bi zaradi podobne napake lahko nekaj znakov bilo okvarjenih namesto da popolnoma izginejo in da ustrezna dodatna pavza to resi (kar sta oba napisala). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
oversc0re Član

Pridružen-a: Tor 13 Sep 2005 15:20 Prispevkov: 460 Aktiv.: 1.94 Kraj: Radomlje
|
Objavljeno: Pon Nov 13, 2006 2:04 pm Naslov sporočila: |
|
|
Izpis na LCD je zgolj banalen primer dokaza, da nekaj ne deluje dobro. Delay sem, kot je že bilo rečeno povečal nekajkrat, pa je bil rezultat enak. Poleg tega bostjan sploh ne uporablja LCDja, temvec se mu program zastrika nekje drugje. Ko se pri meni zacnejo pojavljati cudni znaki, se program po krajsem casu potem obesi. Tudi izpis na serijski port ne deluje. Sicer pa bomo ze... Zanimalo naju je predvsem, ce se je komu ze pripetilo kaj podobnega na Keilovem compilerju...
Lp, M@ic _________________ The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny ...'
Isaac Asimov (1920 - 1992) |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.52
|
Objavljeno: Pon Nov 13, 2006 2:06 pm Naslov sporočila: |
|
|
Seveda, le da ocitno ni bil kriv compiler (po pregledu assembly outputa), ker bi sam tisti del prevedel enako  _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.66 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pon Nov 13, 2006 2:37 pm Naslov sporočila: |
|
|
oversc0re je napisal/a: |
... Zanimalo naju je predvsem, ce se je komu ze pripetilo kaj podobnega na Keilovem compilerju..c |
Ja, točno to se mi je že dogajalo. Pri drugih (večih različnih) compilerjih, ne pri Keilu. Vedno pa so do sedaj bile moje (idiotske) napake. Timing, delay, napačen init.,...
Jur |
|
Nazaj na vrh |
|
 |
oversc0re Član

Pridružen-a: Tor 13 Sep 2005 15:20 Prispevkov: 460 Aktiv.: 1.94 Kraj: Radomlje
|
Objavljeno: Sob Feb 24, 2007 8:00 pm Naslov sporočila: |
|
|
Hoj!
S tele teme sem pobrisal prah, ker sem po nekaj mesecih končno odkril srš problema (in bi ga rad prihranil vsem ostalim) in pa ker se mi očitki o idiotskih napakah ne zdijo najboljši primer kostruktivnega reševanja težav. Konec koncev je izpadlo, kot da ne znam sprogramirat osnovnega izpisa spremenljivke na LCD
Skratka LPC2101-3 imajo hardverski BUG. Nedeterministično izvajanje programa se pojavi pri frekvencah >40MHz oz pri večji porabi toka na 1.8V napajalni liniji. Težavo se da zaobiti bodisi z znižanjem urine frekvence, bodisi z zvišanjem napajalne napetosti na 1.95V.
Lp, Matic _________________ The most exciting phrase to hear in science, the one that heralds new discoveries, is not 'Eureka!' but 'That's funny ...'
Isaac Asimov (1920 - 1992) |
|
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: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|