标准库memcpy()内存对齐异常引发单片机hard fault问题汇总

1.起因:相同内容使用标准库的memcpy会引起硬件故障,使用自定义内存拷贝正常运行(无内存越界和堆栈溢出)

2.问题经过:

发现一个奇怪的现象;

    .text                                    0x0800077a   Section      138  rt_memcpy_v6.o(.text);

程序在这报错就很奇怪;

也没有发现内存越界;

出现了hard fault,通过cpu pc寄存器值和map文件定位到了在 memcpy 函数中,猜测应该是复制数据时地址未对齐引起的;

确实是对齐问题,默认定义变量地址都是对其的,但是使用的时候一般都会加偏移,偏移后没有对齐,标准库的这个函数也会引起硬件故障;

我们之前使用的是ARM提供的轻量级 C 库(MicroLIB),但是后面引入了一些东西改用C标准库,发现memcpy会经常引起硬件故障hard fault ,然后发现是便准库memcpy内存对齐异常引起的;

会硬件故障然后重启,基本确定是C标准库中memcpy函数对齐异常问题引起的;

有点像标准库函数有什么性能优化不太适配ARM;

3.相关内容
求助!如何才能使memcpy完全使用rt_memcpy? - 嵌入式技术论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!

GD32 RT_Thread Nano ---UNALIGNED 非对齐访问出错_rtthread cpu异常 访问未对齐异常-优快云博客

RT-Thread-elmfat写数据长度大于512字节,系统hard faultRT-Thread问答社区 - RT-Thread

[fix] fix sdio non-aligned access problem by whj4674672 · Pull Request #4015 · RT-Thread/rt-thread · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值