반응형

 

 

 

네번째 예제는 그동안 for문으로 일정시간 대기 했던 것을 vTaskDelay함수를 사용하도록 변경합니다.

 

두 개의 태스크의 우선순위가 서로 다른 경우에는 번갈아 가며 실행되지만….

 

두 개의 태스크의 우선순위가 같으면 for문을 사용했을 때와 달리 똑같은 태스크가 두 번씩 실행되네요.

 

  1. /* FreeRTOS.org includes. */  
  2. //#include "FreeRTOS.h"  
  3. //#include "task.h"  
  4. #include "FreeRTOS_AVR.h"  
  5.     
  6. /* Demo includes. */  
  7. #include "basic_io_avr.h"  
  8.     
  9.     
  10. //태스크에서 사용되는 함수   
  11. void vTaskFunction( void *pvParameters );  
  12.     
  13. //태스크로 넘겨줄  개의 문자열을 선언  
  14. const char *pcTextForTask1 = "Task 1 is running\r\n";  
  15. const char *pcTextForTask2 = "Task 2 is running\t\n";  
  16.     
  17. /*-----------------------------------------------------------*/  
  18.     
  19. void setup( void )  
  20. {  
  21.   Serial.begin(9600);  
  22.       
  23.   //첫번째 태스크는 우선순위 1 생성하고   
  24.   xTaskCreate( vTaskFunction, "Task 1", 200, (void*)pcTextForTask1, 1, NULL );  
  25.     
  26.   ////두번째 태스크의 우선순위 2를 1로 바꾸어 실행해본다. 
  27.   xTaskCreate( vTaskFunction, "Task 2", 200, (void*)pcTextForTask2, 2, NULL );  
  28.     
  29.   //스케줄러를 시작한다.  
  30.   vTaskStartScheduler();  
  31.     
  32.   for( ;; );  
  33.   //  return 0;  
  34. }  
  35. /*-----------------------------------------------------------*/  
  36.     
  37. void vTaskFunction( void *pvParameters )  
  38. {  
  39.   char *pcTaskName;  
  40.   pcTaskName = ( char * ) pvParameters;  
  41.     
  42.   for( ;; )  
  43.   {  
  44.     //태스크 이름을 출력  
  45.     vPrintString( pcTaskName );  
  46.     
  47.     //주어진 시간(250밀리세컨드)동안 태스크를 대기 상태로 만든다.  
  48.     vTaskDelay( 250 / portTICK_PERIOD_MS );  
  49.   }  
  50. }  
  51. //-----------------------------------------------------------------  
  52. void loop() {}  


문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


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

+ Recent posts