gpt4 book ai didi

synchronization - 如何让许多 FreeRTOS 任务等待彼此完成初始化

转载 作者:行者123 更新时间:2023-12-05 01:43:05 25 4
gpt4 key购买 nike

我有一个 init 任务和几个辅助任务。在某些时候,工作人员必须等待 init 完成一些设置。我正在尝试使用二进制信号量来执行此操作。

当调度程序启动时,所有任务都准备好运行。因此,为了保证工作人员等待,信号量必须在调度程序启动之前“由 init 任务获取”。 (否则工作人员甚至可以在 init 被安排之前就获得信号量。)

我该怎么做?或者我还应该如何解决这个问题?

最佳答案

如果你只有一个工作任务,二进制信号量就可以工作。您可以将信号量创建为“不可用”/“已使用”,并且 init 任务将为 xSemaphoreGive初始化完成时的信号量,通知单个工作任务初始化已完成。但是,当您有多个任务时,只有其中一个能够获取/获取信号量。

计数信号量可以工作。信号量的容量应该等于工作任务的数量,并且它应该以空开始。作为系统设计者,您知道 init-task 被设计为在启动时拥有底层资源,因此 init-task 不必在第一次初始化时获取信号量。初始化后,你应该调用xSemaphoreGive每个 worker 一次。何时/如果您想重新初始化,请调用 xSemaphoreTake每个 worker 任务一次。为此,worker 必须周期性地“释放”信号量,然后重新获取它。

Event Group如果您只初始化一次,也可以使用。你的初始化任务可以使用 xEventGroupSetBits表示初始化完成。您的工作任务可以使用 xEventGroupWaitBits等待初始化任务完成。

关于synchronization - 如何让许多 FreeRTOS 任务等待彼此完成初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50488701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com