当前位置:   article > 正文

【debug】stm32 指针奇数地址问题导致HardFault_stm指令不支持奇地址

stm指令不支持奇地址

很久很久没有记录过debug了,今天有空就正好记录一下

嵌入式开发,stm32F407的MCU的开发板

遇到如下问题:

变量的地址竟然为奇数!!!导致程序运行到写入该地址的数据时,发生HardFault!

程序运行到断点位置就会进入hardFault,如图所示

 

师傅告诉我:这个地址是奇数有问题啊!要注意字节对齐!!!

STM32出现硬件错误可能有以下原因:

        (1)数组越界操作;

        (2)内存溢出,访问越界;

        (3)堆栈溢出,程序跑飞;

        (4)中断处理错误;

首先疑问,为什么指针是奇数的操作(例如复制之类的),一操作就会HardFault呢?

参考链接:https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/53942?IAR-What-is-the-problem-of-using-of-address-of-unaligned-structure-member-

参考链接: https://bbs.csdn.net/topics/120017042

参考链接 :https://www.cnblogs.com/getyoulove/p/3678768.html

【从奇数边界去访问unsignedshort型变量,显然不符合对齐的规定。 在x86上,类似的操作只会影响效率,但是在MIPS或者sparc上,可能就是一个error,因为它们要求必须字节对齐.】

查了些资料感觉并没有解决什么实质性问题,感觉这个问题的根本原因涉及到编译器、汇编等深层的东西,有点深,暂时略过点,之后有空了再多查查资料补充吧。

 

说下我的理解:

就是ARM不可以读取奇数地址!(简单粗暴的结论)

 

最后解决bug办法:

将程序里的出现奇数地址的结构体1字节对齐删除,不按照一字节对齐。(当时我也是手贱,拿到demo程序后将所有的结构体全部按照1字节对齐了,结果就出现问题了....)

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50657
推荐阅读
相关标签
  

闽ICP备14008679号