CH32V307/FreeRTOS/LED测试程序,gcc12编译器,开到O3和LTO后出现HardFault

调了一天了找不到解决办法,麻烦帮忙看看

icon_rar.gifFreeRTOS_HardFault.zip


把“WCH-Interrupt-fast”去掉似乎就好了,但治标不治本...


您好,lto选项会将所有代码生成特殊段,在链接时统一优化,底层运行库目前是没有的,可能会引起错误,非必要,不建议开启lto选项。


lto选项会大大降低代码尺寸,我的项目都是默认打开的


我没细看。但如果是 WCH-Interrupt-fast 的话,会不会是中断没配置好?

中断嵌套8级,但硬件堆栈只有3层。


> lto选项会大大降低代码尺寸,我的项目都是默认打开的

哈哈,我也是。-Os -flto



出问题程序里面只是在FreeRTOS例程的基础上加了个基本的主任务和LED闪烁,整个程序里面的中断也只有FreeRTOS例程里的3个中断,正常情况下会触发的只有Systick这一个,应该不是中断嵌套层次的问题。

我怀疑是任务切换中那堆汇编代码涉及到快速中断部分的问题,我对这块确实不太熟,希望官方开发人员可以花点时间处理一下这个问题。

-----------------------------------------

对于代码封装层次比较多的项目,开LTO后无论是执行效率还是代码尺寸都会有非常大的优化,所以我还是倾向于打开LTO。


只有登录才能回复,可以选择微信账号登录