混合使用实时操作系统和周期性执行程序是否有意义?

时间:2020-03-06 14:32:37  来源:igfitidea点击:

在一个小型嵌入式系统项目中,我们有一些要在线程中运行的代码,因此我们选择在嵌入式RTOS(eCos)之上进行构建。

以前,我们在main()中使用了循环执行程序来驱动每个都以状态机实现的任务。对于某些任务,我们遇到了需要将任务分解为许多细粒度状态的问题,从而使代码变得更加复杂。

切换到RTOS时,我们发现,如果我们给每个单独的任务分配自己的线程,则每个线程堆栈的内存使用量会迅速增加。 (我们只有64k,并且需要用于通信缓冲区的内存)

我们正在考虑对执行通信任务使用踏步,对循环执行人员使用其他线程。循环执行程序将驱动其他逻辑任务。

这样混合RTOS和周期性执行程序是否有意义?

解决方案

这是一个完全有效的设计。
在我们的产品之一中,我们使用了类似的设计,其中异步I / O通道(TCP / IP,2个串行流)在各自的任务中,而我们有一个"主要"任务,它将负责多个功能领域。

将任务视为只是一种分区机制,可以简化设计。

这是一个有效的设计,但我想我根本错过了拥有该操作系统的原因。

我们打算使用OS的哪些功能?

从可获得的信息看来,我们最终将把任务的复杂性转移到新的主循环中。

是的,在一个运行多个"任务"的OS线程中安排循环执行程序是很有意义的。实际上,除非有两个任务与调度需求发生冲突(一个任务需要阻塞,一个任务的优先级高于另一个任务,而低优先级的任务要花很长时间执行,等等),否则我建议将它们放在同一线程中。

在使用没有内存保护的轻量级RTOS的情况下尤其如此:单独的线程没有比一个线程更安全(没有对地址空间的MMU保护),事实上,由于存在以下问题,它们可能会更加危险:并发保护的需求更大。即使IPC方案很健壮并且不容易被程序员滥用,它的开销通常也不为零,因此避免使用它可能会导致性能提高。