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

А какой максимальный размер принимаемых сообщений?
Может, лучше выделить постоянный буфер, и быть спокойным, что ничто ничего не затрёт?

Не наговаривайте напраслину.
Математически тождественно:

void CSingleTimer::Tick()
{
  bool bCheck = false;
  const int iCheckPrevDiffMs = millis() - m_ulLastCheck;
  if (iCheckPrevDiffMs > PERIOD_CHECK_ACTION_TIME_MS)
  {
    m_ulLastCheck = millis();
    bCheck = true;
  }
  ...

Мой рабочий код активации события. Срабатывает сразу при превышении времени от прошлого события. Сработает, если были заняты и время активации уже прошло, срабатывает при первом запуске (холодный старт).

Вопрос иного характера.Код работал (написан криво,работал около 2х недель)но работал.
Теперь при перезаливке скетча ,отключении питания,перезаливке загрузчика,реакции на сообщения нет .Как в начале этой темы пол года назад.
В мониторе порта видно ,что пришло сообщение,номер с которого пришло,текст сообщения,цикл loop продолжает работать(включать ,выключать реле согласно программе)и может отправлять сообщения о аварийной ситуации.
На сообщения с запросом состояния или изменением программы или параметров программы не реагирует.
Может еепром имеет какой-то не очень большой ресурс?или иная проблема аппаратного характера.

Так бывает иногда. Молнии, нейтрино опять же бороздят просторы космоса, статика)

А где он у вас используется?

String

:sweat_smile: все расходимся)))

Всё норм - пятница.

черт, я и позабыл))
нада…

Создать тему, а то - авто пробег, велопробег - будет алкопробег.

да есть уже
https://forum.arduino.ru/t/pyatnichnye-polyany/12185

Чему? Вот этому?

Тождественно?

Вы ж, вроде, программист … перегрелись что ли? Берегите себя, МЧС не зря про жару предупреждает.

@максим83 вы бы выложили свой актуальный код, а то, похоже, я тут сумятицу внёс :face_without_mouth:

Перезагружай ее по таймеру каждый день, да и все

Или выпишите мне, пожалуйста, записку, чтобы с работы в пятницу уже отпустили…

+100500

для байта без знака uint8_t
40 - 200 > 10 ---> -160 + 255 > 10  ---->  95 > 10 
а это уже не тождественно))
40 > 10 + 200

или жарко сегодня и я перегрелся :sweat_smile:

Там такие же типы:

long lastUpdate = millis();                     // Время последнего обновления
long updatePeriod = 60000;    

Месяц после запуска может жить. Если не заморачиваться, запланированный перезапуск делать раз в месяц (если можно - то чаще), и забыть про переполнение миллиса.

Сигнед - дней 25, беззнаковый поболе.

что точно, так это то что я не ослеп еще))

Т.е. Вы утверждаете, что вот эти два выражения эквиваленты?

Ну, тогда скажите там на работе, что перегрелись и Вам домой срочно надо, а если не поверят, попросите их запустить на Uno или любом симуляторе

вот этот скетч
///////////////////////////////////////////
//
//	Проверяем утверждение, что выражение
//			milis - last > PERIOD
//	тождественно выражению: 
//			milis > PERIOD + last
//
//	Используем константы того же типа, что и результат millis()
//
constexpr uint32_t last = 4294966297ul;
constexpr uint32_t milis = 4294966297ul;
constexpr uint32_t PERIOD = 2000ul;
//
//	Вычисляем сравниваемые выражения
//
constexpr bool ineq1 = milis - last > PERIOD;
constexpr bool ineq2 = milis > PERIOD + last;

//
//	Печатаем для визуального сравнения
//
void setup(void) {
	Serial.begin(9600);

	Serial.print("ineq1=");
	Serial.println(ineq1 ? "TRUE" : "FALSE");

	Serial.print("ineq2=");
	Serial.println(ineq2 ? "TRUE" : "FALSE");
}
void loop(void) {}
//
//	РЕЗУЛЬТАТ:
//		ineq1=FALSE
//		ineq2=TRUE
//
//	Вывод - выражения НЕ тождественны.
//

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