Почему Serial.println ( ); Вернуть случайные символы? - PullRequest
0 голосов
/ 26 февраля 2020

Я ломаю голову, пытаясь решить эту проблему. Для начала: * Моя скорость 9600 с обоих концов. * У меня есть массив размером 8, поэтому максимальный индекс равен 7 * Я устанавливаю каждый символ (позиции 0,1,3,4,6,7) в массиве на число 0-9 в зависимости от времени * Если я распечатаю время, оно получается отлично, за исключением случаев, когда число превышает 18:00:00 * const long для MSin1Hr, MSin24Hr, et c объявлены глобально. Ниже приведен код, который переводит время от MS к строке

* 1002. *

Я вызываю функцию, используя

getTimeStr(lightOffTime, lightTurnOffTime);

Затем я могу напечатать ее в последовательный порт, используя Serial.println(lightOffTime);

Как видите, я просто передаю массив и время в MS и он должен выскочить время в виде отформатированной строки. Любые идеи? - указанный c номер, который я передаю, - 68401000 (19:00:01), который по какой-то причине печатает 19: 00: 01h

1 Ответ

2 голосов
/ 26 февраля 2020

Вы должны иметь нулевой терминатор в конце вашей строки, чтобы сообщить функции печати, где прекратить печать. Возможно, так получилось, что в следующей точке памяти оказалось 0, пока вы не добрались до этого конкретного числа, и по какой-то причине в этом случае в конце оказались h сразу после массива в памяти, а затем, очевидно, 0 сразу после этого так как там остановился.

Так что тот факт, что он работал с другими числами, был просто случайностью. Иногда ошибки таковы, вы делаете ошибку, и по какой-то причине она, кажется, работает нормально в некоторых случаях. Это природа бега от конца массива. Они называют это «неопределенным поведением», потому что нет способа предсказать, что произойдет, когда вы сделаете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...