首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

实时系统概念

实时系统概念

实时系统的特点是,如果逻辑和时序出现偏差将会引起严重后果的系统。实时系统分为两种:软实时系统和硬实时系统。软实时系统要求任务运行越快越好,硬实时系统要求任务不仅执行无误而且要做到准时。大部分实时系统是二者的结合。
2.00 前后台系统
不复杂的小系统一般设计成前后台系统,又叫超循环系统。应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。中断服务程序处理异步事件,这部分可以看成前台行为。后台也可以叫做任务级,前台也叫中断级。时间相关性很强的操作一定是靠中断服务来保证的。
很多基于微处理器的产品采用前后台系统设计,例如微波炉,电话机,玩具等。在另外一些基于微处理器的应用中,从省电的角度出发,平时微处理器处在停机状态,所有的事都靠中断服务来完成。
2.01 代码的临界段
代码的临界段也称为临界区,指处理时不可分割的代码。一旦这部分代码开始执行,则不允许任何中断打入。为确保临界段代码执行,在进入临界段之前应该关闭中断,在离开临界区后立刻开启中断。
2.02 资源
任何被任务所占用的实体都可称为资源。资源可以是输入输出设备,例如打印机,键盘,显示器,资源也可以是一个变量,一个结构或一个数组等。
2.03 共享资源
可以被一个以上任务是用的资源叫做共享资源。为了防止数据被破坏,每个任务与共享资源打交道时,必须独占该资源。这叫做互斥。
2.07 内核
在多任务系统中,内核负责管理各个任务,或者说为每个任务分配cpu时间,并且负责任务之间的通讯。内核提供的基本服务是内核切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。单片机一般不能运行实时内核,因为单片机的RAM很有限。
2.08 调度
多数实时内核是基于优先级调度法的。究竟何时让高优先级任务掌握CPU的使用权,有两种不同的情况,这要看用的是什么类型的内核,是不可剥夺型的还是可剥夺型内核。
2.10 可剥夺型内核
当系统响应时间很重要时,要使用可剥夺型内核。因此,uCOS以及绝大多数商业上销售的实时内核都是可剥夺型内核。
2.12 时间片轮番调度法
目前,uCOS不支持时间片轮番调度法,应用程序中各任务的优先级必须互不相同。
2.15 动态优先级
应用程序执行过程中,任务的优先级是可变的,则称之为动态优先级。实时内核应避免出现优先级反转问题。
2.18 互斥条件
(1)关中断和开中断
处理共享数据时保证互斥,最简便快捷的办法是关中断和开中断。示例:
Disable interrupts; [url=]//关中断[/url]
Access the resource(read/write from/to variables); //读/写变量
Reenable interrupts; //重新允许中断
uCOS在处理内部变量和数据结构时就是使用的这种手段,即使不是全部,也是绝大部分。实际上uCOS提供两个宏调用,允许用户在应用程序的C代码中关中断然后再开中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。示例:
void Function(void)
{
OS_ENTER_CRITICAL();
...
... //在这里处理共享数据
...
OS_EXIT_CRITICAL();
}
可是,必须十分小心,关中断的时间不能太长。因为它影响整个系统的中断响应时间,即中断延迟时间。当改变或复制某几个变量的值时,应想到用这种方法来做。这也是在中断服务子程序中处理共享变量或共享数据结构的唯一方法。在任何情况下,关中断的时间都要尽量短。
如果使用某种实时内核,一般地说,关中断的最长时间不超过内核本身的关中断时间,就不会影响系统中断延迟。
2.26 中断延迟
可能实时内核最重要的指标就是中断关了多长时间。所有实时系统在进入临界区代码段之前都要关中断,执行完临界代码之后再开中断。关中断的时间越长,中断延迟就越长。
中断延迟=关中断的最长时间+开始执行中断服务子程序的第一条指令的时间。
继承事业,薪火相传
返回列表