Time für Waits

Gast #1621570
Lesenswert?

Hallo,
ich würde gerne Waits im Code mit einem fortlaufenden timer zu 
realisieren. Wie kommt man da effizienter. Eine 32 Bit Variable mit 
Millisekunden hoch zählen, oder Millisekunden, Sekunden Minuten etc. 
getrennt abspeichern, was dann aber die die Differenzberechnung 
aufwendiger macht.

Viele Grüße
#1621921
Lesenswert?

Mike schrieb:
> Und ich weiß ja nicht, um wie viel % das länger dauert

Es dauert 0% länger, denn der Hardwaretimer läuft unabhängig von der 
Software.

Es dauert bloß einige Zyklen länger, einen 32Bit Wert zu vergleichen. 
Und das ist unabhängig von der gewünschten Zeit.


Peter
Gast #1621980
Lesenswert?

Mike schrieb:
> Da wird doch aber jede ms eine 32 Bit variable inkrementiert. Ist das
> nicht aufwendig für den 8 Bit Prozessor?

Grundsätzlich schon. Aber wo ist dabei das Problem?
Wenn Du ansonsten noch Zeit übrig hast und noch keine Taktzyklen zählen 
musst, brauchst Du Dir keine Gedanken zu machen. Das ist, grob geschätzt 
etwa wie vier 8-Bit Werte inkrementieren.
#1621987
Lesenswert?

Mike schrieb:
> Also ich mache das jetzt so:
>
> volatile uint32_t ms=0;
>
> ISR(TIMER1_COMPA_vect)
> {
>   ms++;
> }
>
> Da wird doch aber jede ms eine 32 Bit variable inkrementiert. Ist das
> nicht aufwendig für den 8 Bit Prozessor?

Was ist die Alternative?
1
volatile uint16_t ms;
2
volatile uint8_t  sec;
3
volatile uint8_t  min;
4
volatile uint8_t  hour;
5

6
ISR(TIMER1_COMPA_vect)
7
{
8
  ms++;
9

10
  if( ms == 1000 ) {
11
    ms = 0;
12
    sec++;
13
    if( sec == 60 ) {
14
      sec = 0;
15
      min++;
16
      if( min == 60 ) {
17
        min = 0;
18
        hour++;
19
      }
20
    }
21
  }
22
}

Das wird sich nicht um viel reißen :-)
#1621989
Lesenswert?

Mike schrieb:
> Da wird doch aber jede ms eine 32 Bit variable inkrementiert. Ist das
> nicht aufwendig für den 8 Bit Prozessor?

Ein leerer Interrupt kostet schon 25 Zyklen.
Das 32Bit Increment nochmal 30 Zyklen, also etwa Verdoppelung der 
CPU-Last.
Die CPU-Last ist dann bei 16MHz etwa 0,4%.


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren