1.任务管理1任务状态运行态可以转换到就绪态阻塞态挂起态。就绪态可以转换到运行态挂起态。阻塞态可以转换到就绪态挂起态。挂起态可以转换到就绪态。2任务控制块TCB1任务函数的入口地址任务函数的定义格式void startTaskA(void* arg){for(;;){//写任务需要执行代码//通常需要考虑进入到非运行态释放CPU使用权}vTaskDelete(NULL);}2任务名3堆栈大小4任务的优先级3任务的操作1任务的创建xTaskCreate()(2)任务的删除vTaskDelete()3任务挂起与解除挂起vTaskSuspend()vTaskResume()4使任务休眠阻塞vTaskDelay()参数表示需要休眠的节拍数2.任务的通信1队列的用途实现任务之间的数据传递队列实现任务间通信的基础。2队列的特点FIFO先入先出任务对队列操作可能引起阻塞写阻塞读阻塞写队列会将数据拷贝写入到队列的末尾读队列会从队列的头部读取并删除数据创建时需要指定队列的深度以及数据块大小3信号量实现任务之间同步没有优先级继承机制不适合用于实现任务间的互斥错误使用可能会出现“优先级反转问题”。4互斥锁实现任务之间互斥优先级继承1触发前提两个优先级不同的任务竞争公共资源低优先级任务先执行P操作抢占到资源高优先级任务后执行P操作去抢占资源。2触发时机高优先级任务执行P操作但资源已被低优先级任务占用高优先级任务阻塞。3效果在低优先级任务释放资源之前V操作之前低优先级任务会临时被系统自动提升优先级直到与高优先级的任务一致。5)事件组
FreeRTOS任务管理与通信机制全解析
1.任务管理1任务状态运行态可以转换到就绪态阻塞态挂起态。就绪态可以转换到运行态挂起态。阻塞态可以转换到就绪态挂起态。挂起态可以转换到就绪态。2任务控制块TCB1任务函数的入口地址任务函数的定义格式void startTaskA(void* arg){for(;;){//写任务需要执行代码//通常需要考虑进入到非运行态释放CPU使用权}vTaskDelete(NULL);}2任务名3堆栈大小4任务的优先级3任务的操作1任务的创建xTaskCreate()(2)任务的删除vTaskDelete()3任务挂起与解除挂起vTaskSuspend()vTaskResume()4使任务休眠阻塞vTaskDelay()参数表示需要休眠的节拍数2.任务的通信1队列的用途实现任务之间的数据传递队列实现任务间通信的基础。2队列的特点FIFO先入先出任务对队列操作可能引起阻塞写阻塞读阻塞写队列会将数据拷贝写入到队列的末尾读队列会从队列的头部读取并删除数据创建时需要指定队列的深度以及数据块大小3信号量实现任务之间同步没有优先级继承机制不适合用于实现任务间的互斥错误使用可能会出现“优先级反转问题”。4互斥锁实现任务之间互斥优先级继承1触发前提两个优先级不同的任务竞争公共资源低优先级任务先执行P操作抢占到资源高优先级任务后执行P操作去抢占资源。2触发时机高优先级任务执行P操作但资源已被低优先级任务占用高优先级任务阻塞。3效果在低优先级任务释放资源之前V操作之前低优先级任务会临时被系统自动提升优先级直到与高优先级的任务一致。5)事件组