123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #include "at32f403a_407.h"
- #include "factors.h"
- #include "common_config.h"
- #include <stdio.h>
- #if defined (MAI_12)
- #undef DBG
- #define DBG if(0)
- factors_t ai_factors;
- //
- bool factors_load(factors_t *factros)
- {
- #if 0
- uint32_t loadCRC; // CRC из flash
- uint32_t newCRC; // CRC загруженной структуры настроек
- bool need_default = false;
- if (!settings)
- return false;
- SYS_ReadFromFlash((uint8_t*)settings, sizeof(*settings), SYS_SECTOR);
- // Считываем CRC из флеш памяти
- loadCRC = (*(uint32_t*)SYS_CRC_ADDRESS);
- // Рассчитываем CRC для структуры настроек
- newCRC = SYS_GetCRC(settings);
- // Если CRC не совпадают нужно прошивать дефолтные настройки
- if (loadCRC != newCRC)
- {
- DBG printf("Bad system sector CRC. Factory defaults restored.\r\n");
- need_default = true;
- }
- // CRC совпала, проверяем контрольное слово если слово не совпадает
- // то это значит, что поплыла структура нстроек, прошиваем дефолт */
- else if (settings->control_word != SETTINGS_CONTROL_WORD)
- {
- DBG printf("Bad system sector control word. Factory defaults restored.\r\n");
- need_default = true;
- }
- // Прошиваем дефолтные настройки если нужно
- if (need_default)
- {
- sys_set_default(settings);
- sys_save(settings);
- }
- DBG sys_print(settings);
- return true;
- #endif
- }
- // Очистить сектор системных настроек
- void factors_sector_clear(void)
- {
- flash_status_type status;
-
- flash_unlock();
-
- if ((status = flash_sector_erase(CALIBRATION_FACTOR_SECTOR)) != FLASH_OPERATE_DONE) {
- DBG printf("Calibration factors. Erase sector error: %d\r\n", status);
- }
-
- flash_lock();
- }
- #endif
|