Ошибка ovf в простом скетче
- Войдите на сайт для отправки комментариев
Пнд, 30/03/2020 - 19:54
Здравствуйте!
Написал скетч, в котором данные каждого из трёх термодатчиков усредняются. Алгоритм простейший, но при работе только первый датчик выдаёт ошибку OVF, а остальные показывают нормально, хотя "показания" у всех одинаковые. Вот код, который я очень упростил для понимания, но какая-то системная ошибка в нём присутствует, и которую я никак не могу отловить. Помогите пожалуйста.
void setup(){ Serial.begin(9600); Serial.println("Test MAX6675 and Analog NTC"); delay(500); } void loop(){ int i; int n = 5; float arr_probe_1[] = {1,2,3,4,5}; //пять показаний датчика #1 float arr_probe_2[] = {1,2,3,4,5}; //пять показаний датчика #2 float arr_probe_3[] = {1,2,3,4,5}; //пять показаний датчика #3 float probe_1; float probe_2; float probe_3; for(i = 0; i < n; i++){ probe_1 += arr_probe_1[i]; //сумма пяти показаний датчика #1 probe_2 += arr_probe_2[i]; //сумма пяти показаний датчика #2 probe_3 += arr_probe_3[i]; //сумма пяти показаний датчика #3 delay(333); } probe_1 /= n; //среднее арифметическое датчика #1 probe_2 /= n; //среднее арифметическое датчика #2 probe_3 /= n; //среднее арифметическое датчика #3 Serial.print ("C1 = " ); Serial.print (probe_1 ); // Выводим температуру в °C Serial.print (" C2 = "); Serial.print (probe_2 ); // Выводим температуру в °C Serial.print (" C3 = "); Serial.println (probe_3 ); // Выводим температуру в °C }
Почему probe_N не инициализирована?
а разве в строках 14-16 не происходит инициализация всех трёх переменных?
Спасибо, заработало!
Объявление происходит, инициализация - нет.
Странно, тогда почему другие датчики отрабатывались нормально? Удалял строку с первым - ovf показывал второй...
Это как срать в 4 горшка по очереди. Вот первый и переполнился. А если срать во второй - второй переполнится быстрее всех! Ну неужели непонятно.
Проделки компилятора и оптимизатора. А вообще - предупреждения коричневым цветом читать надо, тогда и башку ломать не придется.
А ведь никаких предупреждений не было. Всё чисто и красиво...
Это как срать в 4 горшка по очереди. Вот первый и переполнился. А если срать во второй - второй переполнится быстрее всех! Ну неужели непонятно.
Честно признаться, совсем не понятно. Любой цикл - раскладывание чего-то по местам... Я проверял в исходной программе содержимое ВСЕХ промежуточных переменных и там было всё в порядке. И только на последнем этапе деления суммы , т.е. получения среднего, получалась эта ошибка. В некоторых С-образных языках объявление переменной подразумевает её первоначальное обнуление, если не указано иное. Я с этим раньше встречался.
В любом случае, спасибо за подсказку. Думаю, можно закрывать тему.
А ведь никаких предупреждений не было. Всё чисто и красиво...
Потому что они "заботливо" отключены авторами Arduino IDE в настройках. Зайдите в настройки, и выставьте там "Сообщения компилятора -> все", тогда предупреждения будут тёмно-красным цветом выводиться.
Это как срать в 4 горшка по очереди. Вот первый и переполнился. А если срать во второй - второй переполнится быстрее всех! Ну неужели непонятно.
Честно признаться, совсем не понятно. Любой цикл - раскладывание чего-то по местам... Я проверял в исходной программе содержимое ВСЕХ промежуточных переменных и там было всё в порядке. И только на последнем этапе деления суммы , т.е. получения среднего, получалась эта ошибка. В некоторых С-образных языках объявление переменной подразумевает её первоначальное обнуление, если не указано иное. Я с этим раньше встречался.
В любом случае, спасибо за подсказку. Думаю, можно закрывать тему.
Базаришь! Но, всё-таки, признайся - перед тем как сесть на горшок ты же смотришь на его состояние (true/false) правильно??? Вот и здесь нужно смотреть в ОБА за переменными, шоП патом небыло таких вопросов.
А ведь никаких предупреждений не было. Всё чисто и красиво...
Потому что они "заботливо" отключены авторами Arduino IDE в настройках. Зайдите в настройки, и выставьте там "Сообщения компилятора -> все", тогда предупреждения будут тёмно-красным цветом выводиться.
Ха!.. А ведь действительно всё отключено! Действительно выскочили абсолютно понятные предупреждения!!!
Опять же, большое спасибо за ценное замечание!