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 无法被阻止。
我想在 esp32 上校准 xh711。此任务必须通过 iSR 的购买按钮或在需要时由程序在初始启动时触发。
按下按钮时我必须使用 xSemaphoreGiveFromISR() 但在程序自动调用时我可以使用 xSemaphoreGive()
我的问题是我应该使用哪个函数来识别触发器?很明显,对于按钮,我必须使用 xSemaphoreTakeFromISR() 但是在程序自动触发时,我应该使用 xSemaphoreTake() 还是我可以使用 ISR 版本也没有问题?
可以从中断服务程序中调用以FromISR
结尾的函数。常规函数只能在任务上下文中使用。
请参阅 xSemaphoreGive and xSemaphoreGiveFromISR 的文档。
有几个单独的功能的原因,例如:
- Non-ISR函数需要使用critical sections.
- ISR 函数有一个参数
pxHigherPriorityTaskWoken
用于上下文切换。 - 一些 non-ISR 函数具有
xTicksToWait
参数以允许任务在等待资源可用时休眠。 ISR 函数没有此参数,因为 ISR 无法被阻止。