Имеем: AT91SAM7(X256 - но это уже не важно). Опыт работы с ним пока небольшой. Используем таймер-счетчик. Нужно считать частоту. Т.е. работаем в режиме захвата. Используем прерывание. При этом при прохождении импульсов от 1 до N-1 в обработчике прерываний производим только фильтрацию, а по приходу N-го импульса, необходимо выполнить гораздо большую обработку: фильтрация + собственно вычисление частоты + расчет управляющего(их) воздействия(ий). Причем последняя часть довольно весома. И так по кругу. Так вот вопрос связан с тем, как это все сорганизовать, что б задача расчета в обработчике прерывания не мешала работе самого ТС (подсчет интерчала следующего цикла) и в тго же время, что б решение не было б "тяжелым" по ресурсоемкости. Есть конечно варинт с выставлением флага в обработчике при приходе N-го импульса, с проверкой данного флага в фоновой задаче и выполнением расчетов в фоновой задаче. Но, IMHO, не очень красиво. Может кто-то подскажет что-то более оптимальное и красивое? Не знаю, возможен ли вариант, когда в обработчике прерывания TC генерится программное прерывание, сам обработчик ТС при этом завершает работу, а расчет производится в обработчике программногго прерывания? С уважением.
|