Selaa lähdekoodia

Does not work.

Vladimir N. Shilov 1 vuosi sitten
vanhempi
commit
8b97982e08
1 muutettua tiedostoa jossa 16 lisäystä ja 35 poistoa
  1. 16 35
      lib/stab/stab.c

+ 16 - 35
lib/stab/stab.c

@@ -17,6 +17,16 @@ static uint16_t PDMset[2][ARRAY_SIZE] = {};  // Массив уставок мо
 //static uint16_t (&Pnom_arr)[ARRAY_SIZE] = PDMset[0];  // Массив мощностей ТЭНа как ссылка на нулевую строку массива уставок
 // (&Pnom_arr) - посилання на PDMset[0], в С не працює, замінив по тексту.
 
+// В EEPROM хранятся значения номинальных мощностей ТЭНа (каждая занимает 2 байта, количество определяется величиной Pnom_ARR_SIZE)
+// и уставки мощности для каждой номинальной в формате pdm (каждая занимает 2 байта),
+// уставки пишутся не в конкретные ячейки, а по кругу до заполнения выделенного участка EEPROM.
+// Так сделано для экономии ресурса EEPROM
+static volatile uint16_t old_addr = 0;    // Адрес в EEPROM, где записана самая старая уставка
+static volatile uint16_t new_addr;        // Адрес в EEPROM, куда писать новую уставку
+static uint16_t start_addr;               // Начальный адрес области записи уставок в EEPROM
+static uint16_t end_addr;                 // Конечный адрес области записи уставок в EEPROM
+static volatile uint16_t clear_old_addr;  // Дубль адреса в EEPROM, где записана самая старая уставка, предназначенная для стирания
+
 static volatile uint32_t sum;         // Сумматор квадратов отсчетов АЦП
 static volatile uint16_t sc = 0;      // Счетчик просуммированных квадратов
 static volatile uint16_t sc_sum = 0;  // Счетчик просуммированных квадратов, готовый к обработке
@@ -55,9 +65,7 @@ static volatile struct flags {  // Флаги
   unsigned  stab_off : 1;     // Флаг аварийного останова стабилизатора
   unsigned  butt : 1;         // Флаг опроса кнопок
   unsigned  test : 1;
-#ifdef USE_EEPROM
   unsigned  writable : 1;     // Флаг записи уставок в EEPROM
-#endif
 #ifdef USE_USART  
   unsigned  uartUnhold : 1;   // Флаг разрешения передачи данных по USART
   unsigned  uartReport : 1;   // Флаг разрешения отправки данных внешнему контроллеру
@@ -147,7 +155,6 @@ static uint8_t X_centred(const uint8_t len) {
   }
 }
 
-#ifdef USE_EEPROM
 /**
  * @brief Функция переводит символ ASCII в шестнадцатиричную цифру,
  * @return при ошибке возвращает 255
@@ -179,7 +186,6 @@ static char HEX_to_A (const uint8_t x) {
     return 'X';
   }
 }
-#endif
 
 /**
  * @brief Подпрограммка остановки режима "Разгон"
@@ -253,7 +259,6 @@ static void remember_last_power_setting(void) { // Запомним послед
   }
 }
 
-#ifdef USE_EEPROM
 /**
  * @brief Подпрограмма обмена двух ячеек массива
  * @param arr массив,
@@ -266,7 +271,6 @@ static void change_arr_cell(uint16_t arr[2][ARRAY_SIZE], const uint8_t index, co
   arr[index][index1] = arr[index][index2];// Обмениваемся
   arr[index][index2] = k;
 }
-#endif
 
 /**
  * @brief Подпрограмма обработки режима разгона
@@ -332,20 +336,16 @@ static void Buttons_(void) {
     unsigned butt_3 : 1; // текущее состояние кнопки
     unsigned butt_4 : 1; // текущее состояние кнопки
     unsigned no_select : 1; // вспомогательный флажок для начального меню
-#ifdef USE_EEPROM
     unsigned writePnom : 1; // вспомогательный флажок записи нового Pnom в EEPROM
     unsigned clear_old : 1; // вспомогательный флажок стирания старой уставки из EEPROM
-#endif
   } bt = {}; // Инициализируем структуру с нулевыми членами
   static uint8_t butt_count = 0; // счетчик для устранения дребезга
   static uint8_t butt_force_count = 0; // счетчик для форсирования инкремента/декремента
 
-#ifdef USE_EEPROM
   if (bt.clear_old) { // Стираем старую уставку, если нужно
-    eeprom_update_word((uint16_t*)clear_old_addr,EMPTY_CELL_VALUE); // Стираем самую старую уставку
+    ///eeprom_update_word((uint16_t*)clear_old_addr,EMPTY_CELL_VALUE); // Стираем самую старую уставку
     bt.clear_old = 0; // Снимаем флажок стирания
   }
-#endif
 
   bt.butt_1 = pin_butt_1_STATE;
   bt.butt_2 = pin_butt_2_STATE;
@@ -376,10 +376,8 @@ static void Buttons_(void) {
             if (PDMset[0][0] != 0xffff) { // и есть записанное значение, уходим
               cnt_Pnom_number = 0;
               Pnom = PDMset[0][0]; // По умолчанию установим номинальную мощность из нулевой ячейки
-#ifdef USE_EEPROM
               fl.writable = 1;     // Уставки пишутся в EERPOM
-              EEPROM_read_PDMs();  // Читаем уставки
-#endif
+              //EEPROM_read_PDMs();  // Читаем уставки
 #ifdef USE_USART
               fl.uartUnhold = 1;   // Разрешим обращение к USART
 #endif              
@@ -437,10 +435,8 @@ static void Buttons_(void) {
               break; //Закончили
             }
             case 4: { //Кнопкой "Стоп" пишем значение в память и выходим из менюшки
-#ifdef USE_EEPROM
               bt.writePnom = 1; // Ставим флаг записи нового значения Pnom в EEPROM
               fl.writable = 1;  // Ставим флаг записи уставок в EEPROM
-#endif
             }
             case 8: { //Кнопкой "Разгон" выходим из менюшки
               if (Pnom < 10000) { // Если значение реальное...
@@ -449,32 +445,25 @@ static void Buttons_(void) {
                   for (int8_t x = cnt_Pnom_count; x >= 0; x--) { // Проверим новое значение на совпадение с уже записанными
                     if (Pnom == PDMset[0][x]) { // Если такое значение уже есть в EEPROM...
                       cnt_Pnom_number = x;      // Запомним порядковый номер совпавшего Pnom
-#ifdef USE_EEPROM
                       bt.writePnom = 0;         // Снимем флаг записи нового значения Pnom в EEPROM
                       fl.writable = 1;          // Ставим флаг записи уставок в EEPROM
-#endif
                       break;
                     }
                   }
                 } else {                        // Если значение выбрано из записанных в EEPROM...
-#ifdef USE_EEPROM
                   bt.writePnom = 0;             // Снимем флаг записи нового значения Pnom в EEPROM
                   fl.writable = 1;              // Ставим флаг записи уставок в EEPROM
-#endif
                 }
 
                 cnt_PDMcount=0;                 //Сбрасываем счетчик
-#ifdef USE_EEPROM
                 if (fl.writable) {              // Если уставки пишутся в EERPOM, то
-                  EEPROM_read_PDMs();           // читаем ранее записанное
+                  //EEPROM_read_PDMs();           // читаем ранее записанное
                 }
                 if (bt.writePnom) { // Запишем новое значение Pnom, если необходимо
-                  eeprom_update_word((uint16_t*)(cnt_Pnom_number * 2),Pnom);
+                  //eeprom_update_word((uint16_t*)(cnt_Pnom_number * 2),Pnom);
                   bt.writePnom = 0; // и сбросим флаг записи нового значения Pnom
                 }
-#endif
                 cnt_dspMenu = 0;    // Снимаем флаг перехода в меню
-                //
 #ifdef USE_USART
                 fl.uartUnhold = 1;  // Разрешим обращение к USART
 #endif /* USE_USART */
@@ -512,7 +501,6 @@ static void Buttons_(void) {
             }
             case 4: { //По кнопке "стоп" записываем уставку, если нужно, принимаем и выходим
               PDMust = PDMset[0][cnt_PDMcount]; //Устанавливаем выбранную мощность ТЭНа
-#ifdef USE_EEPROM
               if (fl.writable) { // Если уставки запоминаются...
                 if (!PDMset[1][cnt_PDMcount]) { // Если просят записать НЕ уже записанное...
                   //eeprom_update_word((uint16_t*)new_addr,PDMset[0][cnt_PDMcount]); // Пишем новую уставку
@@ -557,7 +545,6 @@ static void Buttons_(void) {
                   }
                 }
               }
-#endif /* USE_EEPROM */
               cnt_dspMenu = 0;   //Снимаем флаг перехода в меню
               fl.dspRefresh = 1; //Ставим флаг обновления экрана
               fl.butt = 0;       //После нажатия должна быть пауза
@@ -781,11 +768,9 @@ static void RefreshMenu (void) {
 #endif
       ST7735_WriteString(0, 20, "=======Уставка=======", LiberM_7x10, Silver, Black);
       ST7735_WriteString(0, 60, "P+ Вибір", LiberM_7x10, Silver, Black);
-#ifdef USE_EEPROM
       if (!fl.writable) {  // Если уставки не пишутся в EEPROM, то...
         ST7735_WriteString(0, 70, "Ст Прийняти без запису", LiberM_7x10, Silver, Black);
       }
-#endif
       break;
     }
 
@@ -841,14 +826,12 @@ void Stab_Init(void) {
 #ifdef INTERFACE_ALT
   ST7735_WriteString(X_centred(16), 50, "STAB-STM32", Font_11x18, Green, Black);
 #else
-  ST7735_WriteString(X_centred(8), 50, "STAB-AVR", LiberM_7x10, Green, Black);
+  ST7735_WriteString(X_centred(16), 50, "STAB-STM32", LiberM_7x10, Green, Black);
 #endif
   ST7735_WriteString(X_centred(VERSION_LEN), 70, VERSION, LiberM_7x10, Red, Black);
   ST7735_WriteString(X_centred(10), 100, "JohnJohnov", LiberM_7x10, Silver, Black);
   ST7735_WriteString(X_centred(17), 110, "alcodistillers.ru", LiberM_7x10, Silver, Black);
-#ifdef USE_EEPROM
-  EEPROM_read_Pnoms(); // Прочитаем из EEPROM записанные номиналы ТЭНов
-#endif
+  //EEPROM_read_Pnoms(); // Прочитаем из EEPROM записанные номиналы ТЭНов
   pp_Delay(400); // Подождем x полупериодов, пережидаем переходные процессы и любуемся заставкой
 
   fl.dspRefresh = 1;
@@ -961,13 +944,11 @@ void Stab_WorkCycle(void) {
 #else
           ST7735_WriteString(X_position(9, p, 7), 10, buf, LiberM_7x10, Silver, Black);
 #endif
-#ifdef USE_EEPROM
           if (PDMset[1][cnt_PDMcount]) { // Если значение записано в EEPROM
             ST7735_WriteString(X_position(20, 0, 7), 1, "R", LiberM_7x10, Silver, Black); // поставим значок
           } else {
             ST7735_WriteString(X_position(20, 0, 7), 10, " ", LiberM_7x10, Silver, Black); // а если не записано - уберем
           }
-#endif
         }
         fl.dspRefresh = 0;
         break;