Advertisement
teplofizik

settings.c (flash)

Jun 7th, 2013
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.80 KB | None | 0 0
  1. // ******************************************************
  2. // settings.c
  3. //
  4. // teplofizik
  5. // ******************************************************
  6.  
  7. #include "settings.h"   // Описание полей настроек
  8. #include "../drivers.h" // Там подключён модуль flash
  9.  
  10. #include <string.h>
  11.  
  12. // Хранение настроек
  13. TSettings Settings;
  14.  
  15. static uint8_t * SettingsInFlash = (void *)0x080E0000UL; // Последний сектор
  16.  
  17. // Обработчик инициализации настроек
  18. static void (* Handler)(void);
  19.  
  20. static bool Save;
  21.  
  22. static void settings_SaveDataToFlash(void)
  23. {
  24.     flash_Erase(SettingsInFlash, SettingsInFlash + sizeof(Settings));
  25.    
  26.     flash_Write(&Settings, SettingsInFlash, sizeof(Settings));
  27. }
  28.  
  29. // Применить изменения
  30. void settings_Save(void)
  31. {
  32.     Save = true;
  33. }
  34.  
  35. // Прочитать настройки
  36. void settings_Load(void)
  37. {
  38.     flash_Read(&Settings, SettingsInFlash, sizeof(Settings));
  39. }
  40.  
  41. // Загрузка настроек
  42. void settings_Init(void * DefaultHandler)
  43. {
  44.     Handler = (void(*)(void))DefaultHandler;
  45.     Save = false;
  46.    
  47.     // Загрузим
  48.     settings_Load();
  49.        
  50.     // Проверим
  51.     if(Settings.Magic != SETTINGS_MAGIC)
  52.     {
  53.         // сброс
  54.         memset(&Settings, 0, sizeof(Settings));
  55.        
  56.         // Инициализация настроек
  57.         Settings.Magic = SETTINGS_MAGIC;
  58.                
  59.         // Если надо настраивать - позаботьтесь сами
  60.         if(Handler) Handler();
  61.        
  62.         // Сохраним
  63.         settings_Save();
  64.     }
  65. }
  66.  
  67. void settings_Main(void)
  68. {
  69.     if(Save)
  70.     {
  71.         Save = false;
  72.        
  73.         settings_SaveDataToFlash();
  74.     }
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement