2 FreeRTOS任务相关API函数
- 2.1 任务创建和删除API函数
FreeRTOS创建和删除任务的主要函数如下:
函数 | 描述 |
---|---|
xTaskCreate( ) | 使用动态方法创建一个任务 |
XTaskCreateStatic( ) | 使用静态方法创建一个任务 |
xTaskCreateRegisterd( ) | 创建一个使用MPU进行限制的任务,相关内存使用动态内存分配 |
xTaskDelete( ) | 删除一个任务 |
2.1.1 函数XTaskCreate( )
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //任务函数
const char * const pcName, //任务名字
const uint16_t usStackDepth, //任务堆栈大小
void * const pvParameters, //传递给任务函数的参数
UBaseType_t uxPriority, //任务优先级
TaskHandle_t * const pxCreatedTask ) //任务句柄
返回值:
pdPASS:任务创建成功;
errCOULD_NOT_ALLOCTE_REQUIRED_MEMORY:创建失败
参数说明:
pxTaskCode:任务函数;
PCName:任务名字,一般用于追踪和调试,名字长度不超过configMAX_TASK_LEN;
usStackDepth:任务堆栈的大小,实际申请的大小是usStackDepth的4倍。其中空闲任务的任务堆栈大小是configMINIMAL_STACK_SIZE;
pvParameters:传递给任务函数的参数;
uxPriority:任务优先级,0~configMAX_PRIORITIES-1;
pxCreatedTask:任务句柄。任务创建成功后会返回此任务的任务句柄,该句柄其实就是任务的堆栈,此参数用于保存这个任务句柄,其他的API函数会用到该句柄。
-
2.1.2 函数xTaskCreateStatic( )
该函数与xTaskCreate( )的功能相同,不同之处此函数创建任务时需要的RAM由用户来提供,如果需要使用该函数的话,则需要将宏configSUPPORT_STATIC_ALLOCTION定义为1,函数原型如下:TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, //任务函数 const char * const pcName, //任务名 const uint32_t ulStackDepth, //任务堆栈大小 void * const pvParameters, //传递给任务函数的参数 UBaseType_t uxPriority, //任务优先级 StackType_t * const puxStackBuffer, //任务堆栈,一般为数组 StaticTask_t * const pxTaskBuffer ) //任务控制块 返回值: NULL:任务创建失败,puxStackBuffer或pxTaskBuffer为NULL的时候会导致这个错误发生; 其他值:任务创建成功,返回任务的句柄;
-
2.1.3 函数xTaskCreateRegsiterd( )
此函数也是用于创建任务,但是该函数要求所使用的MCU要有MPU(内存保护单元),用此创建的任务会受到MPU的保护,其他功能和函数XTaskCreate( )一样。BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, //指向一个结构体 TaskParameters_t,描述了任务的任务函数、堆栈大小、优先级等。 TaskHandle_t * pxCreatedTask ) //任务句柄
-
2.1.4 函数xTaskDelete( )
删除一个用动态和静态创建的的任务,被删除的任务不再存在,任务调度器无法再调度该任务。当一个任务被删除后,其所对应的句柄就不能再使用了。删除一个使用动态创建的(XTaskCreate( ))任务,其所申请的堆栈和控制块内存将会被释放掉。有静态方法创建的任务,所使用的堆栈就需要用户自己去释放掉所对应的内存,否则会导致内存泄漏。此函数的原型如下:vTaskDelete( TaskHandle_t xTaskToDelete); 参数:xTaskToDelete,需要删除的任务的任务句柄;
-
2.2 任务挂起和回复API函数
当我们需要对某任务进行暂停或恢复的话,我们就需要使用到挂起或恢复,FreeRTOS所提供的任务挂起和回复API函数如下:
函数 | 描述 |
---|---|
vTaskSuspend( ) | 挂起一个任务,使其不再执行 |
vTaskResume( ) | 回复一个任务,使其进入就绪态 |
xTaskResumeFromISR( ) | 中断服务函数中恢复一个任务的运行 |
-
2.2.1 函数vTaskSuspend( )
此函数用于将某一任务设置为挂起态,进入挂起态的任务将永远都不会进入运行态。退出挂起态的唯一方法是调用任务恢复函数vTaskResume( )或xTaskResumeFromISR( )。函数原型如下:void vTaskSuspend( TaskHandle_t xTaskToSuspend); 参数:xTaskToSuspend,需要挂起任务所对应的任务句柄。
-
2.2.2 函数vTaskResume( )
将一个任务从挂起态恢复为就绪态,函数原型如下:Void vTaskResume(TaskHandle_t xTaskToResume);
-
2.2.3 函数xTaskResumeFromISR( )
该函数的功能与上一个所描述的功能是一样的,只不过在中断服务函数中只能调用该函数将一个任务从挂起态恢复到就绪态。BaseType_t xTaskResumeFromISR( TaskHandle_t xTaskToResume); 返回值: pdTRUE: 恢复运行的任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数以后必须进行一次上下文切换。 pdFALSE: 恢复运行的任务的任务优先级低于当前正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数的以后不需要进行上下文切换。
-
2.3 其他任务函数
-
2.4 FreeRTOS常见内核控制函数