[FreeRTOS] 创建动态和静态任务

发布时间:2023年12月20日

创建动态任务

由系统动态分配任务所需要的内存空间, 简单, 方便, 灵活, 节省空间.

缺点: 容易产生内存碎片.?

//动态任务1
TaskHandle_t Task1Handle;

void vTask1Function( void * param)
{
    while(1)
    {
        printf("1");
		//taskYIELD();
    }
}

//参数: 任务函数, 任务名称, 堆栈大小, 任务参数, 任务优先级, 任务句柄
//返回值类型: BaseType_t
xTaskCreate(vTask1Function, "task1", 100, NULL, 1, &Task1Handle); //调用

创建静态任务

由程序员自己定义空间大小, 不易产生内存碎片.

缺点: 任务删除无法回收内存.

#define configSUPPORT_STATIC_ALLOCATION 1 //配置文件,开启静态分配

//静态任务2
StackType_t task2Stack[128];
StaticTask_t task2TCB;
void vStaticTask2Function( void * param)
{
    while(1)
    {
        printf("2");
		//taskYIELD();
    }
}

//空闲任务需要重写
StaticTask_t  IdleTaskTCB;
StackType_t   IdleTaskStack[configMINIMAL_STACK_SIZE];
void vApplicationGetIdleTaskMemory( StaticTask_t ** ppxIdleTaskTCBBuffer,
                                        StackType_t ** ppxIdleTaskStackBuffer,
                                        uint32_t * pulIdleTaskStackSize )
{
	*ppxIdleTaskTCBBuffer = &IdleTaskTCB;
	*ppxIdleTaskStackBuffer = IdleTaskStack;
	*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}

//参数1: 静态任务函数, 任务名, 任务堆栈大小, 任务参数, 任务优先级, 堆栈空间, TCB
//返回值: 任务句柄
xTaskCreateStatic(vStaticTask2Function, "task2", 128, NULL, 1, task2Stack, &task2TCB); 

?

文章来源:https://blog.csdn.net/qq_46129738/article/details/135105005
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。