我正在使用带有Hal stm库的freertos来运行三个任务,第一个堆栈大小为128,第二个为512,而第三个为1100。
这三个任务已成功创建,但在运行调度程序时,只在前两个任务之间切换,即使这三个任务具有相同的优先级。
总项目堆栈大小为8k,堆为9k,而freertos堆为4k
可能是什么问题?
答案 0 :(得分:1)
很难说没有看到代码,但这里有一些调试技巧。
确保将configASSERT()定义为将停止执行的内容(因此您知道它已被调用)。较新版本的FreeRTOS越新越好,因为新版本增加了更多的断言点。
确保定义malloc failed hook,以便知道是否用完了堆。
尝试在您认为未运行的任务开始时设置一个断点并查看它是否曾经输入过 - 可能只运行一次但是将自己置于一个不再运行的状态(困难)说没有看到任务的代码。)
同样确保将stack overflow detection设置为2。