FreeRtos实时系统:入门及简介
- 一.RTOS入门知识
- 1.裸机与RTOS介绍
- 2.裸机和RTOS特点
- 二.FreeRtos简介
- 1.FreeRtos特点:
一.RTOS入门知识
1.裸机与RTOS介绍
有一个人叫小明
小明在打游戏同时有人给小明发信息
裸机: 小明不能及时回复信息
while(1)
{
//需要进行玩打游戏后才能进行回复信息
打游戏();
回复消息();
}
RTOS: 小明能及时回复信息
打游戏一个时间片 回信息一个时间片来回切换
宏观上看不出切换效果如同时进行
前提: 任务优先级相同
void 游戏(void)
{
while(1)
{
打游戏();
}
}
void 信息(void)
{ while(1)
{
回复信息();
}
}
void main(void)
{
/*创建打游戏任务*/
xTaskCreate(打游戏)
/*创建回复信息任务*/
xTaskCreate(回复消息)
}
同样,假设此时小明肚子疼,要去医院。
裸机:
设置一个中断,一肚子疼就触发中断。
中断是一瞬间的事,不能做太多事情,不能delay。
所以设置一个标志位裸机上一肚子疼就触发中断函数里的标志位。
while(1)
{
//需要打完游戏回信息后才判断flag实时性差
打游戏();
回复();
if(flag=1)
{
去医院();
flag=0;
}
}
RTOS:
在高优先级任务delay时可把cpu使用权让给低优先级任务执行,不是死等。
在去医院的途中又能打游戏又能回复信息了。
//高优先级任务
void 去医院(void)
{
while(1)
{
去医院();
}
}
//低优先级任务
void 游戏(void)
{
while(1)
{
打游戏();
}
}
void 信息(void)
{ while(1)
{
回复信息();
}
}
void main(void)
{
/*创建打游戏任务*/
xTaskCreate(打游戏)
/*创建回复信息任务*/
xTaskCreate(回复消息)
/*创建回复信息任务*/
xTaskCreate(去医院)
}
总结:RTOS能充分利用cpu资源
2.裸机和RTOS特点
裸机: 又称前后台系统,前台系统指中断函数,后台指大循环,即任务程序。
1.实时性差
应用程序轮流执行
2.delay空等待
cpu不执行其他代码
3.结构臃肿
实现功能都放在无限循环
RTOS: 全称为:Real Time OS,强调实时性。
1.分而治之
实现功能划分多个任务。
2.延时函数
任务调度,delay让出cpu使用权给低优先级执行。
3.抢占式
高优先级任务抢占低优先级任务。
4.任务堆栈
每个任务都有自己的栈空间,保存局部变量的值。
注意1:中断可打断任意任务。
任务优先级由软件意义上实现的,中断由内核实现与软件无关。
注意2:任务可同等优先级
问题:如果高优先级任务一直在运行,会怎么样?
答:一直进行高优先级任务,直到阻塞态(delay)或者等待信号量或互斥量也会进入阻塞态让出cpu使用权,只要低优先级任务就绪就可以马上执行。
二.FreeRtos简介
FreeRtos是一个免费的嵌入式实时操作系统
1.FreeRtos特点:
1.免费开源
商业产品中使用,无潜在商用风险,无需担心。
2.可裁剪
FreeRtos的核心代码9000行,包含在3个.c文件中
3.简单
简单易用,可移植性好。
4.优先级不限
任务优先级分配没有限制,多任务可同一优先级。
软件方法无限制,硬件方法如stm32限制在0-31这个范围。
5.任务不限
可创建的实时任务数量没有软件限制。
6.抢占/协程/时间片
支持抢占式,协程式,时间片流转任务调度。