FreeRTOS是一个操作系统内核,提供操作系统最重要的特性:任务调度
操作系统允许多个任务同时运行,这个叫做多任务。实际上,一个处理器核心在某一时刻只能运行一个任务。 操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务, 任务调度在各个任务之间的切换非常快!
像 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级, 任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
RTOS框架
/*主函数*/
int main()
{
init();//一些初始化
xTaskCreate();
vTaskStartScheduler(); //启动调度器
}
/*子任务1(死循环)*/
void task1()
{
while(1)
{
do_something_1();//执行一些逻辑(如采集传感器信息)
vTaskDelay(); }
}
/*子任务2(死循环)*/
void task2()
{
while(1)
{
do_something_2();//执行一些逻辑(如执行电机运动)
vTaskDelay();
}
}
/*中断服务函数*/
IRQ_Handler()
{
set_event();//触发事件、信号量等
}
单片机引入RTOS,可以将各个功能模块分别设计为单独的任务,每个任务都是一个死循环,就好比有多个人在同时干活,这样CPU的利用率就提高了,并且可以处理一些并行逻辑。
单片机只有一个CPU(核),那怎么让多个人同时干活呢?其实每个子任务虽然都是死循环,但并不是每个子任务一直都在执行,每个子任务在执行期间,可能需要延时,也可能需要等另一个任务的数据到来,所有,在某个任务在等待的时候,CPU就可以停止此任务,然后切换到其它任务执行,这样看起来就是多个人在同时干活了。
|