原帖 | Jack | 2026-01-25 09:59 | 👍1 | 阅读约1
FreeRTOS中断优先级
老师们,我有个技术问题希望老师们可以解答一下:
1.free RTOS中pendSV中断的优先级设置为最低的(15)。所有的其他中断都可以抢占它,那该如何避免数据竞争问题呢,如正在压栈中被强占了。
2.使用进入临界区是通过设置cpu的BASEPRI寄存器得到的,那是屏蔽的优先级数值>BASE PRI的还是优先级数值<BASE PRI 的呢。一般中断优先级会怎么配置呢,pend SV
配置多少,SysTick配置多少,如果有UART配置多少。才能使得进入临界区后屏蔽该被屏蔽的中断?达到这种效果?
答:
1.我们不会在FreeRTOS不可管理的中断中调用IPC通信,如果非要调用,也会使用FromISR的IPC通信。你说的压栈被抢占了,那么中断也会保存上下文,不影响。
2.屏蔽的是大于BASE PRI的,因为M核中优先级数字越大优先级越高。Pendsv和systick最低,15就行。UART如果需要被屏蔽,需要大于configMAX_SYSCALL_INTERRUPT_PRIORITY,RTOS能管理的中断就是configMAX_SYSCALL_INTERRUPT_PRIORITY以上的(为何更高优先级反而不能调 API,见 老师,低于configMAX_SYSCALL_INTERRUPT_PRIORITY优)。
相关笔记