#include "at32f403a_407.h" #include "factors.h" #include "common_config.h" #include #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