程序跑进了hardfault

经debug发现是结构体里字节没有对齐导致的,以前没有注意过这个问题,之后要养成习惯将占用字节小的变量放在前面,大的放后面。

问了gpt它的回答是:

结构体对齐是为了提高内存读写的效率和性能。当结构体成员变量没有按照对齐规则进行排列时,可能会导致访问内存的错误,从而导致程序出现异常,如硬件错误。

对齐是指将结构体成员变量按照特定的字节对齐规则进行排列的过程,这样可以确保结构体成员在内存中的地址是按照一定规律排列的。结构体对齐的规则可以由编译器根据平台和编译选项进行设置。

对齐的目的是为了优化内存访问。当结构体成员变量按照对齐规则进行排列时,CPU可以更高效地读取和写入内存。例如,对于某些架构,当一个结构体成员变量没有按照对齐规则排列时,CPU可能需要进行多次内存访问操作,从而导致性能下降。

如果结构体成员变量没有正确对齐,可能会导致内存访问错误,如访问未对齐地址的数据。这可能会导致硬件异常,例如硬件错误中断,从而导致程序跑到hardfault函数里。

因此,在编写程序时,需要特别注意结构体的对齐问题,确保结构体成员变量按照对齐规则进行排列,以避免出现内存访问错误和程序异常。可以通过使用编译器提供的对齐指令或者特定的对齐宏来控制结构体的对齐方式。

相关推荐
LCMICRO-133108477468 分钟前
国产长芯微LDC4048完全P2P替代DAC128S085,是一款 8 通道、带输出放大器的数模转换器 (DAC)
stm32·单片机·嵌入式硬件·fpga开发·硬件工程·数模转换器dac
雅斯驰14 分钟前
电流模式控制+快速瞬态响应:LTM4650AY的FPGA供电技术解析
stm32·单片机·嵌入式硬件·物联网·fpga开发·汽车
JaneHan_27 分钟前
STM32CubeMX+HAL+Keil5 GPIO输入 按键控制
stm32·单片机·嵌入式硬件
平凡灵感码头34 分钟前
C51 与 STM32 编程对比:从数据类型、关键字到程序结构
stm32·单片机·嵌入式硬件
LCG元40 分钟前
STM32实战:基于STM32F103的HC-SR04超声波测距与OLED显示
stm32·单片机·嵌入式硬件
不做无法实现的梦~13 小时前
STM32解析PPM协议
stm32·单片机·嵌入式硬件
番茄灭世神14 小时前
MCU开发常见软件BUG总结(持续更新)
c语言·stm32·单片机·嵌入式·gd32
Ar-Sr-Na15 小时前
STM32现代化AI开发指南-VSCode环境配置(macOS)
c语言·人工智能·vscode·stm32·嵌入式硬件·硬件工程
世微 如初16 小时前
AP5125 宽压大功率 LED 恒流驱动器:技术参数与应用设计指南
stm32·单片机·嵌入式硬件
弄曲幽篁18 小时前
stm32 USB虚拟串口
stm32·单片机·嵌入式硬件