Hilfe zu wait - Funktion

Gast #572147
Lesenswert?

Hallo, ich möchte auf meinem Embedded-PC, auf dem ein 
Echtzeitbetriebssystem läuft, eine zusätzliche wait - Funktion 
realisieren.
1
void Wait(int MikroSec)
2
{
3
 int i=0,j=0; 
4
 for(i=0; i<(MikroSec * LOOPS_PER_MIKROSEC); i++)
5
  {
6
  j++;
7
  }
8
}

Das Problem ist hier, dass diese Funktion wegoptimiert wird.
Egal was ich dieser Funktion übergebe, es entsteht kein Warten.
Wie könnte ich dies in C realisieren, so dass die wait - Funktion nicht 
wegoptimiert wird? Das Echtzeitbetriebssystem benutzt unter anderem die 
windows.h und time.h
Gast #572186
Lesenswert?

Als Betriebssoftware wird die ETS - TNT Embedded ToolSuite von PharLap 
eingesetzt. Diese ist ein 32 bit Real-Time Operating System (RTOS), das 
sich durch Unterstützung eines Teils der WIN32 API leicht in Windows 
Systeme integrieren lässt.
Gast #572188
Lesenswert?

FÜr Testzwecke habe ich jetzt mal "volatile" benutzt. Siehe da, ich 
bekomme die entsprechende Verzögerung. Wenn ich eine Variable mit 
volatile deklariere, kostet dies jetzt zusätzlich Zeit?
1
void Wait(int MikroSec)
2
{
3
 volatile int i=0,j=0; 
4
 for(i=0; i<(MikroSec * LOOPS_PER_MIKROSEC); i++)
5
  {
6
  j++;
7
  }
8
}
Gast #572258
Lesenswert?

>Wenn ich eine Variable mit volatile deklariere, kostet dies jetzt
> zusätzlich Zeit?

Ja. Aber wenn du eine genau vorgegebene Menge an Zeit pro 
Schleifendurchlauf haben willst, führt sowieso nichts an Assembler 
vorbei.

> und er die als echte Variable im RAM ablegt und
> nicht in irgendeinem Arbeitsregister des Prozessors.

Nicht nur das. Es sagt vor allem auch, daß der Zugriff auch tatsächlich 
erfolgen soll und nicht wegoptimiert werden darf.
Gast #573910
Lesenswert?

> Es ist eine unglaublich schlechte idee, unter einem
> Echtzeitbetriebssytem Zeit verbraten zu wollen.

Nicht unbedingt. Manchmal dauert es zu lange, den Prozessor abzugeben 
und zu warten, bis man wieder drankommt. Außerdem verbraten zwei 
Taskwechsel auch Rechenzeit. Für sehr kurze Wartezeiten ist deshalb so 
eine Schleife manchmal besser.
Gast #576679
Lesenswert?

Ja - das stimmt. Aber ein gutes Echtzeitbetriebsystem weiß das auch - 
und bietet dann eine wait() methode an die anhand der Wartezeit 
entscheidet wie gewartet werden soll. (Ob sich ein Taskwechsel lohnt 
oder nicht)

- nachgucken OB es sowas gibt schadet bestimmt nicht.

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