本帖最后由 sheepsleepin414 于 2018-12-17 17:23 编辑
请问在中断服务函数中使用 osSemaphoreRelease(xSemaphore12); 这个函数,
然后代码中用 if(xSemaphoreTake(xSemaphore12, (300 /portTICK_PERIOD_MS)) == pdTRUE) 这个判断
是否会出现中断之后反应时间比较长的现象?
(同事留给我维护的代码,FREERTOS刚入门,求大神帮助)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个函数是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;
}
噢,可能我们俩的代码版本不同,我的freertos里没有这个函数的封装。取得信号量反应时间长建议查一下具体时间,另外再调查一下任务调度顺序
这个要看你们的工程有几个任务,怎么调度的,都会影响到响应时间
一周热门 更多>