本篇文章记录我学习FreeRTOS的任务相关的API函数。主要涉及FreeRTOS的任务创建和删除函数、任务挂起和恢复函数。希望我的分享对你有所帮助。
读者如果需要实战FreeRTOS动态/静态任务创建和删除,可以参考以下文章:
FreeRTOS动态 / 静态创建和删除任务-CSDN博客
目录
一、任务创建和删除API函数
1、函数xTaxkCreate()
2、函数xTaskCreateStatic()
3、函数xTaskCreateRestricted()
4、函数vTaskDelete()
二、任务挂起和恢复API函数
1、函数vTaskSuspend()
2、函数vTaskResume()
3、函数xTaskResumeFromISR()
三、结语
一、任务创建和删除API函数
FreeRTOS最基本的功能就是任务管理,而任务管理最基本的操作就是创建和删除任务,FreeRTOS的任务创建和删除API函数如表所示:
1、函数xTaxkCreate()
此函数用来创建一个任务,任务需要RAM来保存与任务有关的状态信息(任务控制块),任务也需要一定的RAM来作为任务堆栈。如果使用函数 xTaskCreate()来创建任务的话那么这些所需的RAM就会自动的从FreeRTOS的堆中分配,因此必须提供内存管理文件,默认我们使用heap_4.c这个内存管理文件,而且宏configSUPPORT_DYNAMIC_ALLOCATION必须为1。
如果使用函数xTaskCreateStatic()创建的话这些RAM就需要用户来提供了。新创建的任务默认就是就绪态的,如果当前没有比它更高优先级的任务运行那么此任务就会立即进入运行态开始运行,不管在任务调度器启动前还是启动后,都可以创建任务。此函数也是我们以后经常用到的,函数原型如下:
2、函数xTaskCreateStatic()
此函数和 xTaskCreate()的功能相同,也是用来创建任务的,但是使用此函数创建的任务所需的RAM需要用用户来提供。如果要使用此函数的话需要将宏configSUPPORT_STATIC_ALLOCATION定义为1。函数原型如下:
3、函数xTaskCreateRestricted()
此函数也是用来创建任务的,只不过此函数要求所使用的MCU有MPU(内存保护单元)用此函数创建的任务会受到MPU的保护。其他的功能和函数xTaxkCreate()一样。
4、函数vTaskDelete()
删除一个用函数xTaskCreate()或者xTaskCreateStatic()创建的任务,被删除了的任务不再存在,也就是说再也不会进入运行态。任务被删除以后就不能再使用此任务的句柄!如果此任务是使用动态方法创建的,也就是使用函数xTaskCreate()创建的,那么在此任务被删除以后此任务之前申请的堆栈和控制块内存会在空闲任务中被释放掉,因此当调用函数 vTaskDelete()删除任务以后必须给空闲任务一定的运行时间。
只有那些由内核分配给任务的内存才会在任务被删除以后自动的释放掉,用户分配给任务的内存需要用户自行释放掉.比如某个任务中用户调用函数pvPortMalloc()分配了500字节的内存,那么在此任务被删除以后用户也必须调用函数 vPortFree()将这500字节的内存释放掉,否则会导致内存泄露。此函数原型如下:
二、任务挂起和恢复API函数
有时候我们需要暂停某个任务的运行,过一段时间以后在重新运行。这个时候要是使用任务删除和重建的方法的话那么任务中变量保存的值肯定丢失了!FreeRTOS给我们提供了解决这种问题的方法,那就是任务挂起和恢复,当某个任务要停止运行一段时间的话就将这个任务挂起,当要重新运行这个任务的话就恢复这个任务的运行。FreeRTOS的任务挂起和恢复API函数如表所示:
1、函数vTaskSuspend()
此函数用于将某个任务设置为挂起态,进入挂起态的任务永远都不会进入运行态。退出挂起态的唯一方法就是调用任务恢复函数vTaskResume()或xTaskResumeFromISR()。,函数原型如下:
2、函数vTaskResume()
将一个任务从挂起态恢复到就绪态,只有通过函数vTaskSuspend()设置为挂起态的任务才可以使用vTaskRexume()恢复!函数原型如下:
3、函数xTaskResumeFromISR()
此函数是vTaskResume()的中断版本,用于在中断服务函数中恢复一个任务。函数原型如下:
三、结语
关于FreeRTOS任务API函数的学习分享就至此结束了。希望我的分享能给你带来不一样的收获和喜悦。
愿与诸君共努力,不负韶华赴前程!