IoT

esp32 - xtaskcreatepinnedtocore 사용 시 나오는 stack canary watchpoint triggered 에러가 나올 때

검정비니 2020. 4. 24. 12:26
728x90
반응형

아두이노는 기본적으로 RTOS를 사용한다. 따라서, esp32에서 멀티 테스킹을 구현하기 위해서는 xtaskcreatepinnedtocore 메소드를 사용해서 원하는 메소드가 특정 코어에서 동시적으로 계속 동작하게 만들어야 한다.

 

아래의 코드는 xTaskCreatePinnedToCore 메소드를 사용해서 TASK_1 이라는 메소드를 0번 코어에서 동시적으로 작동하게 만든다.

 

xTaskCreatePinnedToCore (TASK_1, "TASK_1", 4096, (void *)1, 1, NULL, 0);

 

이때, 3 번째 매개변수인 4096은 새로 만들어질 TASK_1에게 허용될 스택의 최대 크기라고 보면 된다. 그런데, 만약 TASK_1 프로세스가 동작 중에 스택이 너무 많이 쌓여서 허용된 메모리량을 초과하게 되면 "stack canary watchpoint triggered" 에러가 발생하게 되면서 esp32가 자동으로 리부팅을 하게 된다.

 

wifi나 ble와 같이 기본적으로 객체를 만들기만 해도 메모리가 많이 소모되는 클래스들을 멀티 테스킹으로 사용하고자 할 때에는 충분한 양의 메모리를 사용하게 만들어 주어서 예상치 못한 상황에서 stack canary watchpoint triggered 에러가 발생하지 않도록 하는 것이 좋을 것이다.

반응형