FreeRTOS简介
嵌入式操作系统是为了区别于通用的计算机操作系统,人们把嵌入到对象体系中,为实现对象体系智能化控制的计算机操作系统,称作嵌入式计算机操作系统,简称嵌入式操作系统。
嵌入式操作系统分类:
1、按对外部事件的响应能力来分类,嵌入式操作系统分实时操作系统和分时操作系统。
如果操作系统能及时的响应外部事件请求,并能控制所有实时设备和实时任务协调运行,且能再一个规定的时间内完成对事件的处理,那么这种操作系统就称为实时操作系统。(FreeRTOS)
如果操作系统按时间片轮转完各个任务,任务没有优先级,这种系统就称为分时操作系统(Linux操作系统)
2、按时间的严格程度来分,实时操作系统又分为强实时操作系统和弱实时操作系统。系统必须再极其严格的时间内完成的任务叫做硬实时操作系统,比如飞机系统;如果不是很严格的话就是弱实时操作系统,比如信息采集系统
FreeRTOS实时操作系统
FreeRTOS是一款开源免费的实时操作系统,商业使用的话不需要用户公开源代码,也不存在任何版权问题,是当前小型嵌入式操作系统市场使用率最高的。
FreeRTOS的移植比较简单,只需要用户添加需要的源码代码,不需要做任何的底层工作,再添加几个宏定义即可。
裸机系统和多任务系统
1、裸机编程时,先初始化相关的硬件,然后让主程序再一个死循环里面不断的循环,顺序地处理各种事件。对于紧急事件来说采用中断进行快速响应。
伪代码如下
#include<头文件>
#变量定义
int main()
{
//硬件初始化
Hard_ware_Init();
//主循环
while(1)
{
//功能函数1
Func_1();
Func_2();
Func_n();
}
}
void ISR_1()//中断函数
{
//中断任务
}
2、多任务系统
相对于裸机系统,多任务系统的事件处理是在任务中完成的,对于紧急事件,同样采用中断功能进行快速响应。
多任务系统通常包含多个任务,彼此独立,方便编程。同时,任务具有优先级,高优先级任务可以打断低优先级任务,系统的实时性进一步得到提高
伪代码如下
#include<头文件>
#变量定义
int main()
{
//硬件初始化
Hardware_Init();
//FreeRTOS初始化
FreeRTOS_Init();
//FreeRTOS启动,开始任务调度,不再返回
FreeRTOS_Start();
}
//任务函数1
void Task_1()
{
for(;;)
{
//任务1处理
}
}
说明:
引入操作系统后,在编程时不需要精心设计程序执行流,任务间不存在干扰,编程反而变得简单了。
当然,系统需要占用一定的RAM和FLASH资源,如今的单片机,RAM和FLASH越来越大,为采用操作系统提供了便利。
两者对比:
程序结构 | 事件处理 | 紧急任务 | 特点 |
---|---|---|---|
逻辑系统 | 主函数 | 中断 | 实时响应系统,轮询处理事件 |
多任务系统 | 任务 | 中断 | 实时响应系统,实时处理事件 |