Hilfe zu wait - Funktion

Gast #572147
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
Persönliche Seite
Wenn Du ein Echtzeitbetriebssystem verwendest (welches?) dann wird 
dieses sicherlich auch eine eigene Wait-Funktion mit sich bringen, die 
statt Zeit sinnlos zu verbraten, diese anderen Prozessen/Threads 
zugutekommen lässt.
Auf Win32-artigen Betriebssstemen ist dies meistens die Funktion 
"Sleep".

Also: Welches Echtzeitbetriebssystem isses denn?
Gast
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
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
>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
> 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
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

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