Можно и более жёско

поступать (что-то на подобии исключений), ручками раскрутить/подправить стек так чтобы возврат из обработчика прерывания был совершён в точку вызова процедуры в которой возможно зависание, ну и конечно нужно чтобы код ошибки эта функция возвратила отличный от OK.
Таким макаром будут не нужны никакие маячащие в коде флаги лишь небольшой пролог-эпилог в виде:
Код
ENTER_EXCEPTION_BLOCK();
...
LEAVE_EXCEPTION_BLOCK();
Всё равно таймер нужно было где-то запускать и останавливать.
Остаётся вопрос как определить границы стекового фрейма функции. Может у кого есть идеи (в прологе фигачить что-то уникальное в стек)?
Я тоже заинтересован в подобного рода механизме. Предлагаю автору публиковать свои результаты, ну а мы по мере свободного времени тоже поучаствуем.