优化和时间切片导致多任务数据问题

问题描述 投票:-1回答:1

我正在使用FreeRtos,并且有多个任务在相同的优先级下使用相同的代码。为了测试我的代码,我将相同的数据传递到每个任务中。当优化高于-O0,并且开启了timelicing时,出现了某种问题,上下文没有被正确保存。

我的理解是每个任务都有自己的栈,在上下文从一个任务切换到另一个任务时,栈指针会相应地更新,保证每个任务保持独立。但我的情况并非如此。当我单独运行每个任务时,我得到了一个答案,但如果我通过运行所有三个任务来测试,我得到了一个正确的答案,而其他任务则略有偏差。任务之间有某种数据交叉,使它们不是真正独立的。

知道这个问题可能来自哪里吗?我没有使用任何全局变量,而且据我所知,我的代码是重入式的。


c multitasking freertos
1个回答
0
投票

如果有人遇到这种情况,我发现了这个问题。

我在Arm Cortex-A9芯片上运行FreeRtos。为了防止处理器寄存器损坏,一个任务必须不使用任何浮点寄存器,除非它有一个浮点上下文。在我的项目中,任务的创建默认没有浮点上下文。

我添加了 portTASK_USES_FLOATING_POINT()到我的任务的开头。这样就纠正了错误,现在多任务工作了。

请注意,我还必须将此添加到我的UnitTest任务中,该任务正在调用原来的三个 "破碎 "任务,因为发布到队列中也容易出错。

你可以在这里看到更多的内容。https:/www.freertos.orgUsing-FreeRTOS-on-Cortex-A-Embedded-Processors.html和这里。https:/www.freertos.orgFreeRTOS_Support_Forum_ArchiveApril_2017freertos_FreeRtos_native_Floats_and_Task_switching_03b24664j.html

© www.soinside.com 2019 - 2024. All rights reserved.