Организовано системное прерывание по таймеру (каждые 8мс). В нем делаю всякие дела (антидребезг, большие временные интервалы, и т. д). Хочу в этом прерывании организовать программный счетчик таймаута. Но так, чтобы в случае наступления таймаута меня перекидывало в нужную мне точку программы, в начало некого цикла. Предлагать использовать ватчдог-таймер не надо. Он будет перекидывать в начало программы, а мне это не нужно. Я вот что-то призабыл. Когда писал в асме вроде бы можно было сделать любой переход из любой точки. Или по метке, или непосредственно задавая значение (приращение) программного счетчика. Сейчас делаю программу в С, и вот тут, как раз возникли трудности. goto по метке не работает. Работает только в пределах одной функции. А как из прерывания? Ведь прерывание - аппаратная функция и может возникнуть в любой момент выполнения основной программы. Т. е точка входа и выхода неизвестна.
Нутром понимаю, что сделать можно. Но как?!
|