STM32
直播中

刘丹

7年用户 1483经验值
私信 关注
[问答]

CUBE FREERTOS三个和三个任务之上的运行不起来是为什么?

任意两个都可以的。堆栈我已经改过了。Stack_Size      EQU     0x00001000
Heap_Size       EQU     0x00001500
#define configTOTAL_HEAP_SIZE                    ((size_t)10240)
改的这三个。

  xTaskCreate(sht21Entry,"sht21_Task",512,NULL,3,NULL);//ÎÂ¶È ²âÁ¿ÈÎÎñ´´½¨
        xTaskCreate(screenEntry,"screenEntry",512,NULL3,NULL);//ÆÁÄ»ÏÔʾÈÎÎñ´´½¨
        xTaskCreate(XDTaskEntry,"xdTask",512,NULL,3,NULL);
//        xTaskCreate(ZMTaskEntry,"zmTask",512,NULL,3,NULL);
//        xTaskCreate(FM_Entry,"FM_Task",512,NULL,3,NULL);
//        xTaskCreate(FD_Entry,"FD_Task",512,NULL,3,NULL);
//        xTaskCreate(gpioTaskEntry,"GPIO_Task",512,NULL,3,NULL);
//        xTaskCreate(CurrentWDEntry,"Current_Task",512,NULL,3,NULL);


只能最大运行两个任务,第三个任务就不行了

回帖(1)

爱与友人

2024-5-11 17:26:27
从您提供的信息来看,您正在使用FreeRTOS创建三个任务,但是当这三个任务一起运行时,系统出现问题。您已经尝试调整堆栈大小,但是问题仍然存在。以下是一些建议,以帮助您解决这个问题:

1. 确保您的硬件资源足够支持三个任务的运行。这包括内存、处理器速度等。如果硬件资源不足,可能会导致任务无法正常运行。

2. 检查任务优先级。FreeRTOS是一个实时操作系统,任务的优先级非常重要。确保您为每个任务分配了合适的优先级,以避免优先级反转或其他调度问题。

3. 检查任务之间的同步和通信。如果任务之间存在共享资源或需要相互通信,确保您正确地实现了同步机制,如互斥量、信号量或事件标志。

4. 检查任务的堆栈大小。您已经尝试调整堆栈大小,但是如果调整后的值仍然不足以支持任务的运行,可能会导致问题。尝试进一步增加堆栈大小,以确保任务有足够的空间进行操作。

5. 使用FreeRTOS的调试工具。FreeRTOS提供了一些调试工具,如跟踪宏和断言,可以帮助您识别问题所在。启用这些调试工具,以便在出现问题时获得更多信息。

6. 检查任务的创建和删除。确保您正确地创建了任务,并且在任务完成后正确地删除了它们。错误地创建或删除任务可能会导致资源泄漏或其他问题。

7. 检查FreeRTOS的配置。确保您的FreeRTOS配置正确,包括时钟频率、任务数量限制等。错误的配置可能会导致任务无法正常运行。

8. 分析任务的执行时间。如果任务的执行时间过长,可能会导致其他任务无法获得足够的CPU时间片。使用FreeRTOS的跟踪工具,如FreeRTOS+Trace,可以帮助您分析任务的执行时间。

9. 检查中断服务例程(ISR)。如果任务依赖于中断来完成任务,确保您的ISR实现正确,并且没有导致优先级反转或其他问题。

10. 逐步调试。如果以上方法都无法解决问题,您可以尝试逐步调试您的代码,以找到导致问题的具体位置。

总之,解决这个问题需要对FreeRTOS和您的硬件环境有深入的了解。通过逐步检查和调试,您应该能够找到问题的根源,并采取相应的措施来解决它。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分