esp32 SemaphoreTake 与 SemaphoreTakeFromISR

esp32 SemaphoreTake vs SemaphoreTakeFromISR

我想在 esp32 上校准 xh711。此任务必须通过 iSR 的购买按钮或在需要时由程序在初始启动时触发。

按下按钮时我必须使用 xSemaphoreGiveFromISR() 但在程序自动调用时我可以使用 xSemaphoreGive()

我的问题是我应该使用哪个函数来识别触发器?很明显,对于按钮,我必须使用 xSemaphoreTakeFromISR() 但是在程序自动触发时,我应该使用 xSemaphoreTake() 还是我可以使用 ISR 版本也没有问题?

可以从中断服务程序中调用以FromISR结尾的函数。常规函数只能在任务上下文中使用。

请参阅 xSemaphoreGive and xSemaphoreGiveFromISR 的文档。

有几个单独的功能的原因,例如:

  • Non-ISR函数需要使用critical sections.
  • ISR 函数有一个参数 pxHigherPriorityTaskWoken 用于上下文切换。
  • 一些 non-ISR 函数具有 xTicksToWait 参数以允许任务在等待资源可用时休眠。 ISR 函数没有此参数,因为 ISR 无法被阻止。