Forum: Compiler & IDEs loop_until_bit_is_set : Interessantes Phänomen


von Stefan (Gast)


Lesenswert?

Hallo,

wenn ich die o.g. Funktion benutze, kehrt selbige nicht mehr zurück:
1
loop_until_bit_is_set(PINB, PB6);

Der Pegel an PB6 (von aussen) ist vor Aufruf der Funktion auf low, und 
geht ca. nach 1 ms auf high (mit Logicanalyer gemessen).

Ersetzte ich diese Funktion durch
1
uint32_t i;
2
for (i = 0; i < 100000; i++)
3
{
4
  if (PINB & (1<<PB6))
5
  break;
6
}

funktioniert alles wie gewollt. Die Schleife wird in dem Moment 
verlassen, wenn PB6 auf high geht.

Kann das jemand erklären ?

Gruß
Stefan

von Uhu U. (uhu)


Lesenswert?

Ich würde da einfach mit einem Assembler-Debugger reingucken - dann muß 
man nich rumspekulieren...

von Thomas (Gast)


Lesenswert?

und wenn du das Makro ausschreibst ist es auch so? also loop until bit 
is set steht ja für:
1
do
2
{}
3
while (!(PINB & (1 << PB6)))

von Andreas Paulin (Gast)


Lesenswert?

Die Makros 'loop_until_bit....' sind meines Wissens in sfr_defs.h 
definiert. Hast Du die #included?

von Stefan (Gast)


Lesenswert?

Inzwischen tut's die loop Funktion. Keine Ahnung warum :-(
Trotzdem Danke für die Tips.

Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.