FreeROTS了解(四)

1、实时操作系统

(1)、硬实时:准时
(2)、软实时:尽快完成

1.1、名词解释

应用程序是一个无限循环,无限循环里的操作可被看成后台行为(任务级别)。

中断处理异步事件,可被看成前台行为(中断级),时间相关性强的操作一定是靠中断服务来保证的。

中断提供信息,后台程序运行到处理该信息时才会得到处理,任务响应时间。

临界区时任何都不能打断,进入临界区之前必须关闭中断,临界区执行完后要立即开中断。

任何被任务占用的实体都称为资源。

互斥就是为了更好的让每个任务独占共享资源。

多任务让程序模块化,层次化,易于设计和维护。

一个任务也称一个线程,每个任务都有一定优先级,有自己的栈空间和CPU寄存器。

每个任务都是一个无限循环,都有以下五种状态:
1.休眠
2.就绪
3.运行
4.挂起(等待某一事件发生,等外设I/O中断,等共享资源,等定时脉冲,等超时信号,结束目前的等待,等等)
5.中断(中断来了,原先的任务不能运行,进入中断态)

每个任务都有一个任务控制块,里面存储任务状态,栈,还有优先级等等信息。每个任务都有自己的栈空间,意味着占用内存也多。

上下文切换,即任务切换,发生切换时,就保存当前任务的现场,将当前任务的当前情况(CPU寄存器中的全部内容)入栈(任务自己的栈区)。下一个需要运行的任务,它的当前状况需从任务栈里装入CPU,并开始运行。这就完成了任务切换。
任务切换的时间取决于CPU有多少寄存器需要入栈。

内核也占用CPU负荷
RAM数据空间
ROM代码空间

单片机RAM有限。
不可剥夺型内核,任务主动放弃CPU
可剥夺型内核,对系统响应时间很重要时,都用这种。

想要把不可重入函数变成可重入的,就要把某个资源变成局部变量;或调用该函数前关闭中断,之后再开中断,或使用信号量。

2个或2个以上任务优先级相同,内核允许1个任务运行事先确定的一段时间,时间片调度。

优先级继承能避免优先级反转问题

实现任务之间通信的最简便方法就是使用共享数据结构,但需要满足互斥条件:
1.关中断
2.禁止任务切换
3.利用信号量

初始化信号量,等信号量(挂起),给信号量。
信号量的获取,可能是给高优先级的,可能给队列里的

防止死锁:
1.先得到全部资源
2.用同样顺序申请多个资源
3.释放资源时,使用相反的顺序。
申请信号量时定义等待超时,以此化解死锁,超时后返回错误代码。

Isr不可能等待一个信号量。

任务之间通信,或中断与任务之间通信,通过全局变量,或者发送消息。全局变量,必须保证任务或中断独享该变量,中断种独享的唯一方式是关闭中断,任务之间可以关中断再开中断,或者信号量。任务与中断之间通信只能全局变量,除非任务以查询方式不断周期性查询变量的值,可以使用消息队列。

消息队列用于给任务发消息,任务和中断可以将消息放入消息队列,任务可以通过内核服务
从消息队列里获取消息。传递的消息实际上传递的是指针指向的内容,队列先进先出。

所有进入临界区代码前,都要关中断,执行完临界区再开中断。

时钟节拍是特定的周期性中断,当任务等待事件发生时,提供等待超时的依据。时钟节拍,可以将任务延迟若干个整数时钟节拍。

所有高优先级任务和中断服务的执行时间略短于1个时钟节拍,

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值