优化和时间分片导致多任务数据问题
Optimization and Time Slicing Causes Multitasking Data Issues
我正在使用 FreeRtos,并且有多个任务使用相同优先级的相同代码。为了测试我的代码,我将相同的数据传递给每个任务。当优化高于 -O0 并打开时间片时,会出现上下文未正确保存的某种问题。
我的理解是每个任务都有自己的堆栈,并且在上下文从一个切换到另一个时,堆栈指针将相应更新,确保每个任务保持独立。这不会发生在我身上。当我单独 运行 每项任务时,我得到一个答案,但如果我通过 运行 对所有三项任务进行测试,我会正确地得到一个答案,而其他的则略有偏差。任务之间存在某种数据交叉,使它们不是真正独立的。
知道这个问题可能来自哪里吗?我没有使用任何全局变量,据我所知我的代码是可重入的。
万一有人遇到这个问题,我发现了这个问题。
我是 运行 Arm Cortex-A9 芯片上的 FreeRtos。为防止处理器寄存器损坏,任务不得使用任何浮点寄存器,除非它具有浮点上下文。在我的项目中,任务不是默认使用浮点上下文创建的。
我加了
portTASK_USES_FLOATING_POINT()
到我任务的开始。这更正了错误,现在可以进行多任务处理了。
请注意,我还必须将其添加到调用原始三个 "broken" 任务的单元测试任务中,因为发布到队列也容易出错。
您可以在此处查看更多信息:https://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html
在这里:https://www.freertos.org/FreeRTOS_Support_Forum_Archive/April_2017/freertos_FreeRtos_native_Floats_and_Task_switching_03b24664j.html
我正在使用 FreeRtos,并且有多个任务使用相同优先级的相同代码。为了测试我的代码,我将相同的数据传递给每个任务。当优化高于 -O0 并打开时间片时,会出现上下文未正确保存的某种问题。
我的理解是每个任务都有自己的堆栈,并且在上下文从一个切换到另一个时,堆栈指针将相应更新,确保每个任务保持独立。这不会发生在我身上。当我单独 运行 每项任务时,我得到一个答案,但如果我通过 运行 对所有三项任务进行测试,我会正确地得到一个答案,而其他的则略有偏差。任务之间存在某种数据交叉,使它们不是真正独立的。
知道这个问题可能来自哪里吗?我没有使用任何全局变量,据我所知我的代码是可重入的。
万一有人遇到这个问题,我发现了这个问题。
我是 运行 Arm Cortex-A9 芯片上的 FreeRtos。为防止处理器寄存器损坏,任务不得使用任何浮点寄存器,除非它具有浮点上下文。在我的项目中,任务不是默认使用浮点上下文创建的。
我加了
portTASK_USES_FLOATING_POINT()
到我任务的开始。这更正了错误,现在可以进行多任务处理了。
请注意,我还必须将其添加到调用原始三个 "broken" 任务的单元测试任务中,因为发布到队列也容易出错。
您可以在此处查看更多信息:https://www.freertos.org/Using-FreeRTOS-on-Cortex-A-Embedded-Processors.html 在这里:https://www.freertos.org/FreeRTOS_Support_Forum_Archive/April_2017/freertos_FreeRtos_native_Floats_and_Task_switching_03b24664j.html