반응형

 

 

아래 포스팅으로 설치된 예제코드들을 하나씩 분석해보고 있습니다. 아두이노 코드랑 freeRTOS코드랑 같이 사용하는게 생소하네요. freeRTOS는 각 포팅되는 플랫폼에서 사용되는 함수들하고 같이 사용되어 지는 거 같네요.

 

Arduino Uno에서 freeRTOS 올려보기

http://webnautes.tistory.com/595

 

 

첫번째 예제는 두 개의 택스트가 시리얼로 문자열을 출력하는 예제입니다. Task2와 Task1이 번갈아 가며 출력됩니다.

 

  1. /* FreeRTOS.org includes. */  
  2. //#include "FreeRTOS.h"  
  3. //#include "task.h"  
  4. #include "FreeRTOS_AVR.h"  
  5. /* Demo includes. */  
  6. #include "basic_io_avr.h"  
  7.     
  8. /* Used as a loop counter to create a very crude delay. */  
  9. #define mainDELAY_LOOP_COUNT  400000 // ( 0xffffff )  
  10.     
  11. /* The task functions. */  
  12. void vTask1( void *pvParameters );  
  13. void vTask2( void *pvParameters );  
  14.     
  15. /*-----------------------------------------------------------*/  
  16.     
  17. void setup( void )  
  18. {  
  19.   Serial.begin(9600);  
  20.     
  21.   //태스크를 생성한다.  
  22.   static const char *string1 = "Task 1 is running\r\n"//태스크로 넘겨줄 문자열   
  23.   xTaskCreate(  vTask1, //태스크를 구현한 함수에 대한 포인터  
  24.   "Task 1",             //태스크 이름  
  25.   200,                  //스택 깊이  
  26.   (void*)string1,                 //태스크에 넘결  매개변수에 대한 포인터  
  27.   1,                    //태스크의 우선순위  
  28.   NULL );               //태스크 핸들  
  29.     
  30.   //같은 방식으로 두번째 태스크를 생성한다.  
  31.   static const char *string2 = "Task 2 is running\r\n";  
  32.   xTaskCreate( vTask2, "Task 2", 200, (void*)string2, 1, NULL );  
  33.     
  34.     
  35.   //스케줄러를 시작한다이제  개의 태스크가 실행되게 된다.  
  36.   vTaskStartScheduler();  
  37.     
  38.   //여기까지 실행된다면 메모리가 부족한 것이다  
  39.   Serial.println( F("Insufficient RAM") );  
  40.     
  41.   for( ;; );  
  42.   //  return 0;  
  43. }  
  44. /*-----------------------------------------------------------*/  
  45.     
  46. void vTask1( void *pvParameters )  
  47. {  
  48.   const char *pcTaskName = (char*)pvParameters;  
  49.   volatile unsigned long ul;  
  50.     
  51.   //태스크는 무한 루프를 돈다.  
  52.   for( ;; )  
  53.   {  
  54.     //태스크 이름을 출력한다.  
  55.     vPrintString( pcTaskName );  
  56.     
  57.     // vTaskDelay() 함수를 사용 하여 Delay 기능을 구현 하면  
  58.    // Delay 상태 동안 Task Suspended 상태가 되기  
  59.    // 때문에 Priority  관계 없이 다음 Task 실행 된다.  
  60.    // 그러므로, Priority  따라 Task Running 되는 것을  
  61.    // 관찰 하기 위하여 for Loop 이용한 Delay 사용 한다.  
  62.    //참고 http://goo.gl/eizFMp  
  63.     for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )  
  64.     {  
  65.     }  
  66.   }  
  67. }  
  68. /*-----------------------------------------------------------*/  
  69.     
  70. void vTask2( void *pvParameters )  
  71. {  
  72.   const char *pcTaskName = (char*)pvParameters;  
  73.   volatile unsigned long ul;  
  74.     
  75.   //태스크는 무한 루프를 돈다.  
  76.   for( ;; )  
  77.   {  
  78.     vPrintString( pcTaskName );  
  79.     
  80.     for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )  
  81.     {  
  82.     }  
  83.   }  
  84. }  
  85.     
  86. void loop() {  
  87. }  


반응형

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

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


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

+ Recent posts