OpenEdv-开源电子网

标题: 请问如何中断中给出二值信号量呀? [打印本页]

作者: nigulasizhaosi    时间: 2022-3-20 18:51
标题: 请问如何中断中给出二值信号量呀?
//定时器3中断服务函数
void TIM3_IRQHandler(void)
{
static BaseType_t xHigherPriorityTaskWoken;
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
  TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除中断标志位

  taskENTER_CRITICAL();  //是这样给嘛?

  /*给出二值信号*/
  if( pdPASS == xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken ) )
   portYIELD_FROM_ISR(xHigherPriorityTaskWoken);//如果需要的话进行一次任务切换
  
  taskENTER_CRITICAL();  
  }
}

作者: nigulasizhaosi    时间: 2023-1-13 18:04
直接xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken ) 就可以了,不需要加入临界区。此外,二值信号量要声明为外部变量




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4