rusyska55011
@rusyska55011

2 переменные в одном адресе Си11 ARM STM32?

Заметил как мой enum сходит с ума без вмешательства. Оказалось, что счетчик и enum расположены в одном адресе. ключевое слово union я не использовал.

66671650d061b125861204.png

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 у переменных - без результата. Может, дело в отладчике?
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Может, дело в отладчике?

Может и в отладчике. Поскольку обе переменные глобальные, то для проверки можно посмотреть в вывод readelf -a -- там должны быть их адреса. Или напечатать адреса из программы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы