STM32/STM32_RTOS 7

STM32 RTOS 알아보기 6편(Mutex)

안녕하세요. 오늘은 세마포어와 뮤텍스에 대해 알아보겠습니다.(xSemaphoreCreateMutex,xSemaphoreTake,xSemaphoreGive)세마포어와 뮤텍스는 여러 태스크가 공유 자원에 안전하게 접근하도록 동기화하기 위해서 사용합니다.이 글에서는 세마포어와 뮤텍스를 알기전에 알아야 할 지식을 알아보고 뮤텍스에대해 알아보겠습니다.예를들어 아래의 코드에서 global_i는 TASK1과 TASK2가 동시에 접근하는 공유자원입니다.이런경우 임계구역(Critical Section)이 발생하고, 레이스컨디션(Race Condition)문제가 발생할 수 있습니다.void task(void *pvParameters);int global_i=0;void myTask(){  xTaskCreate(task, ..

STM32/STM32_RTOS 2025.02.16

STM32 RTOS 알아보기 5편(portYIELD_FROM_ISR)

안녕하세요. 오늘은 RTOS에서 사용하는 portYIELD_FROM_ISR에 대해 알아보겠습니다.제가 업로드했던 글 기준으로  3편에서 portYIELD_FROM_ISR 함수를  사용했었습니다.portYIELD_FROM_ISR 는 ISR종료 후 즉시 태스크 전환이 필요한 경우 Context Switching을 수행하게 해줍니다.port : FreeRTOS가 다양한 하드웨어에서 동작할 수 있도록 CPU별 맞춤 구현을 제공하는 하드웨어 적응 계층입니다.YIELD : (양보하다) 현재 실행중인 태스크가 CPU실행을 포기하고 다른 태스크에게 실행을 양보합니다.FROM_ISR : 해당기능(매크로 또는 함수)이 ISR에서 호출될 수 있음을 의미합니다.portYIELD_FROM_ISR의 코드를 보겠습니다. 매크로로 ..

STM32/STM32_RTOS 2025.02.01

STM32 RTOS 알아보기 4편(xTimerCreate,xTimerStart,xTimerStop)

안녕하세요. 오늘은 RTOS에서 사용하는 타이머를 알아보겠습니다.우선 이전글에서는 인터페이스를 CMSIS_V1로 사용했었는데 해당버전을 사용하면 타이머를 사용할때 다른코드를 추가해줘야하는게 있으므로 CMSIS_V2로 변경해서 사용하겠습니다.CMSIS_V2버전으로 바꾸고 빌드할때 freertos_mpool.h: no such file or directory와같은 에러가 나올수도 있는데 F103기준으로 펌웨어패키지 버전을 STM32Cube FW_F1 V1.8.5로 바꾸니 빌드가 됐습니다.* xTimerCreate함수TimerHandle_t xTimerCreate(const char * const pcTimerName, const TickType_t xTimerPeriodInTicks, const UBaseT..

STM32/STM32_RTOS 2025.01.28

STM32 RTOS 알아보기 3편(xQueueSendFromISR,xQueueReceiveFromISR)

안녕하세요. 오늘은 저번 2편에서 Queue에서 task끼리 send/receive를 했었는데 이번에는 ISR이랑 해보겠습니다.ISR에서 send/receive를 할때는 함수명이 다르고 기존의 함수명에 FromISR이 붙습니다. 다른 이유는 ISR은 짧은시간안에 실행되어야 하며 다른 태스크나 ISR에 의해 중단되지 않아야 합니다. 이로 인해 ISR에서 사용하는 함수들은 블로킹이 없고 간단하고 빠르게  동작됩니다. *xQueueSendFromISR함수 *xQueueSendFromISR함수BaseType_t xQueueSend( QueueHandle_t xQueue, const void BaseType_t *pxHigherPriorityTaskWoken );ISR함수에서 호출되어 큐에 데이터를 저장하는 함수..

STM32/STM32_RTOS 2024.10.04

STM32 RTOS 알아보기 2편(xQueueCreate,xQueueSend,xQueueReceive)

안녕하세요. 오늘은 RTOS의 Queue에 대해 알아보겠습니다.Queue는 먼저 집어넣은 데이터가 먼저 나오는 FIFO 구조의 저장형식입니다. RTOS에서는 TASK나 ISR에서 Queue에 데이터를 저장&불러오기를 할 수 있습니다. TASK랑 ISR에서 Queue에 접근할때 사용하는 함수가 다릅니다. ISR에서 접근할때는 함수명뒤에 FromISR()이 붙습니다. 다른 이유는 ISR은 짧은시간안에 실행되어야 하며 다른 태스크나 ISR에 의해 중단되지 않아야 합니다. 이로 인해 ISR에서 사용하는 함수들은 블로킹이 없고 간단하고 빠르게  동작됩니다. 예시) TASK에서 큐에 데이터를 보내는 함수 :  xQueueSend(),ISR에서 큐에 데이터를 보내는 함수 : xQueueSendFromISR(); *x..

STM32/STM32_RTOS 2024.08.18

STM32 RTOS 알아보기 1편(xTaskCreate, vTaskDelay, vTaskDelayUntil)

안녕하세요. 오늘은 STM32보드로 RTOS에서 사용하는 기본적인 함수에 대해 알아보겠습니다. 사용하는 보드는 NUCLEO-F103RB이고 어떤보드던 큰 상관은 없습니다.먼저 프로젝트를 만들고 FREERTOS를 활성화해줘야합니다. FREERTOS를 선택하면 Interface를 선택하라고 나옵니다. CMSIS V1과 CMSIS V2의 차이는 CMSIS 인터페이스에서 사용하는 함수들의 차이인데 여기서는 CMSIS 인터페이스를 사용하지않고 FreeRTOS 인터페이스를 사용합니다. 예를들어 테스크를 만들때 FreeRTOS는 xTaskCreate함수를 사용하고 CMSIS는 osThreadCreate함수를 사용합니다. 사실 osThreadCreate함수의 코드를보면 결국에는 xTaskCreate함수를 호출합니다. ..

STM32/STM32_RTOS 2024.08.11

FreeRTOS-undefined reference to `vTaskList'에러

안녕하세요. 오늘은 FreeRTOS의 vTaskList함수를 사용하려할때 발생하는 undefined reference to `vTaskList' 에러에 대해 알아보겠습니다.vTaskList함수를 사용하려면 vTaskList함수를 사용할수있게 매크로를 설정해야합니다.FreeRTOS.h에 있는 configUSE_TRACE_FACILITY와 configUSE_STATS_FORMATTING_FUNCTIONS을 1로 설정하면 됩니다. (https://www.freertos.org/a00021.html)* vTaskList함수 사용할수있게 설정#define configUSE_STATS_FORMATTING_FUNCTIONS 1#define configUSE_TRACE_FACILITY 1 * 태스크생성 if (x..

STM32/STM32_RTOS 2023.04.02