由于内存字节对齐导致的硬件错误
来源:互联网 发布:文件归档软件 编辑:程序博客网 时间:2024/05/16 10:06
最近在调试STM32程序的时候,经常进到HardFault_Handler这个中断里。产生这个中断的原因一般和内存有关系,像是数组越界、堆栈溢出之类的。
检查了好几天终于发现了问题的所在,产生问题的原因是程序在运行函数指针所指向的时候,由于指针指向的地址不对而引发HardFault_Handler中断。
令我匪夷所思的地方就来了,在我的程序中并没有对这个指针进行一些无效的赋值,于是我开始调试对这个指针赋值的那段代码,然后发现了一个让人始料未及的事情。赋值的那段代码是没有问题的,但是在完成赋值操作之后,这个函数指针所指向的地址竟然和我赋值给它的地址不一样。内心一阵万马奔腾的景象。
然而为什么会产生这个原因呢?好吧到最后我也没有想明白是什么原因。不过解决方法不知道是凑巧还是什么,我在网上找HardFault_Handler相关的资料的时候,发现有人提到了内存字节对齐。于是我想到了在我的程序中有一些数据结构被我设置成1字节内存对齐。是使用#pragma pack (1)
来实现的,但是我并没有加#pragma pack ()
取消自定义内存对齐指令,导致其之后的数据结构都是1字节对齐。在我加上了#pragma pack ()
之后程序就没有进HardFault_Handler中断了。
0 0
- 由于内存字节对齐导致的硬件错误
- 字节对齐导致的地址计算错误
- 单片机的非对齐访问导致硬件错误
- 由于未分配内存的指针导致段错误
- 内存分配的字节对齐
- C++ 内存的字节对齐
- 由于JDK版本问题导致的错误
- ARM程序由于字节对齐引起的问题深入分析
- ARM程序由于字节对齐引起的问题深入分析
- ARM程序由于字节对齐引起的问题深入分析
- 任意字节对齐的内存分配函数
- ADS下内存字节对齐的问题
- 关于内存字节对齐的例子
- 由于DNS设置错误导致403错误的问题
- 一个由于错误使用interval导致的错误
- 字节未对齐引起的段错误
- 内存字节对齐
- 内存字节对齐
- C# TCP/UDP 通讯代码讲解
- 2016/9/1 【线性代数 + C++】求行列式数字结果的程序
- 最常用的 Eclipse 快捷键总
- 链表实现队列
- 冒泡算法的自我理解
- 由于内存字节对齐导致的硬件错误
- 微信公众号申请需要哪些材料
- ZTE中兴
- Linux基础
- (一)SSO之CAS框架通俗原理
- 什么是EPEL 及 Centos上安装EPEL
- Couldn't find platform family in Info.plist CFBundleSupportedPlatforms or Mach-O LC_VERSION_MIN for
- 38. DOM 操作
- 智能指针的理解 和 简单实现