반응형

 

태스크 1이 실행되면 자신보다 우선순위 높은 태스크 2를 생성한다.

그러면 태스크2가 바로 실행되는데 이때 자기 자신을 삭제한다.

결과적으로 가장 높은 우선순위를 가진 태스크1이 다시 실행되어 앞의 과정을 반복하게 된다.

 

 

 

  1. /* FreeRTOS.org includes. */  
  2. #include "FreeRTOS_AVR.h"  
  3. //#include "task.h"  
  4.     
  5. /* Demo includes. */  
  6. #include "basic_io_avr.h"  
  7.     
  8.     
  9. // 개의 태스크에서 사용할 함수 선언    
  10. void vTask1( void *pvParameters );  
  11. void vTask2( void *pvParameters );  
  12.     
  13.     
  14. //Task2 대한 핸들을 저장할 변수 선언  
  15. TaskHandle_t xTask2Handle;  
  16.     
  17. /*-----------------------------------------------------------*/  
  18.     
  19. void setup( void )  
  20. {  
  21.   //태스크내에서 malloc같은 동적메모리를 사용하기 위해서 선언해주어야 한다.  
  22.   __malloc_heap_end = (char*)RAMEND;  
  23.       
  24.   Serial.begin(9600);  
  25.     
  26.   //첫번째 태스크를 우선순위 1 선언  
  27.   xTaskCreate( vTask1, "Task 1", 200, NULL, 1, NULL );  
  28.     
  29.   //스케줄러 시작한다.  
  30.   vTaskStartScheduler();  
  31.     
  32.   for( ;; );  
  33. //  return 0;  
  34. }  
  35. /*-----------------------------------------------------------*/  
  36.     
  37. void vTask1( void *pvParameters )  
  38. {  
  39.    const TickType_t xDelay100ms = 100 / portTICK_PERIOD_MS;  
  40.     
  41.   for( ;; )  
  42.   {  
  43.     //태스크 이름을 출력한다.  
  44.     vPrintString( "Task1 is running and create Task2\r\n" );  
  45.     
  46.     //두번째 태스크를 첫번째 태스크보다 우선순위를  높게 선언  
  47.     //핸들을 얻기 위해서 xTask2Handle 변수의 주소를 넘겨주고 있다.  
  48.     xTaskCreate( vTask2, "Task 2", 200, NULL, 2, &xTask2Handle );  
  49.     
  50.     //태스크2 우선순위가  높기때문에 태스크1에서 여기를 실행할때 쯤에는  
  51.     //이미 태스크2 실행되서 자신을 삭제했을 것이다.  
  52.     //100밀리세컨드 동안 시간을 지연시킨다.  
  53.     vTaskDelay( xDelay100ms );  
  54.   }  
  55. }  
  56.     
  57. /*-----------------------------------------------------------*/  
  58.     
  59. void vTask2( void *pvParameters )  
  60. {  
  61.   vPrintString( "Task2 is running and about to delete itself\r\n" );  
  62.       
  63.   //원래는 NULL 넘겨주어도 삭제할  있으나 여기에서는  
  64.   //태스크1에서 저장했던 태스크2 대한 핸들을 이용하여 자신을 제거한다  
  65.   vTaskDelete( xTask2Handle );  
  66. }  
  67. /*-----------------------------------------------------------*/  
  68. void loop() {}  


반응형

해본 것을 문서화하여 기록합니다.


포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기

댓글을 달아 주세요

">