본문 바로가기

FreeRTOS

(17)
Hard Real-Time Task에서 Deadline에 도달하면 어떻게 될까? RTOS를 다루다보면 이러한 궁금증이 생길 때가 있다. 'RTOS를 실시간성이 보장되어야 하는 시스템 구현에 사용하게 되는데, 테스크가 데드라인 안에 작업을 수행하지 못한다면 어떻게 되지?' 정답을 말하면 그냥 넘어간다고 할 수 있다. RTOS 커널은 테스크가 Deadline 안으로 구현을 하게 해주는 매개체가 아니라 'deterministic Scheduling'을 보장하는 OS이기 때문이다. 그러므로 진부한 말이지만 실시간성을 보장하는 시스템을 만들기 위해선 시스템의 요구사양과 이에 맞게 어플리케이션을 디자인 하는 것이 핵심이라 할 수 있겠다. 더 자세한 내용은 아래 링크를 통해 공부해보자 https://stackoverflow.com/questions/45958888/what-happens-if-a..
FreeRTOS - 힙 메모리 관리 글의 맨 밑에 출처로 이동하시면 Amazon FreeRTOS 사이트에서 더 깔끔하게 보실 수 있습니다. 힙 메모리 관리 V9.0.0부터는 힙 메모리를 FreeRTOS 애플리케이션에 완전히 정적으로 할당할 수 있습니다. 이 말은 힙 메모리 관리자를 추가할 필요가 없다는 것을 의미합니다. 이번 단원에서 다루는 내용은 다음과 같습니다. ● FreeRTOS의 RAM 할당 시점 ● FreeRTOS와 함께 제공되는 5가지 메모리 할당 체계 예제 ● 각 메모리 할당 체계의 사용 사례 전제 조건 FreeRTOS를 사용하려면 C 프로그래밍에 대해 잘 알고 있어야 합니다. 특히 다음 사항에 정통해야 합니다. ● 컴파일 및 링크 단계를 포함한 C 프로젝트의 빌드 방식 ● 스택 및 힙에 대한 개념 ● 표준 C 라이브러리 ma..
14 FreeRTOS Tutorial: Mutex https://www.youtube.com/watch?v=rqpbQlzgws0 /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "cmsis_os.h" #include "usb_host.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "FreeRTOS.h" #include #include #include "semphr.h" /* USER CODE END Includes */ TaskHandle..
12 FreeRTOS Tutorial: Direct To Task Notifications part2 https://www.youtube.com/watch?v=cv9VIotr4Ms&list=PLEfMFrwVdbPYzMgeaLiFRb4ogjV8m3lt6&index=13&t=0s TaskHandle_t myTask1Handle = NULL; TaskHandle_t myTask2Handle = NULL; int notificationValue; void myTask1(void *pvParameters) { TickType_t xDelay = pdMS_TO_TICKS(1000); TickType_t myLastUnblock; myLastUnblock = xTaskGetTickCount(); for(;;) { xTaskNotify(myTask2Handle , 0 , eNoAction); //notification..
11 FreeRTOS Tutorial: Direct To Task Notifications part1 https://www.youtube.com/watch?v=Ht7QRfUvWsI&list=PLEfMFrwVdbPYzMgeaLiFRb4ogjV8m3lt6&index=12&t=0s /* USER CODE BEGIN 0 */ TaskHandle_t myTask1Handle = NULL; TaskHandle_t myTask2Handle = NULL; void myTask1(void *pvParameters) { TickType_t xDelay = pdMS_TO_TICKS(1000); TickType_t myLastUnblock; myLastUnblock = xTaskGetTickCount(); for(;;) { xTaskNotifyGive(myTask2Handle); vTaskDelay(1000); } } voi..
10 FreeRTOS Tutorial: Queues part2 https://www.youtube.com/watch?v=Z-XD3Q7Hqps&list=PLEfMFrwVdbPYzMgeaLiFRb4ogjV8m3lt6&index=10 TaskHandle_t myTask1Handle = NULL; TaskHandle_t myTask2Handle = NULL; QueueHandle_t myQueue; void myTask1(void *pvParameters) { TickType_t xDelay = pdMS_TO_TICKS(1000); TickType_t myLastUnblock; myLastUnblock = xTaskGetTickCount(); char myTxBuff[30]; myQueue = xQueueCreate( 5 , sizeof(myTxBuff) ); //size..
09 FreeRTOS Tutorial: Queues part1 https://www.youtube.com/watch?v=elgkseFUpmk TaskHandle_t myTask1Handle = NULL; TaskHandle_t myTask2Handle = NULL; QueueHandle_t myQueue; void myTask1(void *pvParameters) { TickType_t xDelay = pdMS_TO_TICKS(1000); TickType_t myLastUnblock; myLastUnblock = xTaskGetTickCount(); char myTxBuff[30]; myQueue = xQueueCreate( 5 , sizeof(myTxBuff) ); //size of queue (number of block), size of each block s..
08 FreeRTOS Tutorial: Task Utilities part2 이번 시간에는 TaskState에 대해 받아오는 것을 해본다. https://www.youtube.com/watch?v=hh8huHGpYLA void myTask1(void *pvParameters) { TickType_t xDelay = pdMS_TO_TICKS(1000); TickType_t myLastUnblock; myLastUnblock = xTaskGetTickCount(); //char* text = "Task1\r\n"; //char* text = pcTaskGetName(myTask1Handle); char* text = "Task1"; int count = 0; vTaskSuspend(myTask1Handle); for(;;) { vTaskDelayUntil( &myLastUnblock..