반응형 Arduino FreeRTOS21 아두이노 freeRTOS 튜토리얼 20 컨택스트 스위치 발생시 펄스 발생하는데 걸리는 시간과 그냥 만들었을 때 펄스 발생하는데 걸리는 시간을 비교스코프가 없어서 오차있겠지만 그냥 소프트웨어적으로 측정해봄 아두이노 Uno의 경우 스코프로 재면 50마이크로세컨트 차이난다는데 여기에선 70마이크로 세컨드 정도 차이남. // Test to determine context switch time with a semaphore // Connect a scope to pin 13 // Measure difference in time between first pulse with no context switch // and second pulse started in ledControl and ended in ledOffTask. // Difference sho.. Arduino FreeRTOS 2015. 1. 18. 더보기 ›› 아두이노 freeRTOS 튜토리얼 19 – 세 개의 태스크 실행 세 개의 태스크를 수행한다. LED를 깜빡이게 하는 테스크 현재 남은 스택크기와 힙의 크기를 시리얼로 출력하는 태스크 IDLE 루프 // Simple demo of three threads // LED blink thread, print thread, and idle loop #include const uint8_t LED_PIN = 13; volatile uint32_t count = 0; // handle for blink task TaskHandle_t blink; //------------------------------------------------------------------------------ //LED를 깜빡이게 하는 태스크가 우선순위가 가장 높다. static void vLEDFl.. Arduino FreeRTOS 2015. 1. 17. 더보기 ›› 아두이노 freeRTOS 튜토리얼 18 – LED 2개 번갈아가며 깜빡이게 하기 LED 2개가 번갈아 가며 켜지는 예제를 세마포어 2개를 이용하여 만들어봤습니다. 세마포어를 얻으면 서로 상대방의 LED를 끄고 자신의 LED를 켜는 구조입니다. 처음에 어쩔 수 없이 한쪽 LED켜는 태스크에 세마포어를 주어서 시작하는 방식을 이용했습니다.. 아직 공부 중이라 이게 올바른 방법인지는 모르겠군요. 많은 구현 방법 중 하나라고 생각됩니다. #include //LED를 연결하는 핀 번호 const uint8_t LED_PIN = 13; const uint8_t LED_PIN2 = 9; //세마포어 핸들을 선언 SemaphoreHandle_t sem; SemaphoreHandle_t sem2; static void Thread1(void* arg) { pinMode(LED_PIN2, OUTPUT.. Arduino FreeRTOS 2015. 1. 17. 더보기 ›› 아두이노 freeRTOS 튜토리얼 17 - LED깜빡이게 하기 역시 마찬가지로 아래 포스팅에서 설치했던 라이브러리에 포함되어있던 예제를 분석합니다. 이제 여섯 개가 남았군요.. Arduino Uno에서 freeRTOS 올려보기(http://webnautes.tistory.com/595 ) 우선순위 높은 Thread1이 먼저 실행되지만 사용 가능한 세마포어가 없어 무한정 기다리게 된다. 이때 우선순위 낮은 Thread2가 실행되어 LED 를 켜고 200밀리세컨드 대기했다가 세마포어를 놓아주면 다시 우선순위 높은 Thread1이 실행되어 세마포어를 획득한 후 LED를 끄게 되고 다시 세마포어를 기다리는 상태가 된다. 그러면 다시 Thread2에서 200밀리세컨드 더 기다렸다가 다시 LED를 켜게 된다. 결과적으로 LED를 200밀리세컨드 주기로 깜빡이게 만든다. /* .. Arduino FreeRTOS 2015. 1. 17. 더보기 ›› 아두이노 freeRTOS 튜토리얼 16 우선순위 높은 Print2 태스크가 실행되어 자신에 해당되는 문자열을 큐에 넣고 임의의 시간 대기한다. 그 사이 태스크 1이 실행되어 자신에 해당되는 문자열을 넣고 임의의 시간 대기한다. 태스크2의 대기 시간보다 짧아서 여러 번 실행될 수 있다. 다른 태스크들이 블록되어 있는 동안 우선순위 가장 낮은 Gatekeeper 태스크가 큐에 있는 데이터를 출력한다. 틱 후크 인터럽트가 발생하면 틱 인터럽트 서비스 루틴이 실행되어 큐에 대응되는 문자열을 넣는다. 역시 나중에 Gatekeeper 태스크에서 출력되어 진다. /* FreeRTOS.org includes. */ #include "FreeRTOS_AVR.h" //#include "task.h" //#include "semphr.h" /* Compiler .. Arduino FreeRTOS 2015. 1. 16. 더보기 ›› 반응형 이전 1 2 3 4 5 다음