一、任务挂起和恢复API函数
有时候需要暂停某个任务的运行,过一段时间以后在重新运行。这个时候要是使用任务删除和重建的方法的话,那么任务中变量保存的值肯定丢失了!FreeRTOS提供了解决这种问题的方法,那就是任务挂起和恢复,当某个任务要停止运行一段时间的话就将这个任务挂起,当要重新运行这个任务的话就恢复这个任务的运行。FreeRTOS的任务挂起和恢复API函数如下表所示:
函数 | 描述 |
---|---|
vTaskSuspend() | 挂起一个任务 |
vTaskResume() | 恢复一个任务的运行 |
xTaskResumeFromISR() | 中断服务函数中恢复一个任务的运行 |
1、函数vTaskSuspend()
此函数用于将某个任务设置为挂起态,进入挂起态的任务永远都不会进入运行态。退出挂起态的唯一方法就是调用任务恢复函数vTaskResume()或xTaskResumeFromISR()。函数原型如下:
void vTaskSuspend(TaskHandle_t xTaskToSuspend)
参数 | 描述 |
---|---|
xTaskToSuspend | 要挂起的任务的任务句柄,创建任务的时候会为每个任务分配一个任务句柄。如果使用函数xTaskCreate()创建任务的话,那么函数的参数pxCreatedTask就是此任务的任务句柄,如果使用函数xTaskCreateStatic()创建任务的话那么函数的返回值就是此任务的任务句柄。也可以通过函数xTaskGetHandle()来根据任务名字来获取某个任务的任务句柄。注意!如果参数为NULL的话表示挂起任务自己。 |
2、函数vTaskResume()
将一个任务从挂起态恢复到就绪态,只有通过函数vTaskSuspend()设置为挂起态的任务才可以使用vTaskRexume()恢复!函数原型如下:
void vTaskResume(TaskHandle_t xTaskToResume)
参数 | 描述 |
---|---|
XTaskToResume | 要恢复的任务的任务句柄。 |
3、函数xTaskResumeFromISR()
此函数是vTaskResume()的中断版本,用于在中断服务函数中恢复一个任务。函数原型如下:
BaseType_t xTaskResumeFromISR(TaskHandle_txTaskToResume)
参数 | 描述 |
---|---|
XTaskToResume | 要恢复的任务的任务句柄。 |
BaseType_t | 返回值:pdTRUE:恢复运行的任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数以后必须进行一次上下文切换。pdFALSE:恢复运行的任务的任务优先级低于当前正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数的以后不需要进行上下文切换。 |