우선순위 높은 Print2 태스크가 실행되어 자신에 해당되는 문자열을 큐에 넣고 임의의 시간 대기한다. 그 사이 태스크 1이 실행되어 자신에 해당되는 문자열을 넣고 임의의 시간 대기한다. 태스크2의 대기 시간보다 짧아서 여러 번 실행될 수 있다. 다른 태스크들이 블록되어 있는 동안 우선순위 가장 낮은 Gatekeeper 태스크가 큐에 있는 데이터를 출력한다. 틱 후크 인터럽트가 발생하면 틱 인터럽트 서비스 루틴이 실행되어 큐에 대응되는 문자열을 넣는다. 역시 나중에 Gatekeeper 태스크에서 출력되어 진다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" //#include "semphr.h" /* Compiler ..
처음 실행시키면 vIntegerGenerator태스크보다 vStringPrinter태스크의 우선순위가 높기때문에 먼저 실행이 되나 큐가 비어있기때문에 블록 상태가 된다. 따라서 vIntegerGenerator태스크가 실행되지만 vTaskDelayUntil함수를 사용했기 때문에 정해준 값인 200밀리세컨드마다 대기상태에서 벗어나와 작업을 시작할 수 있다. vIntegerGenerator에서 증가시킨 정수값을 큐에 넣는 것을 5번 반복한 후 인터럽트를 발생시킨다. 인터럽트 서비스 루틴인 vExampleInterruptHandler 함수가 호출된다. vExampleInterruptHandler에서 정수값을 넣은 큐에서 데이터를 꺼내와서 정수에 대응되는 문자열을 큐에 문자열을 넣는 큐에 넣는다. 정수값을 꺼내오..
큐에 값을 넣는 태스크를 두 개 선언하는데 파라메터로 자신을 나타내는 ID와 출력할 값을 구조체에 넣어 넘겨줍니다. 다른 하나의 태스크가 구조체를 꺼내어 ID와 값을 출력합니다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" //#include "queue.h" /* Demo includes. */ #include "basic_io_avr.h" #define mainSENDER_1 1 #define mainSENDER_2 2 //큐에 값을 넣는 함수 static void vSenderTask( void *pvParameters ); //큐에서 값을 가져오는 함수 static void vReceiverTask( void..
5개까지 값을 넣을 수 있는 큐를 하나 생성하고 3개의 태스크가 각각 100,200,300이라는 값을 넣습니다. 또 다른 태스크 하나가 실행되어 큐에서 데이터를 꺼내와 화면에 뿌려줍니다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" //#include "queue.h" /* Demo includes. */ #include "basic_io_avr.h" //큐에 값을 기록하는 함수 static void vSenderTask( void *pvParameters ); //큐에서 값을 꺼내오는 함수 static void vReceiverTask( void *pvParameters ); /*-------------------..