代码之家  ›  专栏  ›  技术社区  ›  Zhang Biao

如何在FreeRTOS中使用互斥锁?

  •  0
  • Zhang Biao  · 技术社区  · 9 年前

    我有一个共享资源,由ISR和一个正常任务共享。需要对其进行序列化访问。似乎BinarySemaphore和MutexSemaphor都不能满足我的需求。应该使用哪个实用程序?

    谢谢

    1 回复  |  直到 9 年前
        1
  •  0
  •   Richard    9 年前

    在中断中使用互斥锁通常不是一个好主意。首先,如果中断正在运行,那么它不能被任务中断,因此只需要单向保护。第二,如果中断无法获得互斥锁,那么它就无法阻止等待它,因此它必须退出而不访问资源。

    如果中断需要做一些冗长的事情,请考虑将中断处理延迟到一个任务,或者使用 direct to task notification ,或使用 centralised deferred interrupt processing 特色

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