请教关于FREERTOS中断处理信号量的问题

2019-07-20 04:32发布

本帖最后由 sheepsleepin414 于 2018-12-17 17:23 编辑

请问在中断服务函数中使用                osSemaphoreRelease(xSemaphore12);  这个函数,
然后代码中用        if(xSemaphoreTake(xSemaphore12, (300 /portTICK_PERIOD_MS)) == pdTRUE)  这个判断
是否会出现中断之后反应时间比较长的现象?
(同事留给我维护的代码,FREERTOS刚入门,求大神帮助)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
sheepsleepin414
2019-07-20 13:18
HCHDaLeiGe 发表于 2018-12-18 09:11
中断里操作freertos的函数会进断言,  osSemaphoreRelease(xSemaphore12) 这个函数是怎么实现的?
if(xSe ...

这个函数是ST封装的:
/**
* @brief Release a Semaphore token
* @param  semaphore_id  semaphore object referenced with ef osSemaphore.
* @retval  status code that indicates the execution status of the function.
* @note   MUST REMAIN UNCHANGED:  osSemaphoreRelease shall be consistent in every CMSIS-RTOS.
*/
osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)
{
  osStatus result = osOK;
  portBASE_TYPE taskWoken = pdFALSE;
  
  
  if (inHandlerMode()) {
    if (xSemaphoreGiveFromISR(semaphore_id, &taskWoken) != pdTRUE) {
      return osErrorOS;
    }
    portEND_SWITCHING_ISR(taskWoken);
  }
  else {
    if (xSemaphoreGive(semaphore_id) != pdTRUE) {
      result = osErrorOS;
    }
  }
  
  return result;
}

一周热门 更多>