初级会员
积分 147
金钱 147
注册时间 2012-8-24
在线时间 3 小时
10 金钱
请教原子哥和论坛的大神,现在碰到一个关于将结构体中数据直接写到flash的问题。
先写一下我的代码
结构体是:
typedef struct
{
uint8_t breakpoint;
uint8_t updata;
uint16_t rec_data;
uint32_t rec_version;
uint8_t rec_breakpoin[4];
}__attribute__((packed)) TEST_TEST_T;
TEST_TEST_T sys_test;
我先把ADDR_FLASH_PAGE_40(0x800c000)这个地址的内容赋值到sys_test结构体中
memcpy(&sys_test,(uint8_t*)ADDR_FLASH_PAGE_40,sizeof(sys_test));
这一步已经成功把ADDR_FLASH_PAGE_40内容依次赋值到结构体中了(数据都是正确的)
下面我调用这个函数想把结构体中的数字再写到flash中的ADDR_FLASH_PAGE_41位置
函数如下:
WriteFlashToBackup(ADDR_FLASH_PAGE_41, (uint64_t* )&sys_test, sizeof(sys_test)/8 +1);
函数如下:
void WriteFlashToBackup(uint32_t addr, uint64_t *data, uint32_t data_len)
{
int i;
HAL_FLASH_Unlock();
FLASH_WaitForLastOperation(50000);
for(i = 0; i < data_len ; i++)
{
HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr, *data); (11111)
addr += 8;
data ++ ;
}
FLASH_WaitForLastOperation(50000);
HAL_FLASH_Lock();
}
但是每次执行到HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, addr, *data)处就跳到下面的硬件复位了
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
求大神帮忙看看问题出在哪里! 十分感谢!
我来回答