Einfache wait Funktion

Gast #2779307
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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'

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