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