반응형

 

 

태스크들이 딜레이 함수에 의해서 대기상태가 되면 IDLE 태스크가 실행되면서 후크 함수 vApplicationIdleHook 가 호출된다. 이때 마다 이 함수 내부에서 카운터를 증가시킨다. 즉 아래에서 보이는 숫자는 후크 함수가 호출된 횟수이다.

 

두 개의 태스크에서 모두 딜레이 함수를 뺴버리면 후크함수가 한번도 호출되지 않는 것을 볼 수 있다.

 

 

  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 vTaskFunction( void *pvParameters );  
  11.     
  12. //idle task hook 함수에 의해서 값이 증가되는 변수  
  13. volatile unsigned long ulIdleCycleCount = 0UL;  
  14.     
  15. //태스크로 넘겨줄 문자열 선언  
  16. const char *pcTextForTask1 = "Task 1 is running\r\n";  
  17. const char *pcTextForTask2 = "Task 2 is running\t\n";  
  18.     
  19. /*-----------------------------------------------------------*/  
  20.     
  21. void setup( void )  
  22. {  
  23.   Serial.begin(9600);  
  24.       
  25.   // 개의 태스크를 우선순위 다르게 해서 생성  
  26.   xTaskCreate( vTaskFunction, "Task 1", 200, (void*)pcTextForTask1, 1, NULL );  
  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.       
  43.   for( ;; )  
  44.   {  
  45.     //태스크이름과 후크 함수가 호출된 횟수를 출력한다  
  46.     vPrintStringAndNumber( pcTaskName, ulIdleCycleCount );  
  47.     
  48.     //250 밀리세컨드 동안 대기 상태가 된다  
  49.     vTaskDelay( 250 / portTICK_PERIOD_MS );  
  50.   }  
  51. }  
  52. /*-----------------------------------------------------------*/  
  53.     
  54. //다른 태스크들이 실행되지 않고 IDLE 태스크가 실행 중일  호출된다.  
  55. extern "C"// FreeRTOS expects C linkage  
  56.   void vApplicationIdleHook( void )  
  57.   {  
  58.     //후크 함수 내부에서 카운터를 증가시킨다.  
  59.     // 함수가 호출된 횟수를 가리킨다.  
  60.     ulIdleCycleCount++;  
  61.   }  
  62. }  
  63. //------------------------------------------------------------------------------  
  64. void loop() {}  


반응형

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

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


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

+ Recent posts