RTOS与裸机系统对比记忆:
裸机系统:前后台系统;
RTOS:实时操作系统,讲究实时性;
裸机系统中通常我们将需要工作的函数全部放在主while(1){}中,所有需要工作的函数独立排列,然后依次顺序执行。
例如:
int main(void)
{
XXX_configuration();//一般初始化函数
while(1) //恒成立
{
执行函数1(); //所有函数顺序执行,
执行函数2();
…
}
}
当我们有中断响应时,中断标志位置起,需要执行相应的动作时,需在主while(1)中排队等待。例如:当有一个中断标志在执行函数2()中使用,当中断标志置位时,此刻刚好主程序在执行函数1()或者刚刚执行完执行函数2();那么不能立刻执行中断标志所需要的操作,而需要等待while(1)中顺序执行再次到执行函数2();才会执行中断标志所需要的操作。中断具有响应优先级和抢占优先级,但中断的优先级不可重复,且拥有初始的优先级顺序。
RTOS系统中采用任务调度执行操作的,理论上可以创建无数个任务;但对于我们日常使用的单片机里,同一时间的同一时刻只能有一个任务在执行
例如:
void main(void)
{
xTaskCreate(任务一);//创建任务一
xTaskCreate(任务二);//创建任务二
}
void 任务一(void)//此函数恒执行任务一
{
while(1)
{
执行(任务一);
}
}
void 任务二(void)//此函数恒执行任务二
{
while(1)
{
执行(任务二);
}
}
在RTOS中任务是有优先级的区别,高优先级任务可以打断低优先级任务(在FreeRtos中设置任务优先级的数值越大,任务的优先级等级越高),中断可以打断任务,多个任务可以设置在同一优先级(此时需要靠时间片协助调度任务);
裸机程序与FreeRtos的特点对比:
裸机程序特点:
1.实时性差:程序轮流执行;
2.delay:空等待,CPU不执行其他程序,只是倒计时,浪费资源;
3.结构臃肿:所有执行函数全部放在主while(1)中。
FreeRtos系统的特点:
1.分而至之:实现功能划分为多个任务;
2.延时函数:任务调度
3.抢占式:高优先级任务可以抢占低优先级任务
4.任务堆栈:每个任务都有自己的栈空间。
自学笔记参考正点原子视频,如有错误还望指出,如有帮助还望多点赞,防止以后找不到。谢谢