Fehler vom Compiler?

OP Persönliche Seite #1428465
Lesenswert?
• ▲
▼
aus
1
  delay_time_10ms = 100;    // simple delay
2
  while (delay_time_10ms != 0);
wird
>62:         delay_time_10ms = 100;    // simple delay
>>+0000002D:   E684        LDI       R24,0x64       Load immediate
>>+0000002E:   93800067    STS       0x0067,R24     Store direct to data space
>63:         while (delay_time_10ms != 0);
>>+00000030:   91800067    LDS       R24,0x0067     Load direct from data space
>>+00000032:   2388        TST       R24            Test for Zero or Minus
>>+00000033:   F7E1        BRNE      PC-0x03        Branch if not equal

R24 wird immer wieder mit 100d geladen!
Was kann ich da machen?

O2, tny26
#1428483
Lesenswert?
• ▲
▼
Steven W. schrieb:
> Seid ihr Müde???
> Trinkt mal n Kaffee, das hilft.
>
> Und schonmal was von Interrupts gehört?

Schon mal was davon gehört, dass man bei einer Frage alle relevanten 
Informationen angeben sollte? Wenn eine Variable durch einen Interrupt 
verändert wird, nenne ich das relevant!
Und diese Interruptabhängigkeit solltest du vielleicht nicht nur uns 
sagen, sondern auch dem Compiler. Stichwort - volatile

Und wenn es das auch nicht ist, könnten dann euer Hochwohlgeboren 
eventuell, nur wenn es nicht zuviele Umstände macht, ein klein wenig 
mehr Code herzeigen. An ein in sich geschlossenes, vollständiges 
Beispiel wage ich dabei noch nicht einmal im Traum zu denken.

Untertänigst
Gast #1428511
Lesenswert?
• ▲
▼
Also ich weiß nich, normalerweise wärs ja auch das erste, was man sagen 
würde: Zu wenig Information.

Aber aus dem Listing-Schnippel geht eigentlich alles hervor, was zur 
Beantwortung der Fragestellung nötig ist:

Aus
1
  delay_time_10ms = 100;    // simple delay
2
  while (delay_time_10ms != 0);

wird
1
>62:         delay_time_10ms = 100;    // simple delay
2
+0000002D:   E684        LDI       R24,0x64       Load immediate
3
+0000002E:   93800067    STS       0x0067,R24     Store direct to data space
4
>63:         while (delay_time_10ms != 0);
5
+00000030:   91800067    LDS       R24,0x0067     Load direct from data space
6
+00000032:   2388        TST       R24            Test for Zero or Minus
7
+00000033:   F7E1        BRNE      PC-0x03        Branch if not equal

Und das ist vollkommen korrekt.
#1428536
Lesenswert?
• ▲
▼
TIMSK = 2;

Ist das korrekt für den Overflow-Interrupt?
1
void Timer_Init()
2
{
3
  
4

5
  TCCR0 = 2;
6
  TCNT0 = 155;
7
  TIMSK = 2;
8
  
9
}


Bitte, bitte, bitte.
Tu dir selbst und uns einen Gefallen und schreibe das in der üblichen 
Bitsetz-Notation
1
void Timer_Init()
2
{
3
 TCCR0 = ( 1 << CS01 );   // Vorteiler: 
4
 TCNT0 = 155;
5
 TIMSK = ( 1 << TOIE0 );
6
}

dann musst du dir auch nicht merken, an welcher Position welches Bits 
steht und wir müssen auch nicht nachsehen ob du dich dabei vielleicht 
verzählt hast.
Gast #1428540
Lesenswert?
• ▲
▼
auch diese Sache

 ISR(TIMER0_OVF0_vect)
    ...
    Timer_Init();
    ...


kommt mir ein wenig unschön vor, du willst bestimmt ereichen das du 
immer nach 0.1ms aufgerufen wist. Wenn es nicht sehr genau sein muss 
kann man es so machen, wenn es genau sein muss geht das nicht. Weil du 
nicht weisst wieviel Takte vergangen sind bis die ISR aufgerufen wurde. 
(es gibt befehle die dauert etwas länger und andere ISR werden erst 
komplett abgearbeitet)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.