개발/ESP32, ESP8266
[ESP32] esp_timer 와 sleep 모드 동시 사용시 발생하는 간섭
어중E
2023. 1. 21. 23:30
[ESP32] esp_timer와 sleep 모드 동시 사용 시 발생하는 간섭
ESP-IDF에는esp_timer 가 있습니다. 해당 timer는 task에서 제어됩니다. sleep 모드도 같이 사용할 경우 task가 제대로 작동되지 않는 문제가 발생합니다.
이런 경우에는 하드웨어 타이머를 사용하는 것이 좋습니다. 따라서 esp_timer 보다는 FreeRTOS에서 제공하는 하드웨어 타이머 함수들을 사용하면, 타이머 인터럽트가 제대로 작동하지 않는 문제들을 해결할 수 있습니다.
저의 경우에는 esp_timer와 ble 기능과 modem sleep을 활성화하고 나면, esp_timer로 등록된 타이머 인터럽트 함수가 제대로 작동하지 않는 것을 확인했습니다.
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "freertos/timers.h"
...
TimerHandle_t xOneShotTimer, xAutoReloadTimer;
static void opneShotFunc(TimerHandle_t xTimer)
{
...
}
static void autoReloadFunc(TimerHandle_t xTimer)
{
...
}
void app_main(void)
{
...
//5초후 1회만 진행
xOneShotTimer = xTimerCreate("OneShot", pdMS_TO_TICKS(5000UL), pdFALSE, 0, opneShotFunc);
//60초마다 1회 진행 반복
xAutoReloadTimer = xTimerCreate("AutoReload", pdMS_TO_TICKS(60000UL), pdTRUE, 0, autoReloadFunc);
//타이머 실행
xTimerStart(xOneShotTimer, 0);
xTimerStart(xAutoReloadTimer, 0);
...
}
https://www.esp32.com/viewtopic.php?t=20374