注:在使用大多数功能时,FreeRTOS都要将对应的宏置为1,具体的需要查看FreeRTOS官方文档。
任务的创建包括两种,静态和动态创建,区别在于在进行任务创建时,任务控制块(TCB),栈空间内存等是否由FreeRTOS自动分配,静态是由自己手动分配内存。
函数基础
创建任务(动态)
1.xTaskCreate():
1 | xTaskCreate(taskFunction, taskName, stackSize, parameters, priority, taskHandle)
参数:
- taskFunction:任务函数,即任务的入口函数。
- taskName:任务的名称。
- stackSize:任务堆栈的大小。
- parameters:传递给任务函数的参数。
- priority:任务的优先级。
- taskHandle:任务句柄,用于引用创建的任务。
返回值:如果任务创建成功,则返回pdPASS,否则返回errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY。
使用步骤:
1.将对应宏置为 1
2.定义函数的入口参数
3.编写任务函数
删除任务
2.xTaskDelete():
void vTaskDelete(TaskHandle_t xTaskToDelete)
参数:
- xTaskToDelete:待删除任务的任务句柄
当传入参数为NULL表示删除自身。
函数的内部实现
函数的内部实现如果需要详细了解,建议查看源码。
任务创建
prvInitialiseNewTask()
内部重要函数为pxPortInitialiseStack(),该函数的作用是利用指针将对应的值从上到下写入到对应的地址中(压栈),这主要是在后面出栈时,将对应的值写入对应的寄存器中,用于保护上下文。
prvAddNewTaskToReadyList(pxNewTCB)
该函数的作用是把新创建的任务加入到就绪列表中,函数在任务创建内部。