目录
一.什么是多任务系统
不同于我们之前学习的51,32等单片机裸机(未使用操作系统),我们一般编写代码主要在main函数中,将封装好的函数放置main函数的一个主循环中,代码按照先后顺序来执行,中断服务函数触发可打断主函数的执行,来执行中断服务函数,这个就是单任务系统。FreeRtos是一个抢占式的实时多任务系统,其任务调度器也是抢占式的,它通过给任务分配优先级,优先级别高的先执行,高优先级的任务执行完而后将CPU的使用权交给低优先级的任务。
二.任务状态
1.就绪态:该任务处于就绪列表当中,已经具备执行的能力,等待任务调度器进行调度,新创建的任务初始化为就绪态。
2.运行态:任务处于运行状态中,此时该任务正在占用CPU。
3.阻塞态:如果任务当前正在等待某个时序或外部中断,我们就说这个任 务处于阻塞状态,该任务不在就绪列表中。包含任务被挂起、任务被延时、任务 正在等待信号量、读写队列或者等待读写事件等。
4.挂起态:当任务被挂起时,对于任务调度器来说是不可见的,该任务不会被任务调度器所调度。让任务处于挂起态仅能通过调用 vTaskSuspend()函数,而将处于挂起态任务的恢复的途径是调用 vTaskResume() 或 vTaskResumeFromISR()函 数(带ISR指仅可在中断中使用),调用这两个函数便可将处于挂起态的任务重新恢复成正常任务,能够重新别任务调度器所识别,进行正常的任务调度。
三.常用函数详解
1.任务挂起函数
void vTaskSuspend(TaskHandle_t xTaskToSuspend)
xTaskToSuspend:该参数为要挂起的任务句柄,如果使用函数xTaskCreate()创建任务的话那么函数的参数pxCreatedTask 就是此任务的任务句柄,如果使用函数xTaskCreateStatic()创建任务的话那么函数的返回值就