gpt4 book ai didi

c - 通过 RTOS 实现状态机

转载 作者:行者123 更新时间:2023-11-30 20:53:21 31 4
gpt4 key购买 nike

我是初学者,我对 RTOS 中的任务和状态机之间的区别有点困惑。让我们举一个我愿意实现的状态机的例子:

enum states{
READY_STATE
RUNNING_STATE
BLOCKED_STATE
FINISHED_STATE
}STATES;

如果可以在不使用任何 RTOS 的情况下通过事件/中断枚举此状态机,那么使用 RTOS 和创建任务有什么好处?

最佳答案

RTOS 用于通过将不相关的任务放置在不同的程序中来处理程序复杂性,以便它们可以看似同时执行。例如,将应用程序逻辑、GUI 和串行通信拆分为 3 个独立的进程可能是有意义的。

这是否提供真正的多处理或多处理模拟,取决于可用的 CPU 核心数量。传统上,大多数RTOS都是在单核上进行多处理模拟。

另一方面,状态机是一种程序设计规范,它可能具有也可能没有分解复杂性的目的。所以和RTOS没有必然的关系。

但是,您可以将“穷人的 RTOS”设计为一种有限状态机,其中您为每个状态指定一个特定的时间片,并期望该状态在时间结束之前完成(否则看门狗会咬人)。这可以提供与 RTOS 相同的实时行为,但只有一个堆栈并且没有“真正的”上下文切换。

选择裸机还是 RTOS 在很大程度上取决于程序的复杂性。除非原始程序设计是最先进的(很少是),否则当裸机程序增长到 50k-100k LOC 之间时,它们往往会变得很痛苦。在这些情况下,从一开始就选择 RTOS 可能会更明智。

另一方面,如果您认为程序不会变得那么大,那么裸机就更容易使用。 RTOS 引入了额外的复杂性,而额外的复杂性又引入了错误。黄金法则是始终保持软件尽可能简单。

关于c - 通过 RTOS 实现状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49317145/

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