Встрял на ровном месте! Обьясните почему так!
- Войдите на сайт для отправки комментариев
Пнд, 11/05/2020 - 21:35
Доброгодня!
Народ ткните пальцем почему так происходит?
Есть тривиальная функция, в ней вывод в порт значения, она стоит в loop и вызывается каждые 5 сек.
Но при этом показания в сериале плюсуются, хотя static нигде не стоит и функция соответственно после каждого вызова завершается! Весь мозг сломал, вижу что решение банально но я видимо думаю не в том направлении!
void getCheckSum(); void setup() { Serial.begin(9600); } void loop() { getCheckSum(); delay(5000); } void getCheckSum(){ uint8_t i, checksum; uint8_t readC_cmd[9] = {0xFF, 0x01, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49}; for(i=1; i<8; i++){ checksum += readC_cmd[i]; } Serial.println(checksum); }
вывод в сериал:
10 33 56 79 102 125 148 171 194 217 240 7 30 53 76
хотя значение должно оставаться постоянным : 23
13 строка
uint8_t checksum=0;
Так, а в чём проблема, не пойму ?
если имели ввиду i, то не дело не в этом.
Так, а в чём проблема, не пойму ?
Начальное значение checksum не определено
Так, а в чём проблема, не пойму ?
А Вас не смущает, что самый первый результат у Вас 10? Посчитайте-ка вручную, сколько должно быть?
А что касается Вашей ошибки, то сначала Вам о ней сказал компилятор (если у Вас предупреждения включены). Причём он подробно объяснил суть проблемы. Потом коллега подсказал Вам на что обратить внимание. Вы уверены, что Вам нужны ещё подсказки?
Начальное значение checksum не определено
Ну, вот, блин! Обломали человеку шанс таки самому разобраться :-(
sanekru, а Вы привыкайте читать сообщения компилятора - читали бы, этой проблемы бы не было!
если имели ввиду i, то не дело не в этом.
NMi имел ввиду, что при входе в Вашу функцию нужно самому обнулять переменную checksum, что он Вам и написал.
Ну, вот, блин! Обломали человеку шанс таки самому разобраться :-(
Евгений, прошу извинения. Поторопился. Вы правы - один раз самому понять - дорогого стоит.
Парни спасибо большое, что то даже об этом не подумал, получается к мусору чтоли плюсовалось, а по поводу сообщений компилятора, так он ваапще без ошибок всё компилит, только у меня не arduino IDE а VScode & PlatformIO
Вобщем думал нулём по умолчанию инициализируется!
Собственно из официального data sheet mhz19b, пришлось разобрать функцию до безобразия, crc не сходился
А я говорю не про ошибки, а про предупреждения. Не может их не быть. Но, например, в ардуино IDE разработчики по умолчанию поставили опцию их не выводить, чтобы блондинок не смущать. А дальше каждый сам решает - блондинка он или всё же их надо включить.
Уверен, что и там их можно включить. А если таки нельзя - выбросьте в топку такую систему. Если бы Вы прочитали предупреждение, вопроса бы не было - там ясно написано, что "warning: 'checksum' may be used uninitialized in this function"
Спасибо за наводку, обязательно посмотрю где включаются данные предупреждения, сэкономил бы пару часов жизни!