Цитата(LessNik @ Mar 15 2011, 16:36)

В документации написано, что TEventFlag::SignalISR() "нельзя использовать вне кода обработчика прерываний", так я его и не использую вне обработчика. А вот про TEventFlag::Signal() не написано, что его нельзя использовать в обработчике прерывания.
Вообще-то, фатального поведения вызов Signal() в обработчике прерываний порождать не должен. При этом вызове просто не будет реально вызван планировщик, потому что:
INLINE void Scheduler() { if(ISR_NestCount) return; else Sched(); }
ISR_NestCount инкрементируется в конструкторе класса TISRW, объект которого должен быть объявлен в ISR.
Т.е. негатив тут только в том, что процесс, который ждёт флага, будет переведён в готовые к выполнению только при следующем вызове планировщика, что, конечно, ухудшает время реакции на событие. Но нарушения целостности работы тут не должно возникать.
А вот нехорошести могут происходить, если в обработчике прерываний не завели "обёртку" TISRW. И если это так, то это по-любому ошибка, любой ISR, использующий сервисы ОС, должен содержать объект этого класса.