硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2182|回复: 4
收起左侧

KEIL memcpy hardfault

[复制链接]

29

主题

101

回帖

188

积分

初级会员

积分
188
发表于 2017-12-28 12:22:57 | 显示全部楼层 |阅读模式
memcpy(dst, src, len)
dst 为FreeRTOS任务堆栈上的一个变量,为片上RAM
src 为SDRAM内存(0xC0000000)上的一个地址,奇数地址,没有4字节对齐
len 为4
编译为-O0时正常,-O3时HardFault, 在Keil论坛上有人提问,也没有最终结果。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2017-12-28 12:37:57 | 显示全部楼层
这个随意操作,CM内核支持非对齐访问。估计是你的SDRAM问题,优化后时序配置出问题之类的。
回复

使用道具 举报

29

主题

101

回帖

188

积分

初级会员

积分
188
 楼主| 发表于 2017-12-28 12:42:38 | 显示全部楼层
有没有可能不优化时使用了非对齐访问的指令,优化后使用了对齐的指令,导致异常?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2017-12-28 12:49:45 | 显示全部楼层
captainliuy 发表于 2017-12-28 12:42
有没有可能不优化时使用了非对齐访问的指令,优化后使用了对齐的指令,导致异常?

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

使用道具 举报

19

主题

234

回帖

291

积分

高级会员

积分
291
发表于 2024-3-14 17:18:58 | 显示全部楼层
多线程项目中发现没有勾选微库的时候确实会进hardfault,不得已用for循环手动复制,没有进入hardfault了。
然后又尝试了在勾选微库的情况下调用memset和memcpy,也没有再进入hardfault的情况。
搞不明白,是不是ARM优化过的微库加入了线程安全特性。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 00:13 , Processed in 0.171397 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表