【STM32 FreeRTOS】优先级翻转与互斥信号量

优先级翻转简介

【STM32 FreeRTOS】优先级翻转与互斥信号量_第1张图片

  1. 任务H和任务M处于阻塞态,等待某一事件的发生。任务L正在运行。
  2. 某一时刻L想要访问共享资源,在此之前他必须现货区对应资源的信号量。
  3. L获得信号量并开始使用共享资源。
  4. 由于H的优先级最高,它等待的事件发生后就抢占了L的CPU使用权。
  5. H开始运行。
  6. H运行过程中也需要使用L正在使用的资源,由于该资源的信号量还被L占用,所以H只能进入阻塞态,等待L释放该信号量。
  7. L继续运行。
  8. 由于M的优先级高于L,当任务M等待的时间发生后就抢占了L的CPU使用权。
  9. M运行。
  10. M运行完成后,将CPU的使用权归还给L。
  11. L继续运行。
  12. L终于释放了信号量,到现在内核才发生还有H这个高优先级任务等待这个信号量。
  13. H终于得到该信号量并接着运行。

在这种该情况下,任务H的优先级实际降到了任务L的优先级水平。因为任务H要一直等待直到任务L释放其占用的那个共享资源。由于任务M剥夺了任务L的CPU使用权,使得任务H的情况更加恶化,这样就相当于任务M的优先级高于任务H,导致优先级翻转。

为什么会发生优先级翻转

因为两个任务(L和H)使用了同一个二值信号量,而在这两个任务之间,又有一个中等优先级的任务M,在这种情况下就容易发生优先级翻转。主要就是因为二值信号量产生的,低优先级任务L占用了信号量没有释放,导致高优先级任务请求信号量时无效,此时高优先

你可能感兴趣的:(STM32,stm32,FreeRTOS)