赞
踩
目录
在freertos中,提供了两种创建任务的方式:静态创建,动态创建。
需要提前分配好栈空间和TCB结构体(任务控制块)
- //注意:在FreeRTOSConfig.h中定义使能宏
- //#define configSUPPORT_STATIC_ALLOCATION 1
-
- TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,//任务函数名
- const char * const pcName, //任务名
- uint32_t ulStackDepth,//栈大小
- void *pvParameters,//参数
- UBaseType_t uxPriority,//优先级
- StackType_t * const puxStackBuffer,//任务栈
- StaticTask_t * const pxTaskBuffer //任务控制块
- )
栈空间和任务控制块由系统自动分配
- //注意:在FreeRTOSConfig.h中定义使能宏
- //#define configSUPPORT_DYNAMIC_ALLOCATION 1
-
- BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //函数指针
- const char * const pcName, //函数名
- unsigned short usStackDepth, //栈深度
- void *pvParameters, //参数
- UBaseType_t uxPriority, //优先级
- TaskHandle_t * const pxCreatedTask // 任务句柄)
定义:又叫任务控制块,包含了任务的所有信息。
- struct tskTaskControlBlock; // 原型
-
- typedef struct tskTaskControlBlock* TaskHandle_t;//重定义,取别名
-
- typedef struct tskTaskControlBlock
- {
- volatile StackType_t *pxTopOfStack;
-
- ListItem_t xStateListItem; //任务状态列表
- ListItem_t xEventListItem; //任务事件列表
- UBaseType_t uxPriority; //优先级
- StackType_t *pxStack; //栈指针
- char pcTaskName[ configMAX_TASK_NAME_LEN ];
- } tskTCB;
所以,可以删除句柄来删除任务,vTaskDelete(句柄)
- /* FreeRTOS头文件 */
- #include "FreeRTOS.h"
- #include "task.h"
-
- StackType_t xIdleTask2Stack[100];
- StaticTask_t xIdleTask2Tcb;
-
- void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize)
- {
- *ppxIdleTaskTCBBuffer = &xIdleTask2Tcb;
- *ppxIdleTaskStackBuffer = xIdleTask2Stack;
- *pulIdleTaskStackSize = 100;
- }
-
- TaskHandle_t xHandleTask1 = NULL;//任务句柄,用于删除
- void Task1(void * param)
- {
- while(1)
- {
- printf("动态");
- }
- }
-
- TaskHandle_t xHandleTask2 = NULL;
- void Task2(void * param)
- {
- while(1)
- {
- printf("static");
- }
- }
-
-
- int main( void )
- {
-
-
- xTaskCreate(Task1,"Task1",100,NULL,1,&xHandleTask1);
- xHandlerTask2=xTaskCreateStatic(Task2,"Task2",100,NULL,1,xIdleTask2Stack,&xIdleTask2Tcb);
-
-
- vTaskStartScheduler(); // 启动任务,开启调度
-
-
- while(1); // 正常不会执行到这里
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。