www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TNKernel: Task soll vorzeitig Rechenzeit abgeben


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Ich benutze den TNKernel, eigentlich ein sehr gutes RTOS, aber ich habe 
ein kleines Problem. Ich habe eine Task am Laufen, die nur ein paar 
Polling-Aktionen macht und daher nicht so viel Rechenzeit braucht. Ich 
möchte nun gern erreichen, daß diese Task nach jedem Schleifendurchlauf 
den Rest ihrer Zeitscheibe abgibt, also so, daß eine andere Task sofort 
dran kommt.
So wie es jetzt ist, verbrät sie ihre vollen 20ms sinnlos in der 
Schleife.
Weiß jemand wie man das machen kann?
BTW, Ich habe vor einigen Tagen auch schon den Entwickler angemailt, 
aber bis jetzt noch keine Antwort erhalten.

Danke,
 Peter

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In der Dokumentation steht

> When the currently running task loses its claim for executing
> (by the issuing of a system call or interrupt), a context
> switch is performed. The current context (processor registers,
> stack pointer, etc.) is saved and the context of another task
> is restored.

Das interpretiere ich so, daß Du zum "Zurückgeben" des ungenutzten 
Zeitscheibenrests nur eine Systemfunktion aufrufen musst.

Das ist unter anderen* (RT)OSen auch so realisiert, dort dient Sleep(0) 
diesem Zweck.

Allerdings verhält sich die hier geeignet erscheinende Funktion 
tn_task_sleep() etwas anders als erwartet; die Angabe von 0 als Argument 
ist nicht zulässig.

Vielleicht findet sich ja eine andere Systemfunktion, die sich 
entsprechend harmlos verhält - ich programmiere selbst nicht mit 
TNKernel.

Erfolg!


*) So beispielsweise bei OS-9/68K und -man staune!- Win32

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus, danke für deine Antwort.
Ja, Sleep(0) kenne ich auch von Win32. Der TNKernel hat interne 
Funktionen namens tn_switch_context() und tn_switch_context_exit(), mit 
denen sowas angeblich möglich sein soll. Aber leider funzt nichts davon. 
tn_switch_context() tut einfach gar nichts (die Task läuft unbeeindruckt 
weiter), während tn_switch_context_exit() die Task lahm legt, so daß sie 
gar nicht mehr dran kommt. Wenn sich der Entwickler nicht meldet, werde 
ich wohl den TNKernel selber modifizieren müssen. Mir wird schon was 
einfallen....

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.