Timer Starten und Initialisieren dauert wie lange?

OP #791480
Hallo,
ich hab da mal ne Frage zu folgendem Code:
1
void waitms(uint16_t mis){  
2
  
3
  //(16.000.000:64):250=1000
4
  TCCR0 |= (1<<CS01)|(1<<CS00);    //prescaler 64
5
  TCNT0 |= 0x6;    //vorladen (moch 250 Schritte)      
6
  TIMSK |= (1<<TOIE0);  //timer interupt an
7

8
  ms=0;      //zähler initial
9
  
10
  while(1){
11
    if(ms==mis){  //gezählte ms (in ISR)= ms vorgabe
12
      ms=0;
13
      break;
14
      }
15
    }
16
  TIMSK |= (0<<TOIE0);  //timer interrrupt aus  
17
}

und
1
ISR(TIMER0_OVF_vect){  //Timer0 overflow ISR = 1khz
2
  TCNT0 |= 0x6;  //vorladen bei 6 (noch 250 schritte)
3
  ms++;    //milli sec zählen  
4
}

das funktioniert soweit auch.

Aber:

Wie viel Zeit geht durch das Starten und Initialisieren des Timers 
verloren?
Wenn ich das nun mit einem zweiten Timer messe, z.B. mit einem 16 bit 
Timer mit Prescaler 1 könnte man doch recht genau herausbekommen wie 
lange der Timer0 läuft oder?
Moderator Persönliche Seite
Daniel Rau wrote:

> Wie viel Zeit geht durch das Starten und Initialisieren des Timers
> verloren?

Falls du damit die Registerzuweisungen meinst: 3 Takte, sind ja nur
3 OUT-Befehle am Ende.

Falls du das Nachladen der Zeitkonstante im Overflow-Handler meinst,
das kannst du an Hand des Datenblatts sowie des generierten
Assemblercodes nachzählen.  Es vergeht die Zeit für die Interrupt-
annahme (wimre sind das 10 Takte einschließlich des Sprungs zur ISR)
und dann die des ISR-Prologs, bis das Neusetzen von TCNT0 erfolgt.

Generell keine sonderlich empfehlenswerte Methode.  Sowie es mehr als
diesen einen Interrupt im System gibt, entsteht potenziell ein Jitter
in dieser Interrupannahmezeit.  War früher nicht anders möglich, aber
bei aktuellen AVRs implementieren die meisten Zähler den CTC-Modus
(clear timer on compare match), mit dem man einen vergleichbaren
Effekt rein in der Hardware realisieren kann (und damit ganz ohne
das Erbsenzählen der ISR-Takte).
OP
Ja es gibt mehr als diesen einen Interrupt den ich benutze,
also um genau zu Wissen wie lange die Cpu braucht, seh ich mir einfach
die Assembler Befehle an, gute Idee, die Zeiten für die Ausführungen 
stehen ja im Datenblatt...

Leider habe ich die Timer die ctc können schon für etwas anderes in 
Planung.

Blöde frage, wie seh ich mir den erzeugten Assembler Code an? Ich 
benutze KontrollerLab...

Danke für den Denkanstoß
OP
Hm, ja so gesehen
hat man wohl noch ne menge Platz bevor man in den promille Fehler 
Berreich kommt :)
Brauche das eigentlich nur um bischen Zeit vergehen zu lassen. 
Interessierte
mich trozdem halt wie lange das so dauert...

AVR Studio is ja nur für Windows, das möchte ich nicht so...
Gibt bestimt für Linux nen hex to asm Konverter oder so
Moderator Persönliche Seite
Du kannst dir mit avr-objdump -d das gesamte ELF-File disassemblieren
lassen, oder du kannst den Compiler mit -S (statt -c) aufrufen, damit
er dir den generierten Assemblercode (in einer Datei mit der Endung
.s) direkt erzeugt.  Normalerweise ist dieser Assemblercode nur eine
Zwischenstufe, die er dann dem Assembler selbst übergibt.

Bezüglich des möglichen Jitters wäre es wichtig, dass alle anderen
ISRs entweder so kurz wie möglich sind oder aber zumindest die
Interrupts so frühzeitig wie möglich wieder freigeben, damit die
Timer-ISR zum Zuge kommen kann.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.