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 

Globalne spremenljivke v Cju

 
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
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.14
Kraj: okolica Divače

PrispevekObjavljeno: Sre Okt 14, 2009 10:28 am    Naslov sporočila:  Globalne spremenljivke v Cju Odgovori s citatom

Najbolje da kar pripnem kos kode, ki me muči:

Koda:

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include "lcd.h"

#define motor 1
#define motor_on PORTC |= (1<<motor)
#define motor_off PORTC &= ~(1<<motor)

#define led 7
#define led_on PORTB |= (1<<led)
#define led_off PORTB &= ~(1<<led)

#define sredina 1
#define levo 2
#define desno 3

static char ld;

ISR (SIG_OVERFLOW2)
{
   ld = levo ;
   PORTB ^= (1<<led);   
}


int main(void)
{

//   ld = levo;

   DDRC = (1<<motor);
   DDRB = (1<<led);

   motor_off;

   TIMSK    =    1 <<TOIE2;
   TCCR2=0x07;
   
   sei ();

   while (1) {

      _delay_ms(50);
      motor_on;

      if (ld == levo) {
         _delay_us(800);
      }

      motor_off;
   }
   return 0;
}


Problem je v tem, da ko v interruptu nastavim da je ld = levo to potem glavni program ne upošteva. Zgleda tako, kot da iz interrupta ne bi imel dostopa do spremenljivke ld. Interrupt se izvaja 100%, ker mi ledica utripa. Če na začetku programa vklopim tisti ld = levo, ki je zakomentiran, mi izvaja _delay_us(800).

Kako moram definirat spremenljivko, da bom lahko v njo pisal iz interrupta?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
upornik
Član
Član



Pridružen-a: Ned 09 Jan 2005 22:35
Prispevkov: 261
Aktiv.: 1.10
Kraj: Celje

PrispevekObjavljeno: Sre Okt 14, 2009 10:43 am    Naslov sporočila:   Odgovori s citatom

Jaz dam volatile spredaj za globalne spremenljivke in vedno deluje, samo nisem prepričan, da bo v tem primeru, ker imaš static Confused
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.14
Kraj: okolica Divače

PrispevekObjavljeno: Sre Okt 14, 2009 10:46 am    Naslov sporočila:   Odgovori s citatom

Ok super.. z volatile deluje Smile Hvala
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
SimonS
Član
Član



Pridružen-a: Čet 01 Jul 2004 11:18
Prispevkov: 4769
Aktiv.: 20.13
Kraj: Kobarid

PrispevekObjavljeno: Sre Okt 14, 2009 10:50 am    Naslov sporočila:   Odgovori s citatom

Hmm kaj ni static za statične vrednosti, ki se naj nebi spreminjale??? Mislim da bi šlo tudi z samo char
_________________
Lep dan
Simon
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Sre Okt 14, 2009 11:43 am    Naslov sporočila:   Odgovori s citatom

Ja, static tip spremenljivke se naj ne bi spreminjal, zato mu prevajalnik dodeli prostor v flashu in ne v ramu. Jasno, da se flash-a kar tako ne da spreminjati, zato se vrednost ni spremenila.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
upornik
Član
Član



Pridružen-a: Ned 09 Jan 2005 22:35
Prispevkov: 261
Aktiv.: 1.10
Kraj: Celje

PrispevekObjavljeno: Sre Okt 14, 2009 12:37 pm    Naslov sporočila:   Odgovori s citatom

Ja, saj to se je meni tudi zdelo čudno, ker static tip se naj ne bi spreminjal, verjetno mora res samo z char delovati.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
jvolk
Član
Član



Pridružen-a: Ned 05 Mar 2006 1:14
Prispevkov: 737
Aktiv.: 3.14
Kraj: okolica Divače

PrispevekObjavljeno: Sre Okt 14, 2009 1:15 pm    Naslov sporočila:   Odgovori s citatom

Samo s char ni hotelo delat, čeprav v starejših verzijah gccja je delalo.. Mogoče so kaj popravlili. V glavnem stvar sedaj deluje Smile
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Sre Okt 14, 2009 1:19 pm    Naslov sporočila:   Odgovori s citatom

spy je napisal/a:
Ja, static tip spremenljivke se naj ne bi spreminjal, zato mu prevajalnik dodeli prostor v flashu in ne v ramu. Jasno, da se flash-a kar tako ne da spreminjati, zato se vrednost ni spremenila.


Malo si pomešal static in const, ane?
Static se spreminja, vendar ohranja vrednost med posameznimi klici funkicje (recimo v rekurziji). Const je pa konstanta, ta se ne spreminja.

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70810.75

PrispevekObjavljeno: Sre Okt 14, 2009 2:13 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Sre Okt 14, 2009 3:21 pm    Naslov sporočila:   Odgovori s citatom

Think Takšen test ne vem če bi naredil... Vsekakor zanimivo.
_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
janiP
Član
Član



Pridružen-a: Čet 23 Okt 2008 23:00
Prispevkov: 145
Aktiv.: 0.72
Kraj: Ljubljana

PrispevekObjavljeno: Sre Okt 14, 2009 4:04 pm    Naslov sporočila:   Odgovori s citatom

Pri globalnih spremenljivkah je vseeno če uporabljaš static ali ne, ker je vsaka globalna spremenljivka itak že statična.

Volatile pa pove prevajalniku, da naj ne optimira kode v zvezi s to spremenljivko. Volatile ga prisili, da pri vsakem ciklu dejansko prebere nekje iz spomina vsebino te spremenljivke. Brez volatile bo spremenljivko samo enkrat naložil v nek delovni register, nato pa bo računal samo s tem registrom.
Se pravi, volatile uporabiš npr. tam, kjer si spremenljivko deliš z nekim interuptom, lahko pa tudi takrat, ko uporabljaš kakšen debugger.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
spy
Član
Član



Pridružen-a: Sre 06 Sep 2006 20:43
Prispevkov: 403
Aktiv.: 1.76
Kraj: Tržič

PrispevekObjavljeno: Sre Okt 14, 2009 5:27 pm    Naslov sporočila:   Odgovori s citatom

"Celo življenje se učiš, pa še neumen umreš". Bo držalo, moja napaka glede razlage static. Se oproščam.

Ampak... pred časom mi je ravno static povzročil precej sivih las. Sicer pri ARM-u in IARju. Prevajanik mi je spremenljivko vrgel v flash, spremenljivka se je hotela spremeniti in vpis je povzročil Hard_fault prekinitev. Torej vem, da spet nič ne vem... Confused

Hvala za opozorilo. Bo vsaj ena luknja več zapolnjena (v glavi).
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jan
Član
Član



Pridružen-a: Sob 10 Jun 2006 14:19
Prispevkov: 313
Aktiv.: 1.35
Kraj: Dolenjska

PrispevekObjavljeno: Sre Okt 14, 2009 6:21 pm    Naslov sporočila:   Odgovori s citatom

Ravno včeraj sem imel popolnoma identičen problem. Sicer sem potem to rešil z malo večjim spreminjanjem programa, ampak mi je požrlo še pa še živcev... Think Važno da sedaj vem za drugič.

lp
Jan
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Sre Okt 14, 2009 11:07 pm    Naslov sporočila:   Odgovori s citatom

MarE69 je napisal/a:
Preden spet kdo kakšne hecne ven vrže, priporočam branje točk 6, 7 in 8:

http://www.embedded.com/2000/0005/0005feat2.htm


Hmm... malo sem si napačno razlagal const. Sicer imam "izgovor", ker sem se C učil direkt iz "biblije", tam pa const še ni bil definiran... Think

Hvala za tale link Smile

_________________
Tule nisem več aktiven.
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: 494 dni


Powered by phpBB © 2001, 2005 phpBB Group