我在 newlib_lock_glue.c 中遇到了一个奇怪的现象。在少数设备上,当开启优化时,代码无法正确执行。
在我看来,优化似乎丢弃了某些语句。该函数是从 sprintf 调用的。
在项目中用了FreeRTOS 和线程安全策略 #4(允许在中断中使用锁)。
反汇编代码中缺少返回指令,并且在 if 代码块中没看到实现返回的指令。
以下是带有反汇编和调用堆栈的代码。
没有头绪了。
代码newlib_lock_glue.c 是由 CubeIDE 生成的。
以下是我的 gcc 标志
-mcpu=cortex-m7
-std=gnu11
-g3
-DUSE_HAL_DRIVER
-DSTM32H7A3xx
-DSTM32_THREAD_SAFE_STRATEGY=4
-c
-Os
-ffunction-sections
-fdata-sections
-Wall
-Wextra
-Wshadow
-Wundef
-fstack-usage
--specs=nano.specs
-mfpu=fpv5-d16
-mfloat-abi=hard
-mthumb
|
|