Hallo! Ich hab ein merkwürdiges Verhalten in einer delay routine, die x millisekunden warten soll, hier der code: 446:wecker.c **** 447:wecker.c **** void 448:wecker.c **** delayms (uint16_t ms) 449:wecker.c **** { 1427 .LM184: 1428 /* prologue: frame size=0 */ 1429 /* prologue end (size=0) */ 450:wecker.c **** milliseconds = ms; 1431 .LM185: 1432 06b4 9093 0000 sts (milliseconds)+1,r25 1433 06b8 8093 0000 sts milliseconds,r24 451:wecker.c **** while (milliseconds > 0) 1435 .LM186: 1436 06bc 8091 0000 lds r24,milliseconds 1437 06c0 9091 0000 lds r25,(milliseconds)+1 1438 06c4 892B or r24,r25 1439 06c6 39F0 breq .L99 1440 .L97: 452:wecker.c **** asm volatile (" nop"); 1442 .LM187: 1443 /* #APP */ 1444 06c8 0000 nop 1445 /* #NOAPP */ 1446 06ca 8091 0000 lds r24,milliseconds 1447 06ce 9091 0000 lds r25,(milliseconds)+1 1448 06d2 892B or r24,r25 1449 06d4 C9F7 brne .L97 1450 .L99: 453:wecker.c **** } Die 16bit Variable milliseconds wird in einer Interruptroutine jede Millisekunde um eins runtergezählt: 263:wecker.c **** milliseconds--; 604 .LM77: 605 .LBB3: 606 01f0 8091 0000 lds r24,milliseconds 607 01f4 9091 0000 lds r25,(milliseconds)+1 608 01f8 0197 sbiw r24,1 609 01fa 9093 0000 sts (milliseconds)+1,r25 610 01fe 8093 0000 sts milliseconds,r24 Ich bekomme jetzt unregelmässige Zeiten in delayms(), sie sind meist kürzer als die eingestellte Zeit. Woran kann es liegen? milliseconds ist definiert als: static volatile uint16_t milliseconds=0; Ich hab das gesamte Programm angehängt, falls es hilft. delay hab ich in lcd.c (nicht angehängt) und sieht so aus:
Sorry, hab den delay() Code vergessen: 124:lcd.c **** delay (uint16_t us) 125:lcd.c **** { 111 .LM1: 112 /* prologue: frame size=0 */ 113 /* prologue end (size=0) */ 126:lcd.c **** while (us) 115 .LM2: 116 0000 0097 sbiw r24,0 117 0002 11F0 breq .L7 118 .L5: 127:lcd.c **** us--; 120 .LM3: 121 0004 0197 sbiw r24,1 122 0006 F1F7 brne .L5 123 .L7: 128:lcd.c **** } 125 .LM4:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.