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
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
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....
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.