程序跑进了hardfault

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

问了gpt它的回答是:

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

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

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

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

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

相关推荐
老k一步步来7 小时前
STM32 HAL库CAN通信核心函数详解,参数以及作用
stm32·单片机·嵌入式硬件
wuyk55511 小时前
77.嵌入式 C 语言中 enum 枚举的工程化实践:告别魔法数字,提升代码可维护性
c语言·开发语言·stm32·单片机·嵌入式硬件
国产HT1621B14 小时前
YL1650 LED驱动芯片详解:从原理到实战应用(附51单片机驱动代码)
stm32·单片机·嵌入式硬件·mcu·fpga开发·lcd驱动
zcmodeltech14 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
LCG元16 小时前
STM32硬件SPI驱动OLED SSD1306显示屏全流程实战:从CubeMX配置到中英文显示
stm32·单片机·嵌入式硬件
sukalot17 小时前
windows网络适配器驱动开发-双 STA 连接(下)
windows·驱动开发·stm32
zcmodeltech18 小时前
智慧农业沙盘模型物联网控制系统设计:基于STM32与Modbus RTU的传感器-执行器闭环方案
服务器·分布式·stm32·嵌入式硬件·物联网·能源
WD137298015571 天前
WD5030L,超高集成度、大电流输出、高效率低发热,限流24V转12V,6A
stm32·单片机·嵌入式硬件·51单片机
爱就是恒久忍耐2 天前
使用VSCode开发STM32 (通用版本)
ide·vscode·stm32