использование if-else вне функций
- Войдите на сайт для отправки комментариев
Добрый день, камрады
Столкнулся с затруднением. Зачада такова - в EEPROM храним настройки устройства (количество фаз, необходимость контроля температуры симисторов), эти значения могут быть изменены и сохранены через меню. При старте устройства необходимо считать значения этих переменных и в зависимости от их значений создать необходимое количество датчиков температуры. Внутри функции это сделал так (не пинайте за возможно нетрадиционно кривую реализацию - пока черновик):
_EEGET (settings, &settings_addr); // !!! считываем настройки устройства if bit_is_set(settings, SET_TRIAC_COOLING) { // если включен котроль температуры симисторов if bit_is_set (settings, SET_3_PHASE) { // если три фазы DS18B20_QTY = 4; // то датчиков температуры 4 } else { // если одна фаза DS18B20_QTY = 2; // то датчиков температуры 2 } } else { // если контроль температуры симисторов отключен DS18B20_QTY = 1; // то датчик температуры 1 } for (byte sensorNumber = 0; sensorNumber < DS18B20_QTY; sensorNumber++) { eeprom_read_block((void*)&DS18B20_num[sensorNumber], (const void*)&DS18B20_num_addr[sensorNumber], sizeof(DS18B20_num[sensorNumber])); if (sensorNumber == 0) { MicroDS18B20 sensor0(DS18B20_PIN, DS18B20_num[sensorNumber]); // Создаем датчики } if (sensorNumber == 1) { MicroDS18B20 sensor1(DS18B20_PIN, DS18B20_num[sensorNumber]); // Создаем датчики } if (sensorNumber == 2) { MicroDS18B20 sensor2(DS18B20_PIN, DS18B20_num[sensorNumber]); // Создаем датчики } if (sensorNumber == 3) { MicroDS18B20 sensor3(DS18B20_PIN, DS18B20_num[sensorNumber]); // Создаем датчики } }
Но проблема в том, что датчики созданы должны быть глобально, вне функций... А вне функций я не смог заставить работать условные операторы. #if #else тоже не сработали (как я понял, их можно использовать с определенными #define "переменными". Подскажите пути решения проблемы - не хочется занимать память лишними датчиками...
То что ты хочешь фундаментально неправильно. Сделай глобальный массив указателей размером с максимальное количество датчиков и заполняй его указателями экземпляры на куче.
Вместо массива - связный список, в нем - указатели на экземпляры класса "температурный датчик"
Нет. Не даст ничего связный список, если у тебя меньше сотни ячеек и не нужны конкатенации.
То что ты хочешь фундаментально неправильно. Сделай глобальный массив указателей размером с максимальное количество датчиков и заполняй его указателями экземпляры на куче.
Можете поподробнее (или ткнуть носом где доступно для новичков почитать можно)? А то я пока "ненастоящий сварщик - я маску на стройке нашел".
Даст или не даст - пусть решает ТС. Он просил указать путь.
почитать можно в учебнике по С++
Можете поподробнее (или ткнуть носом где доступно для новичков почитать можно)? А то я пока "ненастоящий сварщик - я маску на стройке нашел".
смысл в том, что никакие операторы не могут размещаться вне функций и процедур. Таким образом, создать глобальные переменные по условию if-else невозможно. Но можно создать глобальную ссылку на обьект, а сам обьект создать в процедуре:
благодаря тому, что указатель обьявлен глобально, обьект, на который он указывает - будет виден во всех частях программы, хотя и создан внутри процедуры setup()
смысл в том, что никакие операторы не могут размещаться вне функций и процедур. Таким образом, создать глобальные переменные по условию if-else невозможно. Но можно создать глобальную ссылку на обьект, а сам обьект создать в процедуре:
Большое спасибо - понятно и доступно, пошел применять.