打印

GD32H757 Keil -o3优化时,操作Cache执行手动清理时死机

[复制链接]
777|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
土星共同体|  楼主 | 2025-5-20 09:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GD32H757 Keil 操作Cache执行手动清理时,如果调用系统提供的内联函数,如果采用0级优化时,系统正常运行。如果采样-o3优化时,在执行手动清理时,死机。后面,被迫自行编写了一个手动优化函数,内容与系统提供的内联函数一样,运行正常。有谁知道这个问题的根源?

使用特权

评论回复
沙发
stormwind123| | 2025-5-20 16:54 | 只看该作者
用自行编写的函数,自行编写的函数未被编译器进行过度优化,因此能够保持与源代码一致的行为,从而避免死机问题。

使用特权

评论回复
板凳
probedog| | 2025-5-20 16:55 | 只看该作者
可以尝试降低优化级别。

使用特权

评论回复
地板
classroom| | 2025-5-20 16:56 | 只看该作者
建议联系技术支持。

使用特权

评论回复
5
zchong| | 2025-5-20 19:20 | 只看该作者
看看汇编呗,研究一下优化了啥

使用特权

评论回复
6
zhouyong77| | 2025-5-21 07:36 | 只看该作者
还能在程序中手动清楚cache吗?还不知道呢。

使用特权

评论回复
7
dffzh| | 2025-5-21 10:52 | 只看该作者
这种问题你可以通过一些手段尝试找下原因:
1、对比看下自己写的优化函数和系统提供的内联优化函数在代码实现上有什么本质的区别;
不过内联函数,我们能看到的可能就是一个声明部分,看不到具体代码实现吧;
2、好像有个内存屏障指令的,你可以在CACHE操作的前后加上试试:
__DSB();
__ISB();
3、debug仿真一下,程序死机时看下程序计数器PC指针的值,看下代码死在哪里;
4、可能是系统提供的内联函数在-O3优化等级下被过度优化造成了指令时序问题啥的;
不同优化等级下,内联函数的展开方式说不定就不一样。
大概率就是4这个原因吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝