Цитата(dxp @ Dec 26 2007, 15:40)

А что фактически происходит?
Так в каком процессе висит прога? Должна в IdleProcess.
Cобственно, программка простая, потому как тестовая:
OS_PROCESS void TProc1::Exec()
{
for(;;)
{
Led1=1;// Led1, Led2- выводы портов, на коих сидят светодиоды, 1-горит, 0- тухнет
Led2=0;
Sleep(20);
}
}
OS_PROCESS void TProc2::Exec()
{
for(;;)
{
Led1=0;
Led2=1;
Sleep(1000);
}
}
Полагаю, что перемигивание диодов (де-факто) и свидетельствет о переключении и работе процессов. Хотя теоретически, после Sleep(20); и следующего за этим Sleep(1000);- все должны бы баиньки и прога по крайней мере уже не мигала б.
Цитата(Сергей Борщ @ Dec 26 2007, 20:44)

Посмотрите OS::TKernel::SystemTimer(). Именно там вызывается SetProcessReady(), а перепланировка происходит в момент выхода из прерывания в деструкторе TISRW.
SetProcessReady(), конечно, вызывается, но планировщика там нет! А TISR_Wrapper
тож вроде с планировщиком дело не имеет, -иначе получается, что перепланирование процессов происходит с каждым тиком системотаймера.