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 

while loop in bitwise AND operacija

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 03, 2011 12:50 am    Naslov sporočila:  while loop in bitwise AND operacija Odgovori s citatom

Lep pozdrav!

V C program želim vključiti neke vrste stikalo, ki bi ustavilo program dokler se ne vklopi zastavica ADC_INT_STATUS v registru ADC_INT_STATUS_REG. Poiskušal sem funkcijo napisati takole
Koda:
while(enable1 != ADC_INT_STATUS_REG & ADC_INT_STATUS)   

a mi javi syntax error: "multiple markers at this line". Kako bi lahko to izvedel?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Nov 03, 2011 7:45 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 25 Jan 2008 8:00
Prispevkov: 3388
Aktiv.: 15.96

PrispevekObjavljeno: Čet Nov 03, 2011 8:38 am    Naslov sporočila:   Odgovori s citatom

V c-ju za AVRje mi je ta način najrazumljivejši:

Koda:
while (bit_is_clear (ADC_INT_STATUS_REG, ADC_INT_STATUS) {}


Torej čaka, dokler se bit ADC_INT_STATUS ne postavi na 1.

Če gre to tudi v tvojem primeru, pa ne morem potrditi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 03, 2011 8:59 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
"multiple markers" pomeni, da je v tej vrstici več kot ena napaka.
Kako sta definirana ADC_INT_STATUS_REG in ADC_INT_STATUS?
Poskusi z oklepaji.

Sem poiskusil z oklepaji takole:
Koda:
while (enable1 != (ADC_INT_STATUS_REG & ADC_INT_STATUS));

In bolj natančno prebral napako, ki je bila: "Syntax error, multiple markers at this line, expected ')' before ';' token.", kar je bilo zelo čudno, ker je bil oklepaj tam, AMPAK spremenljivki ADC_INT_STATUS_REG in ADC_INT_STATUS sta bili definirani v ločeni .h datoteki kot:
Koda:
#define ADC_INT_STATUS_REG (*((volatile unsigned int *) 0x1300202C))
#define ADC_INT_STATUS 0x1;

No in sem ugotovil, da mi nagaja podpičje na koncu definicije za ADC_INT_STATUS. Sedaj, ko sem to popravil, mi prevede program, vendar še vedno dobivam warning: "enable1 is uninitialized in this function.", kar mi je čudno, saj mu dodelim vrednost preko bitwise &.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
.
Neznanec
Neznanec



Pridružen-a: Pet 01 Okt 2004 1:17
Prispevkov: 1
Aktiv.: 0.00

PrispevekObjavljeno: Čet Nov 03, 2011 9:08 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.

Nazadnje urejal/a . Čet Nov 03, 2011 9:11 am; skupaj popravljeno 1 krat
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 03, 2011 9:11 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
V tu objavljenih delih kode vrednost ni nikjer dodeljena.

while zanka traja, dokler je vrednost enable1 neenaka prvemu bitu ADC_INT_STATUS_REG
Drugega tu ni videti.

Aha sem initializiral spremenljivko takole in sedaj ni več nobenega opozorila:

Koda:
unsigned int enable1 = 0;
while (enable1 != (ADC_INT_STATUS_REG & ADC_INT_STATUS));


Hvala!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
71GA
Član
Član



Pridružen-a: Tor 16 Jun 2009 18:53
Prispevkov: 391
Aktiv.: 2.00
Kraj: Ljubljana

PrispevekObjavljeno: Čet Nov 03, 2011 9:12 am    Naslov sporočila:   Odgovori s citatom

Kroko je napisal/a:
Takole zna biti to kar hočeš:
Koda:

while(!(ADC_INT_STATUS_REG & ADC_INT_STATUS))
 


No tole je tudi zanimivo, da ne potrebujem brezveze nove spremenljivke. Hvala ta rešitev mi je še najbolj všeč.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Č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: 6 dni


Powered by phpBB © 2001, 2005 phpBB Group