아두이노 freeRTOS 튜토리얼 9Arduino FreeRTOS2015. 1. 15. 15:49
Table of Contents
반응형
태스크 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;
- /*-----------------------------------------------------------*/
- void setup( void )
- {
- //태스크내에서 malloc같은 동적메모리를 사용하기 위해서 선언해주어야 한다.
- __malloc_heap_end = (char*)RAMEND;
- Serial.begin(9600);
- //첫번째 태스크를 우선순위 1로 선언
- xTaskCreate( vTask1, "Task 1", 200, NULL, 1, NULL );
- //스케줄러 시작한다.
- vTaskStartScheduler();
- for( ;; );
- // return 0;
- }
- /*-----------------------------------------------------------*/
- void vTask1( void *pvParameters )
- {
- const TickType_t xDelay100ms = 100 / portTICK_PERIOD_MS;
- for( ;; )
- {
- //태스크 이름을 출력한다.
- vPrintString( "Task1 is running and create Task2\r\n" );
- //두번째 태스크를 첫번째 태스크보다 우선순위를 더 높게 선언
- //핸들을 얻기 위해서 xTask2Handle 변수의 주소를 넘겨주고 있다.
- xTaskCreate( vTask2, "Task 2", 200, NULL, 2, &xTask2Handle );
- //태스크2의 우선순위가 더 높기때문에 태스크1에서 여기를 실행할때 쯤에는
- //이미 태스크2는 실행되서 자신을 삭제했을 것이다.
- //100밀리세컨드 동안 시간을 지연시킨다.
- vTaskDelay( xDelay100ms );
- }
- }
- /*-----------------------------------------------------------*/
- void vTask2( void *pvParameters )
- {
- vPrintString( "Task2 is running and about to delete itself\r\n" );
- //원래는 NULL을 넘겨주어도 삭제할 수 있으나 여기에서는
- //태스크1에서 저장했던 태스크2에 대한 핸들을 이용하여 자신을 제거한다.
- vTaskDelete( xTask2Handle );
- }
- /*-----------------------------------------------------------*/
- void loop() {}
반응형
'Arduino FreeRTOS' 카테고리의 다른 글
아두이노 freeRTOS 튜토리얼 11 (0) | 2015.01.16 |
---|---|
아두이노 freeRTOS 튜토리얼 10 (0) | 2015.01.15 |
아두이노 freeRTOS 튜토리얼 8 (0) | 2015.01.15 |
아두이노 freeRTOS 튜토리얼 7 (0) | 2015.01.14 |
아두이노 freeRTOS 튜토리얼 6 (0) | 2015.01.14 |