하드웨어/STM32(FreeRTOS)

3. STM32 FreeRTOS -Task 생성하기

여동동 2021. 10. 19. 22:45

 

1. Task 생성 API

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            const char * const pcName,
                            const configSTACK_DEPTH_TYPE usStackDepth,
                            void * const pvParameters,
                            UBaseType_t uxPriority,
                            TaskHandle_t * const pxCreatedTask )

 

설명

TaskFunction_t pxTaskCode : Task로 쓸 함수!
const char * const pcName : Task를 설명할 String
const configSTACK_DEPTH_TYPE usStackDepth : 스택 메모리 설정(word단위 byte가 아닙니다!)
void * const pvParameters : Task에 전달될 데이터의 포인터
UBaseType_t uxPriority : 우선순위 설정
TaskHandle_t * const pxCreatedTask : Task의 Handle로 전달할 값이며 Null로 지정 가능

 

 

2. 소스코드

#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"

void task1_handler(void* parameters);
void task2_handler(void* parameters);

int main(void)
{
  TaskHandle_t task1_handle;
  TaskHandle_t task2_handle;
  BaseType_t status;

  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();

  status = xTaskCreate(task1_handler, "Task_1", 400, "Hello world from Task-",2,&task1_handle);
  configASSERT(status == pdPASS); //Task 생성 확인
  status = xTaskCreate(task1_handler, "Task_2", 400, "Hello world from Task-",2,&task2_handle);
  configASSERT(status == pdPASS); //Task 생성 확인

//start freertos
  vTaskStartScheduler();

}

void task1_handler(void* parameters) //Java와 달라서 한번실행되고 끝나기 때문에 무한루프를 걸어줘야 한다!
{
   while(1)
    {
         printf("%s\n", (char*)parameters);
    }
    vTaskDelete(NULL);}void task2_handler(void* parameters)
{
    while(1)
    {
         printf("%s\n", (char*)parameters);
    }
    vTaskDelete(NULL);
}

void task2_handler(void* parameters) //Java와 달라서 한번실행되고 끝나기 때문에 무한루프를 걸어줘야 한다!
{
   
while(1)
    {
         printf("%s\n", (char*)parameters);
    }
    vTaskDelete(NULL);}void task2_handler(void* parameters)
{
    while(1)
    {
         printf("%s\n", (char*)parameters);
    }
    vTaskDelete(NULL);
}

 

 

 

참고사이트(freeRtos.org)