Программные прерывания могут использоваться для завершения задачи прерывания с более низким приоритетом. Временному критическому коду часто присваивается высокий приоритет прерывания, чтобы избежать слишком большой задержки. Как только критическая часть синхронизации закончена, могут возникнуть дополнительные задачи, которые могут быть слишком критичными по времени для основного цикла, но не настолько важными, чтобы задерживать другие высокоприоритетные прерывания. Это может быть выполнено с помощью программного прерывания с более низким приоритетом.
Например, предположим, что у вас есть несколько шаговых двигателей, каждый со своим таймером. Прерываниям таймера дают высокий приоритет, чтобы минимизировать пошаговое дрожание. Наиболее важной задачей, связанной с синхронизацией, может быть простая установка или очистка шагового импульса или продвижение фазных выходов. Могут потребоваться дополнительные функциональные возможности, такие как вычисление линейных ускорений, обработка датчиков и т. Д. Поскольку это необходимо обрабатывать на каждом этапе, может быть нецелесообразно обрабатывать это из main (), поскольку синхронизация основного цикла может быть слишком продолжительной. Эти дополнительные задачи могут быть обработаны программным прерыванием с более низким приоритетом, чтобы не увеличивать задержку других высокоприоритетных шаговых каналов.
В чем разница между программным прерыванием и функцией?
Функция вызывается немедленно, откуда бы она ни вызывалась, и не изменяет текущий уровень приоритета прерывания, если вызывается из прерывания. Программное прерывание - это триггер прерывания, который будет вызывать это прерывание при достижении его приоритета. Если вызов функции был вставлен в конце высокоприоритетного прерывания, функция будет находиться внутри этого высокоприоритетного объекта. Путем запуска программного прерывания с более низким приоритетом и последующего возврата из высокоприоритетного прерывания функциональность вызывается с новым (более низким) приоритетом.