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

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

[复制链接]
已绑定手机

176

主题

619

回帖

1601

积分

金牌会员

积分
1601
发表于 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++;
                                }

                        }







回复

使用道具 举报 送花

19

主题

920

回帖

2765

积分

荣誉版主

积分
2765
发表于 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有许多功能和服务可以用, 但这不代表一定要用, 或者滥用。








回复

使用道具 举报 送花

已绑定手机

176

主题

619

回帖

1601

积分

金牌会员

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

这里给两 ...

感谢指点,
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-11-7 14:35 , Processed in 0.064202 second(s), 47 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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