这是一个用于提升中断优先级的函数。在ARM Cortex-M架构中,有一个基于BASEPRI寄存器的中断优先级控制机制。在执行一个中断处理程序时,系统会自动将当前中断优先级设置为该中断的优先级,以避免其他中断打断当前正在执行的中断处理程序。然而,有时候我们需要临时提升中断优先级,以防止其他中断打断我们的关键代码。这时候就可以使用vPortRaiseBASEPRI函数。

该函数的实现非常简单,就是将ulNewBASEPRI设置为configMAX_SYSCALL_INTERRUPT_PRIORITY,然后通过汇编指令将该值写入BASEPRI寄存器。由于写入寄存器会有一定的延迟,因此使用了dsb和isb指令来确保写操作完成后再继续执行。这样就可以临时提升中断优先级,执行关键代码,然后再通过另一个函数vPortResetBASEPRI将中断优先级恢复到正常状态。

解释一下:static portFORCE_INLINE void vPortRaiseBASEPRI void uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;__asmmsr basepri ulNewBASEPRIdsbisb

原文地址: https://www.cveoy.top/t/topic/dbaZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录