Bir kesme görevini daha düşük bir öncelikle bitirmek için yazılım kesintileri kullanılabilir. Çok fazla gecikmeyi önlemek için zamanlama kritik koduna genellikle yüksek bir kesme önceliği verilir. Zamanlama kritik kısmı bittiğinde, ana döngü için çok zamanlama kritik olabilecek, ancak diğer yüksek öncelikli kesintileri tutmak için çok kritik olmayan ek görevler olabilir. Daha düşük öncelikli bir yazılım kesintisini tetiklemek bunu başarabilir.
Örneğin, her biri kendi zamanlayıcısına sahip birden fazla step motorunuz olduğunu varsayalım. Kademeli kesintileri en aza indirmek için zamanlayıcı kesmelerine yüksek öncelik verilir. Zamanlama açısından en kritik görev, bir adım darbesini ayarlamak veya temizlemek veya faz çıkışlarını ilerletmek kadar basit olabilir. Hızlanma rampalarının hesaplanması, sensör işleme, vb. Gibi ek işlevler gerekebilir. Bunun her adımda işlenmesi gerektiğinden, ana döngü zamanlaması çok uzun olabileceğinden bunu main () 'den işlemek uygun olmayabilir. Bu ek görevler, diğer yüksek öncelikli adım kanallarının gecikmesini arttırmamak için daha düşük öncelikli bir yazılım kesmesi ile işlenebilir.
Yazılım kesmesi ile işlev arasındaki fark nedir?
Bir işlev çağrıldığı yerden hemen çağrılır ve bir kesinti denirse geçerli kesinti öncelik düzeyini değiştirmez. Yazılım kesintisi, öncelik geldiğinde kesmenin çağrılmasına neden olacak bir kesme tetikleyicisidir. Yüksek öncelikli bir kesmenin sonuna bir işlev çağrısı eklenirse, işlev bu yüksek öncelikli alanda yer alır. Düşük öncelikli yazılım kesintisini tetikleyerek ve ardından yüksek öncelikli kesintiden dönerek işlevsellik yeni (düşük) öncelikte çağrılır.