本文主要是介绍STM32解决读写Flash失败进入HardFault的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景:http://www.openedv.com/thread-7415-1-1.html
问题分析
在结构体中使用指针偏移的方式操作数组,导致内存分配字节不对齐。
解决方法
定义一个局部数组,并用__align(4)来修饰,确保数组首地址可被4整除,将数据拷贝到数组中再写入。
//内存池(4字节对齐)
__align(4) u8 mem1base[MEM1_MAX_SIZE]; //内部SRAM内存池
__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))); //外部SRAM内存池
提示:
1、不建议在结构体上使用__paked关键字,强制用 pack 指令会导致程序的性能降低,因为pack指令只是节省 了RAM,省不了 Flash。
__packed typedef struct {}
2、建议 malloc 使之分配出来的内存字节对齐,因为修改 malloc 可以提高程序的兼容性。在 32 位机上通常是 4 字节对齐的。
这篇关于STM32解决读写Flash失败进入HardFault的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!