尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

FreeRTOS的任务创建和删除

FreeRTOS的任务创建和删除 一、任务创建和删除的API函数任务的创建和删除本质就是调用FreeRTOS的API函数主要如下API函数描述xTaskCreate()动态方式创建任务xTaskCreateStatic()静态方式创建任务vTaskDelete()删除任务动态创建任务任务的任务控制块以及任务的栈空间所需的内存均由 FreeRTOS 从 FreeRTOS 管理的堆中分配。静态创建任务任务的任务控制块以及任务的栈空间所需的内存需用户分配提供1、动态创建任务函数1函数说明BaseType_txTaskCreate(TaskFunction_tpxTaskCode,/*指向任务函数的指针*/constchar*constpcName,/*任务名字最大长度configMAX_TASK_NAME_LEN */constconfigSTACK_DEPTH_TYPEusStackDepth,/*任务堆栈大小默认单位4字节*/void*constpvParameters,/*传递给任务函数的参数*/UBaseType_tuxPriority,/*任务优先级范围0 ~ configMAX_PRIORITIES - 1 */TaskHandle_t*constpxCreatedTask/*任务句柄就是任务的任务控制块*/)返回值说明如下pdPASS任务创建成功。errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY任务创建失败。2动态创建任务步骤将宏configSUPPORT_DYNAMIC_ALLOCATION 配置为 1。定义函数入口参数。编写任务函数。此函数创建的任务会立刻进入就绪态由任务调度器调度运行2、静态创建任务函数1函数说明TaskHandle_txTaskCreateStatic(TaskFunction_tpxTaskCode,/*指向任务函数的指针*/constchar*constpcName,/*任务函数名*/constuint32_tulStackDepth,/*任务堆栈大小,单位是4字节*/void*constpvParameters,/*传递的任务函数参数*/UBaseType_tuxPriority,/*任务优先级*/StackType_t*constpuxStackBuffer,/*任务堆栈一般为数组由用户分配*/StaticTask_t*constpxTaskBuffer/*任务控制块指针由用户分配*/)返回值如下NULL用户没有提供相应的内存任务创建失败。其他值任务句柄任务创建成功。2​​​​​​​静态创建任务步骤将宏configSUPPORT_STATIC_ALLOCATION 配置为 1。定义空闲任务定时器任务的任务堆栈及TCB。实现接口函数vApplicationGetIdleTaskMemory()、vApplicationGetTimerTaskMemory()如果开启软件定时器定义函数入口参数。编写任务函数。此函数创建的任务会立刻进入就绪态由任务调度器调度运行。3、任务删除函数​​​​​​​1函数说明voidvTaskDelete(TaskHandle_txTaskToDelete)参数说明xTaskToDelete待删除任务的任务句柄。当传入的参数为NULL则代表删除任务自身当前正在运行的任务。该函数用于删除已被创建的任务被删除的任务将从就绪态任务列表、阻塞态任务列表、挂起态任务列表和事件列表中移除。需要注意的是空闲任务会负责释放被删除任务中由系统分配的内存但是由用户在任务删除前申请的内存则需要由用户在任务被删除前提前释放否则将导致内存泄露。2删除任务流程使用删除任务函数需将宏INCLUDE_vTaskDelete 配置为 1入口参数输入需要删除的任务句柄NULL代表删除本身二、任务创建和删除实验动态方法动态创建堆栈是在FreeRTOS管理的堆内存里注意任务不要重复创建。例1任务start_task用来创建其他的三个任务。task1实现LED1每500ms闪烁一次。task2实现LED2每500ms闪烁一次。task3判断按键KEY1是否按下按下则删掉task1。2​​​​​​​FreeRTOSConfig.h代码清单#defineconfigSUPPORT_DYNAMIC_ALLOCATION3freertos_demo.c代码4freertos_demo.h代码5main.c中调用​​​​​​​
返回列表