Заметил как мой enum сходит с ума без вмешательства. Оказалось, что счетчик и enum расположены в одном адресе. ключевое слово union я не использовал.
main.h
#include "ADC_single.h"
enum {
RESTART = 0, // Состояние перезапуска после выключения/первый старт программы
STABLE_WORK = 1, // Стабильная работа
FLOATING_WORK = 2, // Работа с изменением напряжения
ALARM = 3, // BRKIN
BTN_OFF = 4 // Кнопка выключения
} gadgetState;
ADC_single.с
static uint16_t ADC_set[ADC_VALUES_SET_MAX] = { 0 }; // set (множество) - неупорядоченная структура данных
static uint8_t indexCounter = 0; // Счетчик для ADC_set
static bool firstActivation = true; // Отслеживание первого включения при старте программы до момента полного заполнения ADC_set
void UpdateAverageSet_ADC(void) {
ADC_set[indexCounter] = ADC_lastX10;
if (indexCounter < ADC_VALUES_SET_MAX - 1) {
indexCounter++;
} else {
indexCounter = 0;
if (firstActivation == true) {
firstActivation = false;
}
}
}
void CalculateAverage_ADC(void) {
// Защита от перевысчета пустых занчений при первом старте программы
uint8_t setRange = 0;
if (firstActivation == false) {
setRange = ADC_VALUES_SET_MAX;
} else {
setRange = indexCounter;
}
uint32_t ADC_sum = 0;
for (uint8_t i = 0; i < setRange; i++) {
ADC_sum += ADC_set[i];
}
ADC_averageX10 = ADC_sum / setRange;
}
Пробовал по другому объявлять enum, убрать static у переменных - без результата. Может, дело в отладчике?