当前位置:   article > 正文

STM32解决读写Flash失败进入HardFault的问题_stm32f103c8t6读写flash 硬件错误

stm32f103c8t6读写flash 硬件错误

背景: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
  • 2
  • 3

提示:

1、不建议在结构体上使用__paked关键字,强制用 pack 指令会导致程序的性能降低,因为pack指令只是节省 了RAM,省不了 Flash。

__packed typedef struct {}
  • 1

2、建议 malloc 使之分配出来的内存字节对齐,因为修改 malloc 可以提高程序的兼容性。在 32 位机上通常是 4 字节对齐的。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号