stm32 菜鸟 2024-02-23 18:40 采纳率: 25%
浏览 27
已结题

RTOS 多任务执行异常

RTOS 使用xTaskCreate创建三个任务,启用时间片轮转与抢占,没有互斥量与信号量,优先级都是0,栈大小8K,都是死循环,且都有vTaskDelay,一个任务1做接收数据,从串口中断接收;一个任务2处理这些数据并使用xQueueSend把数据加入队列;一个任务3做接收任务2的数据,通过xQueueReceive接收数据。现象:开始正常,之后当队列满了之后,会停止往串口发送数据,暂停一段时间,按理,任务3就有充足的时间接收数据并消除队列信息,但是发现仅执行任务1与任务2,任务3始终没有执行,再次经过一段时间又可以了,我看在暂停下发数据的时间里,任务3都是处于就绪状态,却没有执行,求大lao解答。

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-02-23 18:41
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    这个问题可能是由于任务优先级设置不合理导致的。首先,你需要确保任务3的优先级高于任务1和任务2,以确保任务3能够及时执行。其次,你需要检查任务3的阻塞时间是否过长,如果任务3一直在等待队列中的数据,那么它可能无法及时执行,因此你可能需要调整任务3的阻塞时间或者使用超时机制来避免任务3永久地等待数据。
    另外,你还需要考虑是否存在其他导致任务3无法执行的原因,比如任务3是否被阻塞在其他地方,或者任务3的代码是否存在死循环等问题。你可以通过在任务3的代码中插入调试语句或者使用RTOS提供的调试工具来排查这些问题。
    最后,你可能还需要考虑使用互斥量或者信号量来保护共享资源,以避免多个任务同时访问造成的数据竞争问题。虽然你提到没有使用互斥量或者信号量,但是如果任务2和任务3之间存在共享资源,那么你可能还是需要考虑添加互斥量或者信号量来保护这些共享资源。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月26日
  • 修改了问题 2月23日
  • 修改了问题 2月23日
  • 创建了问题 2月23日