captainliuy 发表于 2017-12-28 12:22:57

KEIL memcpy hardfault

memcpy(dst, src, len)
dst 为FreeRTOS任务堆栈上的一个变量,为片上RAM
src 为SDRAM内存(0xC0000000)上的一个地址,奇数地址,没有4字节对齐
len 为4
编译为-O0时正常,-O3时HardFault, 在Keil论坛上有人提问,也没有最终结果。


eric2013 发表于 2017-12-28 12:37:57

这个随意操作,CM内核支持非对齐访问。估计是你的SDRAM问题,优化后时序配置出问题之类的。

captainliuy 发表于 2017-12-28 12:42:38

有没有可能不优化时使用了非对齐访问的指令,优化后使用了对齐的指令,导致异常?

eric2013 发表于 2017-12-28 12:49:45

captainliuy 发表于 2017-12-28 12:42
有没有可能不优化时使用了非对齐访问的指令,优化后使用了对齐的指令,导致异常?

不会,MDK的优化功能还是还是嗨嗨的,我的这个例子所有优化都开了最高等级,没有任何问题,例子也比较复杂:链接

tovinz 发表于 2024-3-14 17:18:58

多线程项目中发现没有勾选微库的时候确实会进hardfault,不得已用for循环手动复制,没有进入hardfault了。
然后又尝试了在勾选微库的情况下调用memset和memcpy,也没有再进入hardfault的情况。
搞不明白,是不是ARM优化过的微库加入了线程安全特性。
页: [1]
查看完整版本: KEIL memcpy hardfault