首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该在STM32 HAL中断回调中使用xSemaphoreGiveFromISR()还是xSemaphoreGive()?

我应该在STM32 HAL中断回调中使用xSemaphoreGiveFromISR()还是xSemaphoreGive()?
EN

Stack Overflow用户
提问于 2021-11-08 07:41:04
回答 2查看 119关注 0票数 1

我在FreeRTOS中实现了一个故障任务,它接受一个用作故障标志的二进制信号量。该故障标志由HAL_I2C_ErrorCallbackHAL_UART_ErrorCallback等STM32 HAL错误回调函数触发。如果发生错误,错误回调函数将调用signalFault()函数,该函数将通过提供二进制信号量来引发故障标志。

我的问题是:我的signalFault()函数是否被视为中断服务例程,因为它在HAL ISR错误回调中被调用?是否需要在signalFault()函数中调用xSemaphoreGiveFromISR()xSemaphoreGive()函数来抛出故障标志?

EN

回答 2

Stack Overflow用户

发布于 2021-11-08 23:52:42

如果您不信任我们,那么简单地检查您是否在中断中。它将是100%安全的。

代码语言:javascript
复制
int isInISR( void ) 
{
    return ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK );
}

在你的代码中:

代码语言:javascript
复制
if(isInISR()) xSemaphoreGiveFromISR(...);
else xSemaphoreGive(...);
票数 1
EN

Stack Overflow用户

发布于 2021-11-08 08:54:15

当然,如果调用上下文是ISR,则应该使用xSemaphoreGiveFromISR。从ISR调用的函数仍然是ISR的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69880020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档