kaxilion 发表于 2019-1-29 14:20:59

请问这种控制方式怎么规划任务之间的关系比较好呢

本帖最后由 kaxilion 于 2019-1-29 14:24 编辑

原来是裸机的程序,都用全局变量,现在想用RTOS去实现,具体流程是这样的
全局变量state;
任务一
{
    switch(state)
    {
      case 1:
             动作A;
             break;
      case 2:   
             动作B;
             break;
      case 3
            动作C;
            break;
       }
       state++;
       if(state == 4)state = 0;
       delay(10);
}

任务二
{
    switch(state)
    {
      case 1:
             动作C;
             break;
      case 2:   
             动作B;
             break;
      case 3
            动作A;
            break;
       }
       state++;
       if(state == 4)state = 0;
       delay(10);
}

任务二是在任务一运行的过程中,如果接触到外部中断,中断里面发信号量去触发的,然后任务二根据当前state的值对号入座,执行到state = 0为止,就切回任务一,两个任务是有且只有一个在运行的,由于两个任务都是靠state这个全局变量去跑的,我考虑过如果切换到任务二的时候,让任务一挂起,但是挂起的时候state应该也保存了吧?这样我任务二state=0的时候再恢复任务一,任务一的state值不就恢复之前保存的值?我这里是希望state能让任何一个任务都实时修改并运行,请问这种情况应该怎么规划任务关系比较好呢,求指导:)

eric2013 发表于 2019-1-29 14:46:45

两个任务没法整到一个里面吗

kaxilion 发表于 2019-1-29 15:38:13

eric2013 发表于 2019-1-29 14:46
两个任务没法整到一个里面吗

两个任务分开是当初为了想两套流程独立走,出问题好排查,混一起其实可以,之前也试过这么做,中断发送标志位来确认在哪个state上执行什么样的动作,不过这样一来该怎么接收中断的消息好呢?这个任务肯定是通过delay一直在跑的,不能挂起来等消息的.
还是像例程那样,设置一个延时延时判定,要是超时就正常跑任务,在时间内接收到中断的信号就立马用标志位去跑一遍然后清标志位,这样?感觉又变得和裸机差不多咯,不知道正常这种情况是怎么处理比较大众化点

eric2013 发表于 2019-1-30 11:09:37

kaxilion 发表于 2019-1-29 15:38
两个任务分开是当初为了想两套流程独立走,出问题好排查,混一起其实可以,之前也试过这么做,中断发送标 ...

现在还没有搞明白你要实现什么功能,仅需说明下你要实现什么功能即可,无需说明你自己的实现框架。

kaxilion 发表于 2019-1-31 12:05:00

本帖最后由 kaxilion 于 2019-1-31 12:06 编辑

eric2013 发表于 2019-1-30 11:09
现在还没有搞明白你要实现什么功能,仅需说明下你要实现什么功能即可,无需说明你自己的实现框架。
功能很简单,用一个中断触发机器按照进行一种方式工作1,然后不触发的时候又是另外一种方式工作2,常态是不触发,一直工作2,我看过例程,例程处理也是设置一个延时,如果延时内中断没信号过来,就执行超时的程序行,我感觉超时这里配置成我说的工作2,接收到中断发过来的信息而运行的程序部分替换成工作1就好了

eric2013 发表于 2019-2-1 00:39:56

kaxilion 发表于 2019-1-31 12:05
功能很简单,用一个中断触发机器按照进行一种方式工作1,然后不触发的时候又是另外一种方式工作2,常态是 ...

这里面有个问题就是,中断来了后是否需要立即切换到工作方式1,不管工作方式2处于何种状态

BG4RFF 发表于 2019-2-18 11:17:02

好像就是state++和state--的问题啊
页: [1]
查看完整版本: 请问这种控制方式怎么规划任务之间的关系比较好呢