找回密码
 立即注册
查看: 405|回复: 2

Free RTOS中阻塞延时任务未完成时,需要打断或是取消该任务,如何操作?

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:497
  • 最近打卡:2025-04-30 20:48:13
已绑定手机

151

主题

589

回帖

1196

积分

金牌会员

积分
1196
发表于 2024-7-9 08:32:32 | 显示全部楼层 |阅读模式
1、当语音播报延时,进行了任务切换执行别的代码时,这时摁下按键,状态指示和电磁阀都动作了,
上一次的语音还正在播报,这次语音只能等上次语音播报完毕,再播报,语音切换不及时?如何在延时阻塞
任务没有执行完,新的任务来临时,打断/取消旧任务??有哪些方法可以操作?


                        if(key_lock3==0 && key_lock4==1 && Flag_work==0)//拐弯检测
                        {
                                 j=0;                                       
                                if(i<3)//拐弯语音播报正常三次,第一次正播报时,状态切换需要播报执行了,还是要等这次播报完成,才能播报直行?
                                {
                          YY_OUT_2=0;//开启语音播报
                                vTaskDelay(1000);//这个延时任务切换后,状态变了,需要及时取消语音开启状态,切换新的语音如何操作???
                    YY_OUT_2=1;//关闭语音播报
                                vTaskDelay(3500);
                                i++;
                                }

                        }







回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-7-9 09:18:31 | 显示全部楼层
本帖最后由 tzz1983 于 2024-7-9 09:23 编辑

一般来说, 这种视听类的, 毫秒级响应是足够了, 所以最简单的办法就是查询, 而不是用信号量.

这里给两个方案:
1.基于查询的, 基本和祼机编程是一样的

void task( *nnnn)
{
    while(1)
    {
         static 计时器 = xx;
         static 运行状态 = yy;
       查询当前按键值。
         if(按键值 == ?)
        {
               对应的键值处理(大概就是重新设置计数器运行状态)
         }

        switch (运行状态)
        {
            case:
                break;
            case:
                break;
            default:
                break;
        }
         vTaskDelay(1);
    }
}


2. 基于OS信号量的。 只说一个思维导图。
这个任务需要等待的事件有两个:
1. 延时时间到
2. 有按键需要处理。
做一个标志集(OS信号量类型的东西),
在任务外, 每当1毫秒到(计数信号量), 或者按键有效时, 设置对应的标志集标志。
任务等待标志集, 跟据标志集的标志做相应的处理。 (事件响应性能好,超越毫秒级是肯定的)

其实说实话, 这个简单的事情没有必要搞这么复杂, 第一种方案又简单又实用.
虽然说OS有许多功能和服务可以用, 但这不代表一定要用, 或者滥用。








回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:497
  • 最近打卡:2025-04-30 20:48:13
已绑定手机

151

主题

589

回帖

1196

积分

金牌会员

积分
1196
发表于 2024-7-9 09:50:41 | 显示全部楼层
tzz1*** 发表于 2024-7-9 09:18
一般来说, 这种视听类的, 毫秒级响应是足够了, 所以最简单的办法就是查询, 而不是用信号量.

这里给两 ...

感谢指点,
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:36 , Processed in 0.111305 second(s), 61 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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