Archiv verlassen und diese Seite im Standarddesign anzeigen : Deadline festlegen
svetlana
01-12-2006, 12:06
Hallo,
ich beschäfige mich seit kurzem mit RTAI.
Echzeit bedeutet ja garantierte Antwortzeiten.
Wie kann ich Deadline für ein Task setzen, damit ich sehen kann, ob diese Zeit irgendwann überschritten wird?
Danke
svetlana
peschmae
01-12-2006, 16:56
Hmm, ich kenne RTAI ja noch überhaupt nicht. Hab mal etwas die Doku durchgeblättert - sieht noch ganz interessant aus.
Nachdem was ich gelesen habe vermute ich folgendes (um gesicherte Erkenntnisse zu kriegen musst du wohl einen der RTAI Entwickler fragen):
Es gibt keine von dir fixierbaren Deadlines. Welcher Prozess gerade aufgerufen wird läuft wohl über die Prioriäten - aber da gibts ja verschiedene Scheduler.
Scheint wirklich so zu sein:
Q: How can I detect a periodic task overrun condition in order to take appropriate action to prevent the machine from freezing? For example, if the execution time exceeds the task period.
A: As taken from the mailing list response dated Oct 29, 2006 to the "periodic task overruns" thread:
RT_TIME wkupt = rt_get_time;
while(1) {
if ((wkptt += myperiod) >= rt_get_time()) {
... overrunning, apply your policy;
} else {
rt_wait_until(wkupt);
}
/* some task code here */
}
Thus, you first check if the current time is greater than the previous wake-up time plus the task period.
http://rtai.dk/cgi-bin/gratiswiki.pl?LXRT_FAQs
MfG Peschmä
svetlana
04-12-2006, 13:20
Hallo Peschmä,
danke für deine Antwort.
Ich habe auch folgendes gefunden:
while(1) {
if (next_period() >=3D rt_get_time()) {
... overrunning, apply your policy;
} else {
rt_wait_tak_period();
}
}
und aus RTAI-API
RTIME next_period ( void )
Get the time a periodic task will be resumed after
calling rt_task_wait_period.
this function returns the time when the caller task will run next.
Combined with the appropriate rt_get_time function()
it can be used for checking the fraction
of period used or any period overrun.
Returns:
Next period time in internal count units.
:confused:
Was ich nicht finden kann: wo ist "3D" deklariert?
Ändert es vielleicht die Auflösung des Rückgabewertes von rt_get_time()?
gruss
svetlana
peschmae
04-12-2006, 22:37
Ich vermute das ist ein ausrutscher und sollte dort gar nicht stehen. Bei beiden Funktionen steht "in internal count units" - da muss man nichts skalieren denke ich. Schon gar nicht mit Hilfe eines kruden Makros oder so.
Ausserdem: Der einzige Hit auf der Suche nach 3D auf der Rtai Website bezieht sich auf Mesa :D
MfG Peschmä
svetlana
05-12-2006, 07:29
Denkst du, hier ist es auch nur ein Tippfehler?
https://mail.rtai.org/pipermail/rtai/2002-December/001812.html
gruß
svetlana
peschmae
05-12-2006, 09:34
Ok, überzeugt :D
Musst du halt wohl oder übel alle Header durchgucken oder -greppen. :)
MfG Peschmä
svetlana
05-12-2006, 10:33
ja das habe ich schon, bloss in diesen H-files ist nirgendwo 3D deklariert:( .
in diesem Beispiel ist Kernel 2.4.19 benutzt, vielleicht in dem Kernel 2.6.14 ist es irgendwo anders oder gar nicht deklariert.
wenn ich bloss wüsste was dieses Makro macht, würde ich eine Funktion schreiben, die dasselbe macht: Da brauche ich keine Deklaration von 3D.
gruß
svetlana
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.