stm32_flash_eeprom_断电保护_数值存储程序(4)

2018-11-21 22:36

} }

/* Return PAGE_FULL in case the valid page is full */ return PAGE_FULL; } /**

* @brief Transfers last updated variables data from the full Page to * an empty one.

* @param VirtAddress: 16 bit virtual address of the variable * @param Data: 16 bit data to be written as variable value * @retval Success or error status:

* - FLASH_COMPLETE: on success * - PAGE_FULL: if valid page is full

* - NO_VALID_PAGE: if no valid page was found * - Flash error code: on write Flash error */

static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data) {

FLASH_Status FlashStatus = FLASH_COMPLETE;

uint32_t NewPageAddress = 0x080103FF, OldPageAddress = 0x08010000; uint16_t ValidPage = PAGE0, VarIdx = 0; uint16_t EepromStatus = 0, ReadStatus = 0;

/* Get active Page for read operation */

ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);

if (ValidPage == PAGE1) /* Page1 valid */ {

/* New page address where variable will be moved to */ NewPageAddress = PAGE0_BASE_ADDRESS;

/* Old page address where variable will be taken from */ OldPageAddress = PAGE1_BASE_ADDRESS; }

else if (ValidPage == PAGE0) /* Page0 valid */ {

/* New page address where variable will be moved to */ NewPageAddress = PAGE1_BASE_ADDRESS;

/* Old page address where variable will be taken from */ OldPageAddress = PAGE0_BASE_ADDRESS; }

else {

return NO_VALID_PAGE; /* No valid Page */ }

/* Set the new Page status to RECEIVE_DATA status */

FlashStatus = FLASH_ProgramHalfWord(NewPageAddress, RECEIVE_DATA); /* If program operation was failed, a Flash error code is returned */ if (FlashStatus != FLASH_COMPLETE) {

return FlashStatus; }

InitCurrWrAddress();//aft 重新初始化写地址

/* Write the variable passed as parameter in the new active page */ EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddress, Data); /* If program operation was failed, a Flash error code is returned */ if (EepromStatus != FLASH_COMPLETE) {

return EepromStatus; }

/* Transfer process: transfer variables from old to the new active page */ for (VarIdx = 0; VarIdx < NumbOfVar; VarIdx++) {

if (VirtAddVarTab[VarIdx] != VirtAddress) /* Check each variable except the one passed as parameter */ {

/* Read the other last variable updates */

ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar); /* In case variable corresponding to the virtual address was found */ if (ReadStatus != 0x1) {

/* Transfer the variable to the new active page */

EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar); /* If program operation was failed, a Flash error code is returned */ if (EepromStatus != FLASH_COMPLETE) {

return EepromStatus; } } } }

/* Erase the old Page: Set old Page status to ERASED status */ FlashStatus = FLASH_ErasePage(OldPageAddress);

/* If erase operation was failed, a Flash error code is returned */ if (FlashStatus != FLASH_COMPLETE) {

return FlashStatus; }

/* Set new Page status to VALID_PAGE status */

FlashStatus = FLASH_ProgramHalfWord(NewPageAddress, VALID_PAGE); /* If program operation was failed, a Flash error code is returned */ if (FlashStatus != FLASH_COMPLETE) {

return FlashStatus; }

/* Return last operation flash status */ return FlashStatus; } /** * @} */

/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/ /*************eeprom.c*************/


stm32_flash_eeprom_断电保护_数值存储程序(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:儿童感觉统合能力评定量表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: