-
1. Data: 2010-03-19 20:52:07
Temat: MicroC/OS - II który task ma prioryted równy 1?
Od: "Pszemol" <P...@P...com>
Witam,
szukam właśnie błędu w starym programie pod systemem MicroC/OS-II.
Któryś task wykłada się błędem systemowym - aby stwierdzić który task
dodałem do funkcji która się wykłada kilka instrukcji do wyczajenia
z którego tasku została wywołana:
funkcja()
{
....
OS_TCB tcb;
::OSTaskQuery(OS_PRIO_SELF, &tcb);
i teraz w zmiennej tcb.OSTCBPrio mam Prioryted tasku który zawołał
funkcję.
}
Analizując logi systemowe widzę, że często takie wywołanie raportuje
task o priorytecie 1, podczas gdy w systemie lista tasków zaczyna się
od numeru 5 i kończy na numerze 14. Spodziewam się więc dużo
wpisów od tasków o numerach priorytetów 14 i niżej - i dostaje je,
ale nie spodziewam się wpisu od tasku o numerze poniżej 5 a dostaje
wpis od tasku o numerze 1.
Wiem, że funkcja OSInit() tworzy jeden lub dwa taski: Idle i opcjonalnie
Statistic, ale te taski są tworzone o najniższych priorytetach (duże
numery).
Czy zawołanie OSTaskQuerry zwraca numer tasku 1 może dla obsługi
przerwań? Ktoś się orientuje co to ?
A jeśli tak, to co się stanie gdy w czasie błędu ktoś w takiej funkcji
wywołanej z obsługi przerwań wywoła funkcję systemową
::OSTaskSuspend(OS_PRIO_SELF) czyli będzie próbował ubić
task o priorytecie 1?