硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2254|回复: 6
收起左侧

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

[复制链接]

6

主题

13

回帖

31

积分

新手上路

积分
31
发表于 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能让任何一个任务都实时修改并运行,请问这种情况应该怎么规划任务关系比较好呢,求指导
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2019-1-29 14:46:45 | 显示全部楼层
两个任务没法整到一个里面吗
回复

使用道具 举报

6

主题

13

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-1-29 15:38:13 | 显示全部楼层
eric2013 发表于 2019-1-29 14:46
两个任务没法整到一个里面吗

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

6

主题

13

回帖

31

积分

新手上路

积分
31
 楼主| 发表于 2019-1-31 12:05:00 | 显示全部楼层
本帖最后由 kaxilion 于 2019-1-31 12:06 编辑
eric2013 发表于 2019-1-30 11:09
现在还没有搞明白你要实现什么功能,仅需说明下你要实现什么功能即可,无需说明你自己的实现框架。

功能很简单,用一个中断触发机器按照进行一种方式工作1,然后不触发的时候又是另外一种方式工作2,常态是不触发,一直工作2,我看过例程,例程处理也是设置一个延时,如果延时内中断没信号过来,就执行超时的程序行,我感觉超时这里配置成我说的工作2,接收到中断发过来的信息而运行的程序部分替换成工作1就好了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2019-2-1 00:39:56 | 显示全部楼层
kaxilion 发表于 2019-1-31 12:05
功能很简单,用一个中断触发机器按照进行一种方式工作1,然后不触发的时候又是另外一种方式工作2,常态是 ...

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

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2019-2-18 11:17:02 | 显示全部楼层
好像就是state++和state--的问题啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 10:51 , Processed in 0.177391 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表