在一个小型嵌入式系统项目中,我们有一些代码,我们希望在一个线程中运行,因此我们选择在嵌入式RTOS(eCos)之上构建.
以前,我们在main()中使用了一个循环执行程序,它驱动每个作为状态机实现的任务.对于某些任务,我们遇到了需要将任务分解为许多细粒度状态的问题,从而使代码更加复杂.
当切换到RTOS时,如果我们给每个单独的任务提供自己的线程,我们发现每个线程堆栈的内存使用量会很快增加.(我们只有64k,需要内存用于我们的通信缓冲区)
我们正在考虑使用轮胎进行通信任务,并考虑使用其他线程进行循环执行.循环执行程序将驱动其他逻辑任务.
这样混合RTOS和循环执行是否有意义?
这是一个完全有效的设计.
在我们的一个产品中,我们使用了类似的设计,其中异步I/O通道(TCP/IP,2个串行流)在他们自己的任务中,我们有一个"主要"任务,负责多个功能区域.
将任务视为一种分区机制,可以简化您的设计.