程序跑进了hardfault

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

问了gpt它的回答是:

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

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

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

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

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

相关推荐
周洲08309 小时前
STM32 串口底层深度解析|USART 中断标志、硬件 FIFO,乱码根源底层定位
stm32·单片机·嵌入式硬件
李日华大战鸡红15 小时前
IC-MU128编码器使用教程
stm32
周洲083015 小时前
STM32片内Flash读写深度详解|掉电参数保存、底层原理
linux·前端·stm32
WD1372980155719 小时前
WD5030K输入工作电压 7.5‑30V,适合12A 及以内量产项目
stm32·单片机·嵌入式硬件·51单片机
光子物联单片机20 小时前
STM32传感器模块编程实践(二十二)DIY智能WIFI视频控制小车
c语言·stm32·单片机·嵌入式硬件·音视频
新晨单片机设计1 天前
S010C-基于STM32单片机水温控制系统(OLED显示)【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·水温控制系统
lhbweilai1 天前
从底层了解STM32八大功能(下)
stm32·单片机
新晨单片机设计1 天前
S009C-基于STM32单片机语音出租车计价器【Proteus仿真+Keil程序+原理图】
stm32·单片机·proteus·出租车计价器
Zw-awa1 天前
volatile 与寄存器:SysTick->VAL 到底在读什么
stm32
Zw-awa2 天前
PWM 为什么能调速:从 LED 亮度变化到直流电机转起来
stm32