使用FLASH保存上一次断电后的变量

Qflash_Write(0x01000010,(uint8_t*)&guc_change_remote_status,sizeof(guc_change_remote_status));

0x01000010,在昕源芯片flash中的存储地址范围中随意取的
(uint8_t*)&guc_change_remote_status将 guc_change_remote_status 的地址转换为 uint8_t 类型的指针
在这里插入图片描述

void read_flash_change_remote_status(void)
{
    
    
	uint8_t read_buffer[sizeof(uint8_t)];
	uint32_t read_address = 0x01000010;  //

	
	Qflash_Read(read_address, read_buffer, sizeof(uint8_t));
	
	uint8_t value = *((uint8_t*)read_buffer);
	

read_buffer是用于存储读取结果的缓冲区
在这里插入图片描述
|
|
|

uint8_t value = ((uint8_t)read_buffer);将读取到的值转换为 uint8_t 类型

uint32_t Qflash_Write(uint32_t address, uint8_t* p_data, uint32_t len)
{
    
    
    ReturnMsg error;
    GLOBAL_INT_DISABLE();
	if(gst_Qflash_init_status != 0x55)
	{
    
    
		Qflash_Init();
		//Qflash_Lock(FLASH_LOCK_F_256K);
		Qflash_Lock(FLASH_LOCK_UNLOCK);
	}
    address -= 0x01000000;
    assert_param(CMD_FLASH_WRITE != NULL);
    error = CMD_FLASH_WRITE(address, p_data, len);
	#ifdef USE_FULL_ASSERT
	assert_param(error == FlashOperationSuccess);
	#else
	if(error != FlashOperationSuccess)
	{
    
    
		IS_LOG_DEBUG("F_E02=%d,\r\n",error);
	}
	#endif
    GLOBAL_INT_RESTORE();
	
    return error;
	
}
	Qflash_Lock(FLASH_LOCK_UNLOCK);
	写和读和擦除函数都在开始默认开锁。不用手动开。
typedef enum{
    
    
    FlashOperationSuccess,
    FlashWriteRegFailed,
    FlashTimeOut,
    FlashIsBusy,
    FlashQuadNotEnable,
    FlashAddressInvalid,
}ReturnMsg; 

FlashAddressInvalid,这调试次里出现了地址错误,这个0x010E0000,0x010EA000都不可以写进去

用这个地址0x01000010才可以写进去。

猜你喜欢

转载自blog.csdn.net/lianghuajunone/article/details/129884589