RISC-V GCC编译报错:中断函数含函数调用如何禁用该错误?
解决RISC-V GCC 5.2.0中断函数含函数调用的编译错误
问题根源
旧版本的riscv32-unknown-elf-gcc 5.2.0对__attribute__((interrupt))属性的检查非常严格,强制要求中断函数内部不能包含其他函数调用;而riscv32-corev-elf-gcc 11.0.0这类新版本编译器放宽了这一限制,允许中断函数内进行函数调用。
可用的编译选项
你可以试试以下两个编译选项来禁用这个错误:
-Wno-error=interrupt:把原本的错误提示降级成警告,让编译能正常通过。GCC把这类中断函数的检查归到了interrupt警告组,加这个前缀就能取消错误导致编译终止的行为。- 如果上面的选项没效果,试试
-Wno-error=pedantic:有些旧版GCC可能把这类检查归类到严格标准(pedantic)的警告组,这个选项能关闭相关的错误限制。
额外提醒
- 虽然编译能过,但得确认你的目标硬件平台的中断上下文支持函数调用——比如栈空间够不够、寄存器保存逻辑是否正确。旧版GCC的严格检查其实是为了避免硬件兼容性问题,所以编译通过后一定要在目标环境里验证代码运行是否稳定。
- 如果有机会,优先升级编译器到11.0.0及以上的版本,新版本对中断函数的处理更灵活,还修复了不少旧版的问题。
内容的提问来源于stack exchange,提问作者Guillaume D
相关产品推荐
相关产品推荐

