Sim800l и ардуино перестает принимать и отправлять смс

Не проще ли писать правильно, чтобы переполнение вообще никогда не мешало и никакие перезапуски не требовались?

Математически - да. Алгоритмически - в зависимости от типов и значений. Я не выхожу за рамки математической эквивалентности, ибо если типы, то можно поломать все и вся.
last переносится в другую часть тождества и меняет знак.

Проще. Мы же обсуждаем как сломать приведенный код. Когда в голове есть модель возникновения ошибки, легче отлаживать.

так вы программист или математик?

Нет! Как раз, математически нет!

Было бы “да”, если бы мы имели дело с числами. Но мы имеем дело с элементами множества возможных значений типа uint32_t – а это математически две большие разницы! Начать хотя бы с того, что это множество конечно (в отличие от множества чисел!) Про это сказано в конце моего поста по ссылке, почитайте.

4294966297ul

Ну что вы как школьника ловите. Я фокусы с переполнением знаю. Не доживет у него устройство до таких значений, там других проблем хватает, которые его фейлят намного раньше.

Но, если отвлечься от конкретики кода автора, я целиком вас поддерживаю, закрывать глаза на переполнение - неправильно. И даже форма записи математически тождественных вычислений влияет и на точность и вообще на достоверность.

мы просто не любим когда тут “соскальзывать” начинают…

Тогда зачем говорите, что те выражения эквивалентны? Вас же читают и ни хрена не знающие люди, которые доверяют Вашему авторитету. Они посчитают, что без разницы как писать, что они Вам плохого сделали?

Ладно, проехали.

Вот именно так думали разработчики прошивки ЗРК “Патриот”, типа мол комплекс не предназначен для постоянного длительного боевого дежурства и долго включённым не будет. А у вояк не было другого, использовали для дежурства этот. В результате, старая как Фортран, иракская ракета SCUD (она же 8К14) устроила “более 20% всех потерь американской армии за всю иракскую войну

Я сначала пишу формулы на бумажке. Потом составляю алгоритм рассчета с ними. И только потом перехожу к кодированию. На этапе кодирования формула может измениться, чтобы избежать проблем точности и переполнений.

А на крайних для типа значениях можно подловить и завалить любой алгоритм. Я всегда проверяю сначала из предположения о попадании в ширину типов. Если оно в принципе работает, то тогда пишу тесты на граничные условия. Ими тогда обкладываю ассерты и ошибки на входные значения.

У меня часто на работе перед глазами бывает код (зачастую чужой), глядя на который надо объяснить наблюдаемое поведение. У автора, он, как обычно, работает. И в моих интересах как раз найти те входные значения, на которых он рушится.

Ну а если про код автора, то ему до переполнения как до луны, к миллисам он добавляет (в обсуждаемых строчках) 1 минуту. Поэтому, как ни крути, одна запись отработает дольше всего на 1 минуту другой 8)))

Они не освоили минимальный уровень грамотности, необходимый для программирования. Быстрее поймут, что это не их область. Я за чистоту профессии. Математическая и кодовая (программная, вычислительная) эквивалентности - они разные.

Мы пишем программы 24х365, у них даже кнопок выхода нет. К счастью, раз мы не идеальные, у комплексов есть другие факторы, требующие более частых запланированных перезагрузок.

Я Вам уже писал, что нет никакой “математической” эквивалентности, т.к. здесь мы работаем не с числами, а с совершенно другими объектами.

Но, если Вы настаиваете на эквивалентности, део хозяйское …

Я настаиваю на более глубоком переписывании всего кода.
Но смакуем мы тут конкретные нюансы того что есть.
Вы любите такие цитаты:
https://ilibrary.ru/text/78/p.2/index.html
//к сожалению, не умею давать ссылку на конкретный кусочек текста, но вы умный, в первом абзаце найдете.

А кто соскальзывает? Человек борется за чистоту профессии!

Он санитар леса! :joy:

Какой браузер? Если Хром, то он сам предлагает создать такую ссылку, если навести на выделенный текст и нажать правую кнопку мыша:

Например, Н. В. Гоголь. Мертвые души. Текст произведения. Том первый. Глава первая

Во, на ардуинном форуме научился литературному приему. 8)))) Жизнь прекрасна.

Мне за ними потом разгребать!!! Может хоть вы меня в этом поймете. Доводилось?

Поставлю вопрос иначе.По какой причине один и тот же код работает сначала 3 недели затем ,после перезагрузки методом отключения питания ,2 недели ,потом ,неделю,потом 2 дня ,потом перестал .(имеется ввиду работа с обработкой смс,остальное работает)
Выходит что-то,независящее от питания ,исчерпало свой ресурс.
Опыты ставил на двух ардуинах одновременно.поведение ± одинаковое.

Надо взять третью, может у нее еепром, который String, окажется более износостойкий.

Причину Вы озвучили сами:

Ресурс называется “оперативная память”, “RAM” по-аглицки.
(Не будем придираться к “органичный” вместо “ограниченный”)

Если всё, как вы говорите, у меня есть две версии:

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

-наличие электромагнитных помех, или других факторов(жара, влага, и.т.д).
Перенесите устр-во в другое место

P.S. Кстати, о питании…
Я что-то , вроде слышал про реле?
Схема -то правильно собрана? Есть развязка реле и МК?

Вот это поворот, на основной цикл loop питание не влияет, а на часть кода по приему команд влияет))
Чертовщина какая то!