我的工程使用 FreeRTOS + LwIP 以及其他组件。我遇到一个问题:工程开启优化-O3之后,出现奇怪的通信故障。例如 ping 包只能每 3~4 个包才收到一次应答;ping 回复延迟高达 2 秒,甚至 UART 也工作异常。
我最后定位到根源:STM32F7xx_HAL_Driver 文件夹代码被 O3 优化就会出问题;我必须单独把这个文件夹手动设置为 - O0 才能正常运行。
为什么会出现这种现象?如果驱动代码不能承受优化,难道不应该用类似下面的方式保护代码,防止优化带来影响吗?
#pragma GCC push_options
#pragma GCC optimize ("O0")
//code
#pragma GCC pop_options
|
|