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


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Čet Nov 03, 2011 12:50 am Naslov sporočila: while loop in bitwise AND operacija |
|
|
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 |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Čet Nov 03, 2011 7:45 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika. |
|
Nazaj na vrh |
|
 |
lojzek Član



Pridružen-a: Pet 25 Jan 2008 8:00 Prispevkov: 3388 Aktiv.: 15.96
|
Objavljeno: Čet Nov 03, 2011 8:38 am Naslov sporočila: |
|
|
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 |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Čet Nov 03, 2011 8:59 am Naslov sporočila: |
|
|
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 |
|
 |
. Neznanec

Pridružen-a: Pet 01 Okt 2004 1:17 Prispevkov: 1 Aktiv.: 0.00
|
Objavljeno: Čet Nov 03, 2011 9:08 am Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
Nazadnje urejal/a . Čet Nov 03, 2011 9:11 am; skupaj popravljeno 1 krat |
|
Nazaj na vrh |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Čet Nov 03, 2011 9:11 am Naslov sporočila: |
|
|
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 |
|
 |
71GA Član


Pridružen-a: Tor 16 Jun 2009 18:53 Prispevkov: 391 Aktiv.: 2.00 Kraj: Ljubljana
|
Objavljeno: Čet Nov 03, 2011 9:12 am Naslov sporočila: |
|
|
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 |
|
 |
|
|
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: 5 dni
Powered by phpBB © 2001, 2005 phpBB Group
|