查看: 3222|回复: 8

[MQX] MQX系统任务中使用延时,导致其他任务异常

[复制链接]

该用户从未签到

2

主题

7

帖子

0

新手上路

Rank: 1

积分
44
最后登录
2019-3-12
发表于 2016-12-12 14:09:05 | 显示全部楼层 |阅读模式
        程序里,有三个485发送任务,三个485接收任务,对应3个uart,另外有一个任务需要五分钟执行一次,在该任务中使用_time_delay(200);计数1500次来实现5分钟运行一次。485任务优先级高于延时的任务。但是运行时,485收发出现问题,数据错误。当屏蔽_time_delay时,程序又正常。实在头疼,求大神解答。
我知道答案 目前已有8人回答
回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24894
最后登录
2025-7-21
发表于 2016-12-12 15:03:24 | 显示全部楼层
本帖最后由 小恩GG 于 2016-12-12 15:09 编辑

执行1500次timer_delay 会导致运行效率低且收发数据可能会受影响。time_delay 可以试下一次延迟5分钟,(而不是1500次,每次0.2秒)。 另外建议使用timer. MQX 中有个例程可以参考下  
C:\Freescale\Freescale_MQX_4_2\mqx\examples\timer
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-15 13:16
  • 签到天数: 191 天

    连续签到: 1 天

    [LV.7]常住居民III

    11

    主题

    664

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1722
    最后登录
    2017-10-15
    发表于 2016-12-12 15:13:26 | 显示全部楼层
    延时这个长时间,程序就会一直在延时函数中执行,只有执行完了才会跳出,建议使用定时器中断的方式         
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    44
    最后登录
    2019-3-12
     楼主| 发表于 2016-12-12 16:56:10 | 显示全部楼层
    小恩GG 发表于 2016-12-12 15:03
    执行1500次timer_delay 会导致运行效率低且收发数据可能会受影响。time_delay 可以试下一次延迟5分钟,(而 ...

    谢谢解答。time_delay那个任务里面还有其他200ms执行一次的函数,所以不能一下延迟5分钟。搞不清楚为嘛会出现这种现象,delay的时候不是该任务被挂起了吗,应该也不会有影响把。我还是先看看那个例程。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    44
    最后登录
    2019-3-12
     楼主| 发表于 2016-12-12 16:57:10 | 显示全部楼层
    jackten 发表于 2016-12-12 15:13
    延时这个长时间,程序就会一直在延时函数中执行,只有执行完了才会跳出,建议使用定时器中断的方式         ...

    mqx系统里面,delay的时候任务会被挂起,应该不影响其他的任务啊。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24894
    最后登录
    2025-7-21
    发表于 2016-12-13 10:04:10 | 显示全部楼层
    南朝戏子 发表于 2016-12-12 16:56
    谢谢解答。time_delay那个任务里面还有其他200ms执行一次的函数,所以不能一下延迟5分钟。搞不清楚为嘛会 ...

    好的,你先看看例程,如果后续有问题,欢迎继续跟帖。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    44
    最后登录
    2019-3-12
     楼主| 发表于 2016-12-19 09:55:13 | 显示全部楼层
    小恩GG 发表于 2016-12-13 10:04
    好的,你先看看例程,如果后续有问题,欢迎继续跟帖。

    检查好久,发现问题不是那里产生的,被现象给误导了,屏蔽延迟时,程序没有正常,而是任务结束,导致程序死了,所以串口没有打印出错误。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    44
    最后登录
    2019-3-12
     楼主| 发表于 2016-12-19 10:03:49 | 显示全部楼层
    小恩GG 发表于 2016-12-13 10:04
    好的,你先看看例程,如果后续有问题,欢迎继续跟帖。

    现在的问题情况是这样:
       使用芯片的三个串口,通过485和12个从机通信,1个串口对应4个从机。三个串口使用3个任务进行发送,三个任务进行接收。半双工通信,采用DMA收发。在发送任务1中,串口1向从机1发送查询命令后,发送任务用轻量信号量阻塞,等待接收任务1接受到从机的应答帧后post信号量,以此类推,一个串口发送任务轮询4个从机。现在的问题是,收发过程中,偶而出现在DMA接收BUF中,从机的应答帧丢了3个字节,且丢失位置不在帧头,帧尾,在中间不定处。而且只有串口2、串口3会出现丢失。请教一下这是什么情况呀,不胜感激。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-12-31 08:09
  • 签到天数: 438 天

    连续签到: 1 天

    [LV.9]以坛为家II

    9

    主题

    510

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1673
    最后登录
    2020-12-31
    发表于 2018-11-26 18:39:41 | 显示全部楼层
    学习中
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 06:12 , Processed in 0.102216 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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