Я ничего специально не гуглил (да и понятия не имею - что именно тут гуглить нужно), но есть такое предположение (хоть и много сегодня говорилось о строковых константах (или как там их правильно), но всё же «дьявол кроется в мелочах»).
Есть что-то в функции Serial.print/Serial.println такое интересное, может быть даже «глобальное», что заставляет println опускать «перевод каретки» и досрочно завершать работу. К сожалению, я не могу так глубоко копать как многие из постоянных участников данного форума, поэтому только «намеки» и «предположения»…
Не знаю по какой причине Евгений Петрович отметил мой предыдущий пост «лайком», возможно хочет ввести в заблуждение.
Но есть же умные люди среди нас, @MMM посмотри от какого родителя идет Serial.print , возможно в этом кроется всё?
Я еще могу припомнить @sadman41 (но что-то не хочет), @xDriver, @andriano (но тот скорее всего уже знает и просто даёт фору Петровичу), @andycat вообще молчит, @Kakmyc вроде бы высказывался (но смотрел ли полиморфизм (если не ошибаюсь)?). Простите если еще кого забыл, можно отметиться ответом )
@ЕвгенийП - официально хочу сказать, если это и не самый «запутанный вопрос», то самый интересный!!!
Работы много, забегу, почитаю, понял что нифига не понял, ушёл
Так то, работая с char строками, правду можно понять только получив строку в hex, подозреваю что монитор порта определённые последовательности байт воспринимает не так, как хотелось бы программисту.
Да он ждёт, когда вы догадаетесь…
А по факту: литералы и спецсимволы(\l,\r,\n в их числе), “константами” хранятся в памяти в одном экземпляре а вызываются через указатель по адресу.
Он тупо засирает своим “говнокодом” адрес где лежит спецсимвол переноса строки значением 0.
А так как засрал однажды, работает это уже всегда, ну или можно обратно “перезасрать”
А это уже описывалось в предыдущих выпусках говнокода.
Проверить можно тупо создав несколько разных строк с одинаковым содержимым и сравнив размер памяти.
В этом случае размер памяти не будет изменяться на размер строки, а только на размер указателя. Ну и соответственно говнокодом испоганив одну из строк (которая константная) испоганятся все разом, так как по факту эта одна и та же строка.
Чтобы догадаться, нужно быть слишком глубоко погруженным в недра языка. Что память таки бьется, понятно, а вот как именно - остается только на умных надеяться ))
Скажем так, при вызове метода Serial.println() вызывается строка “\r\n”, которая уже прописана в памяти как строка из литералов и имеет свой адрес.
При каждом новом появлении такой же строки в коде компилятор тупо линкует ссылку на этот адрес…
Ничего там не бьётся.
Там тупо меняются данные по адресу, по которому они меняться вроде как и не должны, потому что если менять их напрямую, то компилятор обидится и будет ругаться. Но мы же можем вспомнить А.В.Суворова и сделать все не напрямую, а через Альпы.