中断中释放信号量要小心 I am FromISR
以串口中断为例,讲解了如何正确的在中断中释放信号量,其中xSemaphoreGiveFromISR(uart_rx_sem, &taskWoken)为中断释放信号量的函数,portYIELD_FROM_ISR(taskWoken)是切换当前的中断任务,使得接收到信号量的任务马上从就绪态转变为运行态
以串口中断为例,讲解了如何正确的在中断中释放信号量,其中xSemaphoreGiveFromISR(uart_rx_sem, &taskWoken)为中断释放信号量的函数,portYIELD_FROM_ISR(taskWoken)是切换当前的中断任务,使得接收到信号量的任务马上从就绪态转变为运行态
创造两个任务,第一个任务以100ms的速度释放信号量,第二个任务以500ms的速度接收信号量并进行LED翻转,如果按照二值信号量来进行的运行,则肯定会丢失信号量。
该工程为STM32的FreeRTOS工程模板,使用CubeMX配置的。外设只配置了一个UART1,和GPIOA8和GPIOE6。
持之以恒
知无不言
勤写标兵
笔耕不辍
创作能手
新秀勋章
阅读者勋章
新人勋章
技术圈认证