如何在FreeRTOS中使用互斥?

时间:2015-07-17 11:18:17

标签: mutex semaphore freertos

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

谢谢,

1 个答案:

答案 0 :(得分:0)

在中断中使用互斥锁通常不是一个好主意。首先,如果中断正在运行,那么它不会被任务中断,因此实际上只需要单向保护。其次,如果中断无法获取互斥锁,那么它就无法阻塞等待它,因此它必须在不访问资源的情况下退出。

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

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