Einfache wait Funktion

Gast #2779307
Hallo,

ich habe eine einfache wait-Funktion geschrieben:
1
void wait(const uint16_t val)
2
{
3
    uint16_t cnt = val;
4
    while(cnt--)
5
        ;
6
}

Der Controller ist ein PIC16f und ich benutze die MPLAB X IDE.

Jetzt möchte ich gerne das Verhältnis von Counter zu realer Zeit wissen. 
Mir ist klar, dass ich diese über die Anzahl der Command-cycles für die 
Schleife und den Arbeitstakt berechnen kann(Die Zeit für den 
Funtionsaufruf vernachlässige ich mal, muss nicht besonders genau sein). 
Im Datenblatt steht die Anzahl der Cycles für die einzelnen Assembler 
Kommandos. Jetzt fehlt mir also noch die Info, wie mein Code in 
Assembler aussieht. Woher bekommen ich diese Information?
#2779311
Plip schrieb:

> Jetzt möchte ich gerne das Verhältnis von Counter zu realer Zeit wissen.
> Mir ist klar, dass ich diese über die Anzahl der Command-cycles für die
> Schleife und den Arbeitstakt berechnen kann(Die Zeit für den
> Funtionsaufruf vernachlässige ich mal, muss nicht besonders genau sein).
> Im Datenblatt steht die Anzahl der Cycles für die einzelnen Assembler
> Kommandos. Jetzt fehlt mir also noch die Info, wie mein Code in
> Assembler aussieht. Woher bekommen ich diese Information?

wenn du Glück hast, wird deine wait-Funktion "lichtschnell" sein: Der 
Compiler erkennt dann nämlich, daß im Schleifenrumpf nix passiert und 
optimiert dir diesen weg. Somit ist deine Wait-Funktion immer gleich 
schnell, nämlich nur die (zu vernachlässigende) Dauer des 
Funktionsaufrufs lang.
#2779312
Plip schrieb:
> Hallo,
>
> ich habe eine einfache wait-Funktion geschrieben:
>
1
> void wait(const uint16_t val)
2
> {
3
>     uint16_t cnt = val;
4
>     while(cnt--)
5
>         ;
6
> }
7
>
>
> Der Controller ist ein PIC16f und ich benutze die MPLAB X IDE.
>
> Jetzt möchte ich gerne das Verhältnis von Counter zu realer Zeit wissen.

Bei einem guten Compiler ist das 0.
Der wirft dir das alles nämlich einfach raus, weil es ausser Zeit 
verbraten keinen Zweck erfüllt.


Und PS: wait Funktionen werden überbewertet.
Oft ist in der µC-Programmierung ein 'wait' nicht die Lösung, sondern 
Teil des Problems.
PS2: Die Library, die mit deinem Compiler mitgekommen ist, wird sehr 
wahrscheinlich eine tatsächlich funktionierende wait-Funktion 
beinhalten. Manchmal heißt die auch 'sleep' oder 'delay'
#2779330
Die Laufzeit von C-Code ist unvorhersehbar. Das funktioniert also nur 
zufällig mal.

Besser sind folgende Möglichkeiten:
1. Dein Compiler enthält eine delay.h
2. Du benutzt einen Timer.
3. Du schreibst selber Inline Assembler Macros dafür


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.