器件型号: F29H85X-EVM-EVM SOM
您好:
我目前正在 F29H85x 平台上工作、在启用优化后、我观察到了与 device_delay_US () 宏相关的意外行为。
我从官方的例子: led_ex1_blinky 开始。 代码以较低的优化级别按预期运行、但启用-O1 -flto 时 、LED 闪烁行为变得不正确(时序不一致或完全错误)。
这一问题似乎是由于拖延的执行而产生的:
void SysCtl_delay(uint32_t count)
{
__asm volatile(" MV A0, D0 \n" \
" DECB A0, #1, 0x0 \n");
}
但是,如果我将 sysctl_delay () 移到一个单独的.c 文件中(而不是被内联),即使启用了 LTO 优化,该行为也会再次变得正确。
问题似乎与链接时优化 (LTO) 有关
这是否意味着在构建应用程序时应对所有 DriverLib 文件禁用 LTO?
虽然 LTO 在提高性能方面似乎非常有效、但我担心它会在从 F28x 迁移到 F29x 时对旧代码的影响。
谢谢