freeRTOS学习
任务
任务状态
- 运行:占用CPU
- 就绪:有高优先级在运行所导致未运行的程序
- 阻塞:一个任务等待临时事件或外部事件时,将进入阻塞状态(直阻塞任务而不阻塞CPU),一般有个超时时间,超时后任务将解锁(继续运行),阻塞的任务不参与调度。
- 暂停:任务只有在调用API函数vTask Suspend()和xTaskResume(),时才进入或退出暂停状态,不能指定超时时间,也不能参与调度。
任务优先级
- 每一个任务都将分配一个从0到configMAX_PRIORITIES-1的优先级一帮定义中该参数值越大,freeRTOS占用的RAM就越多
- 注意,处理器的时间总是分配给能够运行的最高优先级任务。
执行任务
一个任务结构如下
void vATaskFunction( void *pvParameters )
{
for(;;)
{
Task application code here.
}
}
- 任务函数应当从不返回,因此他通常执行一个连续的循环
- 任务由函数xTaskCreate()创建,使用vTaskDelete()删除。
空闲任务
- 空闲任务在调度器启动时自动启动
- 空闲任务负责清理已经删除的文件,可以保证在任何条件下不分配处理器的时间
- 系统的其他任务可以共享空闲任务的优先级
### 空闲任务钩子 - 一个空闲任务钩子就是在每次空闲任务运行时调用的函数。
- 在空闲任务钩子实现。
必须始终有一个任务准备好运行,在钩子函数中不能调用任何引起阻塞的API函数。
Queue Management(消息队列管理)
- xQueueCreate //创建一个消息队列
- xQueueSend //消息队列发送
- xQueueSendToBack
- xQueueSendToFront
- xQueueReceive
- xQueuePeek
- xQueueSendFromISR
- xQueueSendToBackFromISR
- xQueueSendToFrontFromISR
- xQueueReceiveFromISR
- vQueueAddToRegistry
- vQueueUnregisterQueue
Task creation
- xTaskCreation(); //创建一个线程
- VTaskDelete(); //删除一个线程