如何在 FreeRTOS 中使用互斥量?

How to use a mutex in FreeRTOS?

我有一个共享资源,由一个ISR和一个普通任务共享。它需要被序列化访问。看来 BinarySemaphore 和 MutexSemaphore 都不符合我的需求。应该使用哪个实用程序?

谢谢,

在中断中使用互斥通常不是一个好主意。首先,如果中断是运行,那么它不能被任务中断,所以只需要一种保护方式。其次,如果中断不能获得互斥锁,那么它就不能阻塞等待它,所以它必须在没有访问资源的情况下退出。

如果中断需要做一些冗长的事情,请考虑将中断处理推迟到任务,或者使用 direct to task notification, or using the centralised deferred interrupt processing 功能推迟到您自己的任务之一。

如果只是必须在中断中使用信号量,请使用二进制信号量,而不是互斥量,因为互斥量具有优先级继承机制,在中断中逻辑意义不大(优先级继承是关于任务继承彼此的任务优先级, 但中断不是任务,因此没有任务优先级)。