Ну можно юзать таймеры фриртос. xTimerCreate хотя бы. Они то наверняка должны встать вместе с прошивкой
Qwen3-235B-A22B 10:18 PM
📌 Анализ кода stwd100.c и рекомендации по исправлению проблем
🔍 Проблемы в текущем коде
Вы сообщаете, что:
• Связь работает через CMUX .
• Проблем с сертификатами нет .
• TLS-соединение работает только при отключенном таймере STWD100 .
•
Это указывает на то, что таймер STWD100 мешает работе TLS / MQTT , хотя он не связан напрямую с сетевыми операциями.
❗ Основная проблема: частый вызов gpio_set_level() в контексте таймера
Ваш таймер вызывает callback каждые HALF_PERIOD_MS миллисекунд (например, 375 мс), и в нем выполняется:
c
9
1
›
gpio_set_level(WDI_PIN, state);
Так как это статический таймер , запущенный с периодом HALF_PERIOD_MS, он генерирует прерывания и вызывает функцию обратного вызова внутри ядра FreeRTOS.
Проблема: Вызов gpio_set_level() в контексте таймера может быть небезопасным , особенно если этот вызов происходит в критических секциях или блокирует выполнение других задач.
Кроме того:
• Функция xTimerStart() вызывается из stwd100_init(), но неясно, где она используется.
• Если период слишком маленький (например, менее 50 мс), это может нарушить работу сетевых задач ESP-IDF , которые чувствительны к частым переключениям контекста.
•
✅ Решения и оптимизации
1. Используйте задачу вместо таймера
Таймеры в FreeRTOS имеют ограничения — они работают в контексте системной задачи и могут вызывать проблемы с производительностью.