为什么没有输入任务?
Why task is not entered?
我将 freertos 与 Hal stm 库一起使用,用于 运行 三个任务,第一个堆栈大小为 128,第二个堆栈大小为 512,而第三个堆栈大小为 1100。
三个任务创建成功,但是当运行调度器只在前两个任务之间切换,即使三个任务具有相同的优先级。
项目总堆栈大小为 8k,堆大小为 9k,而 freertos 堆大小为 4k
可能是什么问题?
没有看到代码很难说,但这里有一些调试技巧。
确保您已将 configASSERT() 定义为将停止执行的内容(这样您就知道它已被调用)。 FreeRTOS 版本越新越好,因为新版本添加了更多断言点。
确保定义了一个 malloc failed hook 这样你就知道你是否 运行 超出了堆。
尝试在您认为不是 运行ning 的任务开始处设置一个断点,看看它是否曾经被输入过 - 也许它 运行s 一次但将自己置于一个声明它不会再次 运行(如果没有看到任务代码很难说)。
同样确保将 stack overflow detection 设置为 2。
我将 freertos 与 Hal stm 库一起使用,用于 运行 三个任务,第一个堆栈大小为 128,第二个堆栈大小为 512,而第三个堆栈大小为 1100。
三个任务创建成功,但是当运行调度器只在前两个任务之间切换,即使三个任务具有相同的优先级。
项目总堆栈大小为 8k,堆大小为 9k,而 freertos 堆大小为 4k
可能是什么问题?
没有看到代码很难说,但这里有一些调试技巧。
确保您已将 configASSERT() 定义为将停止执行的内容(这样您就知道它已被调用)。 FreeRTOS 版本越新越好,因为新版本添加了更多断言点。
确保定义了一个 malloc failed hook 这样你就知道你是否 运行 超出了堆。
尝试在您认为不是 运行ning 的任务开始处设置一个断点,看看它是否曾经被输入过 - 也许它 运行s 一次但将自己置于一个声明它不会再次 运行(如果没有看到任务代码很难说)。
同样确保将 stack overflow detection 设置为 2。