반응형
태스크 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 |