如何在GCC 11.1中禁用警告-仅适用于mgeneral regs'-ARM体系结构中断上下文中的属性?

如何在GCC 11.1中禁用警告-仅适用于mgeneral regs'-ARM体系结构中断上下文中的属性?,c,gcc,embedded,cortex-m,gcc11,C,Gcc,Embedded,Cortex M,Gcc11,我已经将GCC编译器从10.3更新到11.1。我用它来编译带有FPU的目标CPU cortex-m4 在我的代码中,有很多用\uuuu属性((中断))标记为中断的函数,例如: __attribute__((interrupt)) void systick_isr_vector() { } 不幸的是,在更新之后,编译器已经开始为中断属性生成警告 ../unittests_entry.cpp:138:52: warning: FP registers might be clobbered desp

我已经将GCC编译器从10.3更新到11.1。我用它来编译带有FPU的目标CPU cortex-m4

在我的代码中,有很多用
\uuuu属性((中断))
标记为中断的函数,例如:

__attribute__((interrupt)) void systick_isr_vector() {
}
不幸的是,在更新之后,编译器已经开始为中断属性生成警告

../unittests_entry.cpp:138:52: warning: FP registers might be clobbered despite 'interrupt' attribute: compile with '-mgeneral-regs-only' [-Wattributes]
  138 | __attribute__((interrupt)) void systick_isr_vector() {
      |          
这里出现的问题是如何关闭此警告。我不想禁用
-Wattributes
我只想禁用此特定情况下的警告

还有什么是GCC试图禁止在中断服务例程上使用FPU上下文的原因?它在ARMv7m体系结构的中断上下文中是允许的,并且在硬件中受支持


我想这是GCC中的一个bug?

我不知道您为什么会收到警告,但如果您知道它是无害的,您应该能够像这样在本地抑制它:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
__attribute__((interrupt)) void systick_isr_vector() {
}
#pragma GCC diagnostic pop

有关详细信息,请参见。

Cortex M体系结构(ARMv6M、v7M、v8M)的一个最大的定义特征可能是不需要对中断函数进行任何特殊处理。任何符合ABI的函数都可以用作中断处理程序,所有过去使用属性(中断)等完成的有趣业务现在都由硬件完成。所以只需删除该属性