반응형
아두이노 freeRTOS 튜토리얼  10
Arduino FreeRTOS2015. 1. 15. 17:35아두이노 freeRTOS 튜토리얼 10

5개까지 값을 넣을 수 있는 큐를 하나 생성하고 3개의 태스크가 각각 100,200,300이라는 값을 넣습니다. 또 다른 태스크 하나가 실행되어 큐에서 데이터를 꺼내와 화면에 뿌려줍니다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" //#include "queue.h" /* Demo includes. */ #include "basic_io_avr.h" //큐에 값을 기록하는 함수 static void vSenderTask( void *pvParameters ); //큐에서 값을 꺼내오는 함수 static void vReceiverTask( void *pvParameters ); /*-------------------..

아두이노 freeRTOS 튜토리얼 9
Arduino FreeRTOS2015. 1. 15. 15:49아두이노 freeRTOS 튜토리얼 9

태스크 1이 실행되면 자신보다 우선순위 높은 태스크 2를 생성한다. 그러면 태스크2가 바로 실행되는데 이때 자기 자신을 삭제한다. 결과적으로 가장 높은 우선순위를 가진 태스크1이 다시 실행되어 앞의 과정을 반복하게 된다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" /* Demo includes. */ #include "basic_io_avr.h" //두 개의 태스크에서 사용할 함수 선언 void vTask1( void *pvParameters ); void vTask2( void *pvParameters ); //Task2에 대한 핸들을 저장할 변수 선언 TaskHandle_t xTask2Handle; /*----..

아두이노 freeRTOS 튜토리얼 8
Arduino FreeRTOS2015. 1. 15. 09:40아두이노 freeRTOS 튜토리얼 8

우선순위 높은 태스크1만 실행되야 하는데 태스크 1에서 태스크2의 우선순위를 높여서 태스크 2를 실행되도록 하고 태스크1은 우선순위가 그보다 낮아서 실행이 안됩니다. 다시 태스크 2에서 자신의 우선순위를 낮추어서 태스크1만 실행되게 해주는데 결국 태스크1과 태스크2가 번갈아 가며 실행되게 됩니다. 첨에 이해가 잘 안되서 단계별로 코드를 나누어서 분석해봤습니다. 1단계 /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" /* Demo includes. */ #include "basic_io_avr.h" //두 개의 태스크 함수 선언 void vTask1( void *pvParameters ); void vTask2( void..

아두이노 freeRTOS 튜토리얼 7
Arduino FreeRTOS2015. 1. 14. 21:53아두이노 freeRTOS 튜토리얼 7

태스크들이 딜레이 함수에 의해서 대기상태가 되면 IDLE 태스크가 실행되면서 후크 함수 vApplicationIdleHook 가 호출된다. 이때 마다 이 함수 내부에서 카운터를 증가시킨다. 즉 아래에서 보이는 숫자는 후크 함수가 호출된 횟수이다. 두 개의 태스크에서 모두 딜레이 함수를 뺴버리면 후크함수가 한번도 호출되지 않는 것을 볼 수 있다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" /* Demo includes. */ #include "basic_io_avr.h" //태스크에서 사용될 함수 void vTaskFunction( void *pvParameters ); //idle task hook 함수에 의해서 ..

아두이노 freeRTOS 튜토리얼 6
Arduino FreeRTOS2015. 1. 14. 21:05아두이노 freeRTOS 튜토리얼 6

여섯번째 예제는 딜레이없이 계속 두 개의 태스크가 문자열을 출력하는 상황에서 vTaskDelayUntil함수를 사용하여 정확히 500밀리세컨드마다 자신의 문자열을 출력하려는 태스크의 동작을 보여줍니다. 얼마나 오차가 생기는지 볼려고 주기적으로 실행되는 태스크에서 밀리세컨드로 스케줄러가 시작된 이후로 지난 시간을 출력해봤습니다. 초반에는 0, 500, 1001로 거의 500밀리세컨드마다 실행되는듯 하지만.. 좀 지나면 24017, 24521, 25025로 오차가 약간 커지는걸 볼 수 있었습니다. freeRTOS함수들은 아직 익숙치 않아서 시간을 Serial.print함수를 이용해서 출력했는데 이로 인해 생긴 오차가 아닐지 약간 걱정이 되네요.. /* FreeRTOS.org includes. */ #incl..

아두이노 freeRTOS 튜토리얼 5
Arduino FreeRTOS2015. 1. 14. 20:19아두이노 freeRTOS 튜토리얼 5

네번째 예제와 달리 두 개의 태스크의 우선순위를 똑같이 하더라도 번갈아가며 실행되는 것을 볼 수 있다. /* FreeRTOS.org includes. */ //#include "FreeRTOS.h" //#include "task.h" #include "FreeRTOS_AVR.h" /* Demo includes. */ #include "basic_io_avr.h" //태스크에서 사용되는 함수 void vTaskFunction( void *pvParameters ); //태스크로 넘겨줄 두 개의 문자열을 선언 const char *pcTextForTask1 = "Task 1 is running\r\n"; const char *pcTextForTask2 = "Task 2 is running\t\n"; /*--..

아두이노 freeRTOS 튜토리얼 4
Arduino FreeRTOS2015. 1. 14. 20:03아두이노 freeRTOS 튜토리얼 4

네번째 예제는 그동안 for문으로 일정시간 대기 했던 것을 vTaskDelay함수를 사용하도록 변경합니다. 두 개의 태스크의 우선순위가 서로 다른 경우에는 번갈아 가며 실행되지만…. 두 개의 태스크의 우선순위가 같으면 for문을 사용했을 때와 달리 똑같은 태스크가 두 번씩 실행되네요. /* FreeRTOS.org includes. */ //#include "FreeRTOS.h" //#include "task.h" #include "FreeRTOS_AVR.h" /* Demo includes. */ #include "basic_io_avr.h" //태스크에서 사용되는 함수 void vTaskFunction( void *pvParameters ); //태스크로 넘겨줄 두 개의 문자열을 선언 const char..

아두이노 freeRTOS 튜토리얼 3
Arduino FreeRTOS2015. 1. 14. 19:39아두이노 freeRTOS 튜토리얼 3

세번째 예제는 똑같이 두 개의 태스크를 실행하는데 우선순위를 다르게 하면 어떻게 되는지를 보여줍니다. 아두이노에 업로드 시켜보며 우선선위가 높은 태스크2만 계속 출력되는 것을 확인할 수 있습니다. 이전 예제들에서는 두 개의 태스크가 모두 우선순위가 같아서 번갈아 문자열이 출력 되었죠. /* FreeRTOS.org includes. */ //#include "FreeRTOS.h" //#include "task.h" #include "FreeRTOS_AVR.h" /* Demo includes. */ #include "basic_io_avr.h" /* Used as a loop counter to create a very crude delay. */ #define mainDELAY_LOOP_COUNT 4000..

아두이노 freeRTOS 튜토리얼 2
Arduino FreeRTOS2015. 1. 14. 19:23아두이노 freeRTOS 튜토리얼 2

두번째 예제에서는 하나의 함수를 구현해놓고 두 개의 태스크에서 같이 사용하는 것을 보여줍니다. 어떤 태스크가 돌고 있는지 구분하기 위해서 파라메터로 문자열을 넘겨주어 태스크가 출력하도록 하고 있습니다. 실행결과는 첫번째 예제와 동일합니다. /* FreeRTOS.org includes. */ //#include "FreeRTOS.h" //#include "task.h" #include "FreeRTOS_AVR.h" /* Demo includes. */ #include "basic_io_avr.h" /* Used as a loop counter to create a very crude delay. */ #define mainDELAY_LOOP_COUNT 400000// ( 0xffffff ) //태스크에서 ..

아두이노 freeRTOS 튜토리얼 1
Arduino FreeRTOS2015. 1. 14. 14:59아두이노 freeRTOS 튜토리얼 1

아래 포스팅으로 설치된 예제코드들을 하나씩 분석해보고 있습니다. 아두이노 코드랑 freeRTOS코드랑 같이 사용하는게 생소하네요. freeRTOS는 각 포팅되는 플랫폼에서 사용되는 함수들하고 같이 사용되어 지는 거 같네요. Arduino Uno에서 freeRTOS 올려보기 http://webnautes.tistory.com/595 첫번째 예제는 두 개의 택스트가 시리얼로 문자열을 출력하는 예제입니다. Task2와 Task1이 번갈아 가며 출력됩니다. /* FreeRTOS.org includes. */ //#include "FreeRTOS.h" //#include "task.h" #include "FreeRTOS_AVR.h" /* Demo includes. */ #include "basic_io_avr.h..

반응형
image