2018년 4월 5일 목요일

ESP32에서 FreeRTOS 사용 - TASK 만들기

여기서는 ESP32에서 FreeRTOS를 사용하는 방법을 설명하겠다.

아두이노 ESP32는 기본적으로 FreeRTOS상에서 만들어졌지만 한개의 태스크만 사용한다면 FreeRTOS의 훌륭한 기능들을 활용하지 못하고 낭비하는 것이다.

예제 코드에서는 어플리케이션에 기본 아두이노 태스크 외에 하나의 태스크를 더 추가해 준다. 즉 어플리케이션은 2개의 태스크를 가지게 된다. 아두이노 태스크는 시리얼 포트로 'this is Arduino task'란 글자를 출력하고 두번째 태스크는 'this is additional task'라는 글자를 출력한다.

태스크를 만들기 위해 xTaskCreate() API 함수를 사용했다. FreeRTOS API에 대해서는 FreeRTOS ebook을 참고해라. xTaskCreate() 함수에 대한 설명은 FreeRTOS ebook의 48페이지에 있다.

ESP32 아두이노가 FreeRTOS 기반으로 만들어 졌기 때문에 따로 FreeRTOS 헤더파일을 include 하지 않아도 된다.

void setup() {
  Serial.begin(115200);
  // 새 태스크 생성
  xTaskCreate(
      additionalTask,           // Task 함수 이름
      "additional Task",        // Task 이름
      10000,                    // Task 스택 크기
      NULL,                     // Task 파라미터
      1,                        // Task 우선순위
      NULL);                    // Task handle
}

// loop() 함수는 ESP32 loopTask에 의해 무한히 호출됨

void loop() {
  Serial.println("this is Arduino Task");
  delay(1000);
}


// additionalTask 가 생성될 때 이 함수가 호출됨
void additionalTask( void * parameter )
{

  for(;;){
    Serial.println("this is additional Task");
    delay(1000);
  }
  // 종료되면 Task 삭제
  // 하지만 위의 무한루프 때문에 호출될 수 없음

  vTaskDelete( NULL );
}


보드에 업로드 해 실행한 결과는 다음과 같다.





댓글 1개: