[아두이노] ESP32 main.cpp
아두이노는 초기화는 setup() 함수에서 처리는 loop() 함수에 정의 한다.
보통 C언어는 main() 함수가 엔트리 포인트 인데 아두이노는 main() 함수가 없어 ESP32에서 시작 위치를 찾아 보았다. ESP32 같은 경우 main.cpp에 관련을 찾아 볼수 있으며 아래 코드에 setup()과 loop() 함수 호출되고 있는 것을 알수 있다.
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_task_wdt.h"
#include "Arduino.h"
TaskHandle_t loopTaskHandle = NULL;
#if CONFIG_AUTOSTART_ARDUINO
bool loopTaskWDTEnabled;
void loopTask(void *pvParameters)
{
setup();
for(;;) {
if(loopTaskWDTEnabled){
esp_task_wdt_reset();
}
loop();
if (serialEventRun) serialEventRun();
}
}
extern "C" void app_main()
{
loopTaskWDTEnabled = false;
initArduino();
xTaskCreateUniversal(loopTask, "loopTask", 8192, NULL, 1, &loopTaskHandle, CONFIG_ARDUINO_RUNNING_CORE);
}
#endif
ESP32에서는 기본 적으로 Free RTOS활용하여 제작 하였으며 멀티 코어 (CPU가 2개)여서 CPU0에서는 통신 관련 처리를 CPU1에서는 사용자 정의 로직을 처리 하도록 설계 되었다 한다.
|------------------------------------------------------------------|
| instruction | meaning |
|------------------------------------------------------------------|
| xTaskCreate() | for single core tasks |
| xTaskCreatePinnedToCore() | for assigning tasks to specific core |
| xTaskCreateUniversal() | for making cores used evenly |
|------------------------------------------------------------------|