하드웨어/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)