如何在RTOS中设计模式来管理这些作业?



在电子机械系统中有一些作业,微控制器需要按顺序处理这些作业,每个作业将花费一些时间(例如:电机运行到某个位置)。工作:A→→C→D

以前,我们使用像AVR这样只有一个线程的MCU,我们在状态机中管理这些作业,代码模式如下:

void flow()
{
if (checkCondition())
{
return;
}
switch(state)
{
case A:
actionA();
state = B;
break;
case B:
actionB();
state = C;
break;
...
}
}

在此模式中,在循环中调用函数flow(),一旦状态改变,将设置一些等待条件标志,然后在checkCondition()中检查这些标志。

此模式的缺点:当作业太多时,代码将被"大小写"分割成小块。

现在,我们计划基于STM32+RTOS重新构建软件,我们认为以前的模式可能不是多线程的最佳实践。

在多线程系统中管理这些作业的最佳实践是什么?

使用FIFO(先进先出)寄存器或队列将是首选的设计模式。

高层:

  1. 作业进入并被放置在队列(enqueue)的后面。可以快速连续地将其他作业添加到队列的后面,而不会出现问题。
  2. 队列前面的作业被处理。作业处理所需的时间是无关紧要的。
  3. 当队列前面的作业完成时,它向队列发送一个信号,将其从队列的前面移除(dequeue)
  4. 如果队列不为空,则重复步骤2中的过程。

相关内容

  • 没有找到相关文章

最新更新