嵌入式系统-Chapter7-时间管理

合集下载

嵌入式系统及应用-Chapter7-时间管理

嵌入式系统及应用-Chapter7-时间管理

Call OSIntExit(); Restore processor registers; Execute a return from interrupt instruction;
}
Tick Under uC/OS-II based on DSR
OSTickISR
PROC
PUSHA PUSH PUSH
硬件时钟设备
• 从硬件的角度来看,定时器(timer)和计 数器(counter)的概念是可以互换的,其 差别主要体现在硬件在特定应用中的使用 情况。
一个简单的定时器/计数器 •包含一个可装入的8位计数寄存器,一个时钟输入信号和一个输出脉冲。 •通过软件可以把一个位于0x00和0xFF之间的初始数据转入到计数寄存器。随后 的每一个时钟输入信号都会导致该值被增加。 •当8位计数器溢出时,就产生输出脉冲。 •输出脉冲可以用来触发处理器上的一个中断,或是在处理器能够读取的地方设 置一个二进制位。 •输出脉冲是操作系统时钟的硬件基础,是因为输出脉冲将送到中断控制器上, 产生中断信号,触发时钟中断,由时钟中断服务程序维持操作系统时钟的正常 工作。
•为了重启定时器,软件需要重新装入一个相同或不同的初始数据到计数寄存器。
硬件时钟设备
• 在一个典型的计数器中,当初始数据被装入后, 可以使用一定的方式来启动计数器。并且,一个实
际的计数器也需要为处理器提供一种通过数据总线读取计 数寄存器当前值的方式。
• 如果希望定时器能够自动重新装入初始数据,就 需要一个锁存寄存器,以保存处理器所写入的计 数数据。
*/
if (ticks > 0) { /* 0 means no delay! */ OS_ENTER_CRITICAL(); if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* Delay current task */ OSRdyGrp &= ~OSTCBCur->OSTCBBitY; } OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */ OS_EXIT_CRITICAL(); OS_Sched(); /* Find next task to run! */ } }

西安电子科技大学嵌入式实时操作系统第7章PPT课件

西安电子科技大学嵌入式实时操作系统第7章PPT课件
调用者是任务或者启动代码,开关量是OS_SEM_EN。 使用任何信号量函数的前提都是需要用此函数建立信号量。
2. 源代码 OSSemCreate()函数的源代码如程序清单7.1所示。 OSSemCreate()函数返回之前的ECB数据结构如图7.2所示。
第7章 信号量与互斥信号量
程序清单7.1 OSSemCreate()函数的源代码
说明 该常量为 0 时,屏蔽所有信号量函数
信号量必然包含这三个函数,所以它们没有 单独的配置开关量
第7章 信号量与互斥信号量
6. 任务、中断服务子程序与信号量之间的关系 任务、中断服务子程序与信号量之间的关系如图7.1所 示,其中用钥匙或者旗帜符号来表示信号量,具体说明如下: (1) 如果信号量用于对共享资源的访问,那么信号量就 用钥匙符号。符号旁边的数字N代表可用资源数,对于二值 信号量,该值就是1。
第7章 信号量与互斥信号量
表7.1 信号量管理函数一览表
函数 OSSemCreate() OSSemPend() OSSemPost() OSSemAccept() OSSemDel() OSSemQuery()
功能 建立信号量 等待信号量 发送信号量 无等待地请求信号量 删除信号量 查询信号量的当前状态
*/
第7章 信号量与互斥信号量
return((OS_EVENT*)0);
/*若是,则返回空
指针
*/
}
OS_ENTER_CRITICAL();
/*关中断
*/
pevent = OSEventFreeList;
/*从空余
ECB链表中获得一个事件控制块 */
if (OSEventFreeList != (OS_EVENT *)0) { /*确保ECB

嵌入式系统基础教程_第15讲_第7章时间管理

嵌入式系统基础教程_第15讲_第7章时间管理

2008年6月28日
南京大学计算机系 张家界培训
13
S3C44B0X的初始时钟脉冲信号

S3C44B0X初始时钟脉冲信号来源有两种可 能:用外部晶振来产生,或者直接输入外 部时钟。初始时钟源选择取决于引脚 OM[3:2]的状态。具体地讲,由nRESET上 升沿时刻的OM3和OM2引脚电平决定。 OM[3:2]=00选择晶体时钟,OM[3:2]=01选 择外部时钟。
2008年6月28日
南京大学计算机系 张家界培训
21
S3C44B0X的空闲模式

空闲模式。停止对CPU内核的时钟供给,但 总线控制器、存储控制器、中断控制器和电 源管理模块继续正常运行。保留所有对外部 设备的时钟信号供给。在空闲模式下,总功 耗不包含CPU内核的功耗。任何中断请求都 能够把CPU从空闲模式中唤醒。要退出空闲 模式,EINT[7:0],或者RTC告警中断,或 者其他的中断应当被激活。
2008年6月28日
南京大学计算机系 张家界培训
18
S3C44B0X的时钟控制寄存器 CLKCON位定义(上)
2008年6月28日
南京大学计算机系 张家界培训
19
S3C44B0X的时钟控制寄存器 CLKCON位定义(下)
2008年6月28日
南京大学计算机系 张家界培训
20
S3C44B0X电源管理下的省电数据
南京大学计算机系 张家界培训 6
2008年6月28日
S3C44B0X的锁相环电路方框图

S3C44B0X的PLL输出的时钟受控于PLLCON设置
电压下降 输入 时钟
环路滤波器
分频器 P Fref 相位差别 检测器 PFD 电荷泵 PUMP C

嵌入式系统教学课件:第八讲 嵌入式软件编程-中断和时间管理

嵌入式系统教学课件:第八讲 嵌入式软件编程-中断和时间管理
OS_ENTER_CRITICAL(); if ((OSRdyTbl[OSTCBCur->OSTCBY] &=
~OSTCBCur->OSTCBBitX) == 0) {
OSRdyGrp &= ~OSTCBCur->OSTCBBitY; } OSTCBCur->OSTCBDly = ticks; OS_EXIT_CRITICAL(); OSSched(); } }
/* 初始化uC/OS-II*/
/* 应用程序初始化代码... */
/* 调用OSTaskCreate()创建至少一个任务*/
允许时钟节拍中断; /* 错误!可能crash!*/
OSStart();
/* 开始多任务调度 */
}
26
系统的初始化与启动
在调用C/OS-II的任何其它服务之前,用户必须 首先调用系统初始化函数OSInit()来初始化 C/OS的所有变量和数据结构;
❖ 调用OSTimeDLY后,任务进入等待状态; ❖ 使用方法
void OSTimeDly (INT16U ticks); ticks表示需要延时的时间长度,用时钟节
拍的个数来表示。
17
OSTimeDLY()
void OSTimeDly (INT16U ticks) {
if (ticks > 0) {
任务的PC
高地址
堆栈的增长
12
时钟节拍
时钟节拍是一种特殊的中断,相当于操作 系统的心脏起搏器;
μC/OS需要用户提供周期性信号源,用于 实现时间延时和确认超时。节拍率应在10 到100Hz之间,时钟节拍率越高,系统的额 外负荷就越重;
时钟节拍的实际频率取决于用户应用程序 的精度。时钟节拍源可以是专门的硬件定 时器,或是来自50/60Hz交流电源的信号。

嵌入式操作系统

嵌入式操作系统
1
2
ISR
3
非 占 先 式 内 核
时间
4
ISR使高优先级任务就绪
5
6
高优先级任务
低优先级任务释 放CPU使用权
7
17
5.3.5 任务调度
1. 非占先式内核
非占先式内核的优点包括:
① ②
响应中断快 可以使用不可重入函数

共享数据方便
非占先式内核最大的缺陷在于任务响应时间是 不确定的。这个明显的缺点限制了该内核在实时 系统中的应用,商用软件几乎没有非占先式内核。
2
5.2 嵌入式操作系统概述
5.2.1 嵌入式实时操作系统
5.2.2 典型的嵌入式操作系统
3
5.2 嵌入式操作系统概述
5.2.1 嵌入式实时操作系统
非实 时嵌 入式 应用
嵌入式实 时应用
一般 实时 应用
嵌入式应用
实时应用
图5-1 实时操作系统与嵌入式操作系统的关系
4
实时系统是指一个能够在指定的或者确
25
5.3.6 任务间通信与同步
1. 任务间的通信--消息机制
任务间另一种通信方式是使用消息机制。
任务可以通过内核提供的系统服务向另一 个任务发消息。
消息机制包括:消息邮箱和消息队列。
26
5.3.6 任务间通信与同步
消息邮箱
消息通常是内存空间的一个数据结构,通常是
一个指针型变量。
任务或中断服务子程序通过内核服务,可以把
允许存放多个消息。
对消息队列的操作和对消息邮箱的操作基本
相同。
29
通常,内核中提供的消息队列服务包括:
消息队列初始化;
放一则消息到队列中去(POST);

操作系统时间管理

操作系统时间管理

操作系统时间管理引言时间管理是操作系统中一个非常重要的功能,操作系统通过对时间的管理,确保各个进程的协调运行,保证系统的正常运作。

本文将介绍操作系统中的时间管理原理和相关的常用概念。

时间的表示在操作系统中,常用的时间表示方式有两种:绝对时间和相对时间。

绝对时间使用特定的时间点作为起点,以秒数、分钟数、小时数等单位来表示时间。

绝对时间一般被用于记录事件的发生时间或计算时间间隔。

相对时间是指一个时间段的长度,通常以毫秒为单位。

相对时间常用于操作系统中的等待、延迟和定时等功能。

系统时钟系统时钟是操作系统中的一个重要组件,用于记录时间和生成计时事件。

操作系统通过系统时钟来实施时间管理。

系统时钟的周期性中断可以用于触发各种操作,例如定时执行任务、处理系统资源等。

它由硬件提供,并由操作系统进行配置和管理。

时钟中断和时钟周期时钟中断是指定时产生的中断信号。

计算机系统中的时钟周期是指时钟中断周期的长度,它主要由硬件提供和控制。

时钟周期的长度决定了系统的时钟精度。

操作系统通过控制时钟中断的频率,可以实现对时间的精确控制。

例如,Windows操作系统中的时钟中断频率通常为10毫秒,即每10毫秒产生一个时钟中断。

进程调度和时间片时间片是指操作系统分配给每个进程的时间段,在这个时间段内,进程可以占用CPU来执行任务。

当一个进程的时间片用完后,操作系统会中断该进程的执行,将CPU分配给其他等待执行的进程。

进程调度算法决定了进程在时间片用完后的调度行为。

常见的进程调度算法有先来先服务(FCFS)、最短作业优先(SJF)、轮转法(Round-robin)等。

合理分配和管理时间片能够提高系统的运行效率和吞吐量,避免进程饥饿和资源竞争。

定时器定时器是操作系统中的一个重要组件,用于设置和管理定时任务。

操作系统通过定时器实现对进程、线程和系统资源的管理和控制。

定时器可以用于实现各种功能,例如定时唤醒、定时执行、定时检查等。

操作系统根据定时器设置的时间来判定何时执行相应的任务。

嵌入式系统设计中实时操作系统的使用教程

嵌入式系统设计中实时操作系统的使用教程

嵌入式系统设计中实时操作系统的使用教程实时操作系统(Real-Time Operating System, RTOS)是一种特殊设计的操作系统,用于处理实时应用程序的需求。

在嵌入式系统设计中,实时操作系统的使用非常重要,能够确保系统对于外界事件的响应能力和可靠性。

本文将为您提供嵌入式系统设计中实时操作系统的使用教程。

一、实时操作系统的基本概念实时操作系统是一种必须能够及时响应外部事件的操作系统。

根据响应时间的要求,实时操作系统可以分为硬实时和软实时系统。

硬实时系统对于外界事件的响应必须在严格的时间限制内完成,而软实时系统可以在一定的时间限制内完成响应,但没有严格要求。

实时操作系统通常具有以下几个特点:1. 任务调度:实时操作系统能够管理和调度多个任务,在不同的优先级下执行任务。

2. 中断处理:实时操作系统能够处理硬件中断,响应外部事件的发生。

3. 时间管理:实时操作系统能够管理时间,包括任务执行时间、延迟等。

4. 任务间通信:实时操作系统能够提供任务间的通信机制,使得不同任务之间可以共享资源、传递消息等。

5. 错误处理:实时操作系统能够对系统错误进行处理,确保系统的稳定性。

二、选择适合的实时操作系统在嵌入式系统设计中选择适合的实时操作系统非常重要。

以下几点是选择实时操作系统时需要考虑的因素:1. 响应时间要求:确定系统对于外界事件响应的时间要求,选择硬实时还是软实时操作系统。

2. 系统资源:考虑系统的资源限制,包括处理器性能、内存容量等,选取适合的实时操作系统。

3. 任务复杂性:评估系统中任务的数量和复杂性,选择适合管理和调度任务的实时操作系统。

4. 系统稳定性:考虑系统的稳定性要求,选择具有良好错误处理能力的实时操作系统。

根据以上因素选择适合的实时操作系统,常见的实时操作系统包括VxWorks、QNX、FreeRTOS等。

三、实时操作系统的使用教程下面将以FreeRTOS为例,介绍实时操作系统的使用教程。

第八讲任务管理时间管理内存管理PPT课件

第八讲任务管理时间管理内存管理PPT课件

05.11.2020
4
《嵌入式系统设计》
建立任务OSTaskCreate()
w OSTaskCreate()需要四个参数:
Ø task是指向任务代码的指针; Ø Pdata指向一个数据结构,该结构用来在建立任务时
向任务传递参数 ; Ø ptos是分配给任务的堆栈的栈顶指针(任务堆栈); Ø prio是分配给任务的优先级
05.11.2020
14
《嵌入式系统设计》
w 参数
Ø prio为要求删除任务的优先级。如果参数为OS_PRIO_SELF,则 表示调用函数的任务正在查询是否有来自其他任务的删除请求。
w 返回值
Ø OSTaskDelReq()的返回值为下述之一: Ø OS_NO_ERR:删除请求已经被任务记录。 Ø OS_TASK_NOT_EXIST:指定的任务不存。发送删除请求的任务
数OSTaskCreate()或OSTaskCreateExt()重新建立
w 参数
Ø prio为指定要删除任务的优先级,也可以用参数OS_PRIO_SELF 代替,此时,下一个优先级最高的就绪任务将开始运行。
05.11.2020
12
范例
《嵌入式系统设计》
05.11.2020
13
《嵌入式系统设计》
10
《嵌入式系统设计》
05.11.2020
11
删除任务OSTaskDel()
《嵌入式系统设计》
w OSTaskDel()函数删除一个指定优先级的任务;
w 任务可以传递自己的优先级给OSTaskDel(),从而删
除自身
Ø 如果任务不知道自己的优先级,还可以传递参数OS_PRIO_SELF
w 被删除的任务将回到休眠状态。任务被删除后可以用函

嵌入式操作系统教程-第七章

嵌入式操作系统教程-第七章

嵌 入 式 操 作 系 统 基 础 第 七 章 uC/OS-II
3
嵌 入 式 操 作 系 统 基 础 第 七 章 uC/OS-II
}
§7.2 uC/OS-II的启动
多任务的启动是用户通过调用OSStart()实现的。 然而,启动μC/OS-Ⅱ之前,用户至少要建立一个应 用任务。
void main (void) { OSInit(); */ . 通过调用OSTaskCreate()或OSTaskCreateExt()创建至少一个任务; . OSStart(); */ /* 开始多任务调度!OSStart()永远不会返回
4
/* 初始化uC/OS-II
嵌 入 式 操 作 系 统 基 础 第 七 章 uC/OS-II
}
OSStart()的函数实现
void OSStart (void) { INT8U y; INT8U x; if (OSRunning == FALSE) { y = OSUnMapTbl[OSRdyGrp]; x = OSUnMapTbl[OSRdyTbl[y]]; OSPrioHighRdy = (INT8U)((y << 3) + x); OSPrioCur = OSPrioHighRdy; OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy]; OSTCBCur = OSTCBHighRdy; OSStartHighRdy(); }
பைடு நூலகம்(1) (2)
5
嵌 入 式 操 作 系 统 基 础 第 七 章 uC/OS-II
1
第七章 uC/OS-II的初始化和启动
uC/OS-II的初始化 uC/OS-II的启动
嵌 入 式 操 作 系 统 基 础 第 七 章 uC/OS-II

南航 嵌入式实时操作系统 课件 第7章 中断和时间管理.

南航 嵌入式实时操作系统 课件 第7章 中断和时间管理.
18
ARM向量中断控制器
❖特 性 ● ARM PrimeCell TM向量中断控制器; ●32个中断请求输入; ●16个向量IRQ中断; ●16个优先级,可动态分配给中断请求; ●软件中断产生。
19
20
向量中断控制器方框图
ARM向量中断控制器
描述
❖ 向量中断控制器(VIC)具有32个中断请求输 入,可将其编程分为3类:
16
中断控制器
❖ 在基于x86的架构中,8259是一个非常通用的中断控制器芯片(称 为PIC,programmable interrupt controller)。
❖ 每个PIC只能够处理8个中断,为支持更多数量的中断,需要组织成
菊花链(daisy chain)的方式,把一个PIC的输出连接到另一个
17
PIC的输入上。
中断控制器
❖ 在基于x86的架构中,8259是一个非常通 用的中断控制器芯片(称为PIC, programmable interrupt controller)。
❖ 每个PIC只能够处理8个中断,为支持更多 数量的中断,需要组织成菊花链(daisy chain)的方式,把一个PIC的输出连接到 另一个PIC的输入上。
用户中断服务程序:
❖ 完成对中断的具体处理。
中断后续:
❖恢复中断现场,退出中断处理。
35
实时内核的中断管理
❖ 中断前导和中断后续通常由内核的中断接管程序来实现。
硬件中断发生后,中断接管程序获得控制权,先由中断接管程 序进行处理,然后才将控制权交给相应的用户中断服务程序。
用户中断服务程序执行完成后,又回到中断接管程序。
30
非嵌套的中断处理方式
❖ 处理中断的时候,将屏蔽所有其他的中断请求。

定时器

定时器

8.3嵌入式Linux时钟管理在许多基于微处理器的嵌入式系统中,对时问的管理是非常重要的,如在目前刚刚兴起的PDA手机中,不仅包含显示时钟功能,还包含定时提醒的记事本功能。

在同样是嵌入式系统的摄像机中,也可以设定自动开机的时间。

这些都包含时钟的管理功能。

在任何一个嵌入式系统中,都有一个硬件时钟,它相当于整个系统的心脏,给系统提供始终如一的时钟频率,是系统衡量其他一切时间的基准,也是系统进行时钟管理的基础。

如果要提供日历功能,即使在系统关机时,也应该有后备电源维持这个时钟的跳动。

在嵌入式Linux系统中另外还有一个软件时钟,}.inux内核从硬件时钟上直接取得时间。

在引导期间,Lin}x将自己的软件时钟设置成与硬件时钟同步。

在这以后,两个时钟都独立地运行。

Linux维持着自己的时钟,因为读取硬件时钟的速度很慢,并且其实现也比较复杂。

由于嵌入式Linux操作系统已经提供对时钟的管理,这样在开发牵涉到时钟方面的应用时,只需使用相应的系统调用就可以了。

嵌入式Unux的时钟管理主要有两个方面:一个是设置和获取系统时间,另一个是使用定时器。

下面将分别对这两个方面进行介绍。

8.3.1时间日期管理1、时间的表示方式在Linux操作系统中,有3类数据结构用来表示时间,它们都是在tirne.h中定义。

(1)日历时间表示法。

struct time_ t是一种最为紧凑的表达方式,用于表达日历时间,当它存储的是绝对时间对,表示的是自197年1月1日D时(标准时区)起所经历的秒数。

Time_t在数据结构上等于long int.(2)精确表示法。

struct timeval:由于strttct time t的精度只有1秒,在对时间精度要求较高的场合将不能满足要求,所以定义了struct titneval,它的数据结构为:struct timeval{long int tv_sec;/*秒数*/long int tv_usec/*微秒数*/} 所以struct timeval的时间精度为1微秒。

嵌入式OS入门笔记-以RTX为案例:5五.简单的时间管理

嵌入式OS入门笔记-以RTX为案例:5五.简单的时间管理

上一节简单记录了进程task。

有了进程以后,我们需要关心怎么样分配CPU资源(或者运行时间)给每个进程。

那么就要引入排程(scheduling)的概念。

排程一般都是OS里面非常重要的一部分,但是在深入进入排程和理解RTX排程器(scheduler)如何运作之前,不妨看看RTX提供的许多简单易容的时间管理相关的操作,这些操作虽然也涉及排程器的运作,但是不需要我们对排程器和相关算法有深刻的理解。

1.配置前提∙RTX配置为不使用Round-Robin(轮转式)排程(在RTX_Conf_CM.c中取消勾选Roudn-Robin Task Switching)∙创建的进程,优先度全部一样(为0)1.OS_TID taskID1;2.OS_TID taskID2;3.4.__task void init (void) {5.//Necessary Initialization6.//...7.//Create a task8. taskID1 = os_tsk_create(task1, 0);9. taskID2 = os_tsk_create(task2, 0);10. os_tsk_delete_self (); // Delete the init(self) task11.}12.13.int main(void)14.{15.//Necessary Initialization16.//...17. os_sys_init(init);18.19.}运行后,会有两个同等优先级的task,task1和task2。

2.简单的时间管理操作os_time_get(void);首先是这个操作,返回一个U32数,为当前操作系统运行的时间,以Timer Ticks Value为单位(见上面RTX配置图),预设是10ms。

所以如果返回0x000000C4,那么OS走了1960ms,也就是1.96s。

然后就是三个主动放弃当前对CPU占用的操作。

嵌入式的管理制度范文

嵌入式的管理制度范文

嵌入式的管理制度范文嵌入式管理制度范文第一章总则第一条为规范和提高嵌入式系统的管理水平,保证嵌入式系统的安全性和稳定性,制定本管理制度。

第二条本管理制度适用于本企业的嵌入式系统管理工作。

第三条本管理制度的目标是建立一套完善的嵌入式系统管理机制,确保嵌入式系统按照规定的流程、标准和要求进行设计、开发、测试、维护和管理。

第四条嵌入式系统的管理应遵循科学、规范、统一、透明的原则,保障嵌入式系统的安全、可靠、可用、高效、可维护等特性。

第二章组织管理第五条本企业应建立嵌入式系统管理委员会,由企业领导、技术负责人、项目负责人等组成,负责制定嵌入式系统管理的战略、政策和规划,协调解决嵌入式系统管理过程中的重大问题。

第六条本企业应设立嵌入式管理部门,负责嵌入式系统的规划、设计、开发、测试、维护和管理工作,制定嵌入式系统管理的具体办法和规程,进行技术研究、培训和交流。

第七条本企业应建立嵌入式系统管理人员的岗位职责和评价标准,制定人员培训和晋升机制,提高嵌入式系统管理人员的专业素质和业务能力。

第三章项目管理第八条本企业应建立嵌入式系统项目管理的规范和流程,包括项目立项、需求分析、系统设计、开发实施、测试验收、运维维护等环节。

第九条项目立项应进行前期调研和可行性分析,明确项目目标、范围、进度、成本等,制定项目计划和工作任务。

第十条需求分析应充分沟通和理解用户需求,进行系统功能和性能的需求分解和梳理,编制详细的需求规格说明书。

第十一条系统设计应根据用户需求和技术要求,进行系统框架和模块设计,编制详细的设计说明书。

第十二条开发实施应根据设计说明书进行编码和调试,保证系统的正确性和稳定性。

第十三条测试验收应包括单元测试、集成测试、系统测试和验收测试,验证系统的功能、性能和稳定性。

第十四条运维维护应建立健全的运维和维护流程,及时排除故障,提供技术支持和服务。

第四章质量管理第十五条本企业应建立嵌入式系统质量控制和评价机制,制定质量管理的标准和流程,加强对嵌入式系统质量的监督和评估。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学嵌入式软件工程中心
硬件时钟设备
• 在不同的操作系统中,实时时钟和系统时钟之间 的关系是不同的。 –实时时钟和系统时钟之间的关系通常也被称作 操作系统的时钟运作机制。 –一般来说,实时时钟是系统时钟的时间基准, 实时内核通过读取实时时钟来初始化系统时钟, 此后二者保持同步运行,共同维系系统时间。 –系统时钟并不是本质意义上的时钟,只有当系 统运行起来以后才有效,并且由实时内核完全 控制。
电子科技大学嵌入式软件工程中心
void OSTimeDly (INT16U ticks) { /* Allocate storage for CPU status register #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif
*/
if (ticks > 0) { /* 0 means no delay! */ OS_ENTER_CRITICAL(); if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* Delay current task */ OSRdyGrp &= ~OSTCBCur->OSTCBBitY; } OSTCBCur->OSTCBDly = ticks; /* Load ticks in TCB */ OS_EXIT_CRITICAL(); OS_Sched(); /* Find next task to run! */ } }
RTCCON PMWKUP
Alarm Generator
RTCALM PWDN ALMNT
三星44B0X(ARM7)芯片中的RTC •在系统没有上电的情况下,可由后备电池供电; •可以通过ARM的STRB/LDRB操作获取RTC以二进制编码的十进制数据 格式向CPU提供8比特数据。数据包含秒、分、小时、日、月和年等内容; •使用一个外部的32.768KHz晶振; •包括一个闰年产生器; •提供告警中断或是从掉电模式中唤醒的告警功能:; •能够避免2000年问题(即千年虫问题); •独立的电源引脚; •能够为实时内核的系统时钟提供毫秒级的时间中断; •能够进行循环复位。
void TickTask (void *pdata) { pdata = pdata; for (;;) { OSMboxPend(...); /* Wait for signal from Tick ISR */ OSTimeTick(); OS_Sched(); } } void OSTickISR(void) { Save processor registers; Call OSIntEnter() or increment OSIntNesting; if (OSIntNesting == 1) { OSTCBCur->OSTCBStkPtr = SP; } Post a 'dummy' message (e.g. (void *)1) to the tick mailbox;
电子科技大学嵌入式软件工程中心
硬件时钟设备
• 从硬件的角度来看,定时器(timer)和计 数器(counter)的概念是可以互换的,其 差别主要体现在硬件在特定应用中的使用 情况。
电子科技大学嵌入式软件工程中心
一个简单的定时器/计数器 •包含一个可装入的8位计数寄存器,一个时钟输入信号和一个输出脉冲。 •通过软件可以把一个位于0x00和0xFF之间的初始数据转入到计数寄存器。随后 的每一个时钟输入信号都会导致该值被增加。 •当8位计数器溢出时,就产生输出脉冲。 •输出脉冲可以用来触发处理器上的一个中断,或是在处理器能够读取的地方设 置一个二进制位。 •输出脉冲是操作系统时钟的硬件基础,是因为输出脉冲将送到中断控制器上, 产生中断信号,触发时钟中断,由时钟中断服务程序维持操作系统时钟的正常 工作。
电子科技大学嵌入式软件工程中心
tick处理程序
系统时钟中断服务程序
… tick处理程序 …
… 相对时间处理 … 任务时间片处理 … 时间等待链处理 … 软件定时器处理 … 日历时间处理 … 任务调度处理
tick处理程序
电子科技大学嵌入式软件工程中心
Tick Under uC/OS-II
void OSTickISR(void) {
}
电子科技大学嵌入式软件工程中心
void OSTimeTick (void) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif OS_TCB *ptcb;
OSTimeTickHook(); (1) #if OS_TIME_GET_SET_EN > 0 OS_ENTER_CRITICAL(); OSTime++; (2) OS_EXIT_CRITICAL(); #endif if (OSRunning == TRUE) { ptcb = OSTCBList; (3) while (ptcb->OSTCBPrio != OS_IDLE_PRIO) { (4) OS_ENTER_CRITICAL(); if (ptcb->OSTCBDly != 0) { if (--ptcb->OSTCBDly == 0) { if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) == 0x00) { (5) OSRdyGrp |= ptcb->OSTCBBitY; (6) OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX; } else { ptcb->OSTCBDly = 1; } } } ptcb = ptcb->OSTCBNext; OS_EXIT_CRITICAL(); } } 电子科技大学嵌入式软件工程中心 }
硬件时钟设备
• 大多数嵌入式系统有两种时钟源:
–实时时钟(real time clock,RTC) –定时器/计数器
• 实时时钟:
–一般靠电池供电,即使系统断电,也可以维持日期 和时间。 –实时时钟独立于操作系统,所以也被称为硬件时钟, 为整个系统提供一个计时标准。
• 定时器/计数器:
–实时内核需要一个定时器作为系统时钟(或称OS时 钟),并由实时内核控制系统时钟工作。 –一般情况下,系统时钟的最小粒度是由应用和操作 系统的特点决定的。
电子科技大学嵌入式软件工程中心 OSTimeDly Under uC/OS-II
时间管理
• 管理功能是通过tick处理程序来实现的。
–定时器发生中断后,执行系统时钟中断处理程 序,并在中断处理程序中调用tick处理程序, 实现系统中与时间和定时相关的操作。 –tick处理程序作为实时内核的一部分,与具体 的定时器/计数器硬件无关,由系统时钟中断处 理程序调用,使实时内核具有对不同定时器/计 数器硬件的适应性。
CALL
CALL POP POP POPA IRET _OSTickISR ENDP
FAR PTR _OSTimeTick
FAR PTR _OSIntExit DS ES
; Process system tick
; Notify uC/OS-II of end of ISR
; Restore interrupted task's context
; Return to interrupted task
OSTickISR Under 80x86
电子科技大学嵌入式软件工程中心
时间管理
• 相对时间即系统时间,是指相对于系统启动以来的时 间,以tick为单位,每发生一个tick,对系统的相对 时间进行一次加1操作。 • 实时内核根据tick对应的时间长度,可以把相对时间 转换为以秒或是毫秒为单位的其他时间格式,并可根 据实时时钟获得日历时间。 • 如果对任务设置了时间片处理方式,需要在tick处理 程序中对当前正在运行的任务的已执行时间进行更新, 使任务的已执行时间数值加1。
–例如,可以使系统5毫秒产生一个tick,也可以是 10毫秒产生一个tick。tick的大小决定了整个系统 的时间粒度。
电子科技大学嵌入式软件工程中心
时间管理
• 通常来说,实时内核提供以下主要与时间 相关的管理:
–维持相对时间(时间单位为tick)和日历时间; –任务有限等待的计时; –定时功能; –时间片轮转调度的计时。
•为了重启定时器,软件需要重新装入一个相同或不同的初始数据到计数寄存器。
电子科技大学嵌入式软件工程中心
硬件时钟设备
• 在一个典型的计数器中,当初始数据被装入后, 可以使用一定的方式来启动计数器。并且,一个实
际的计数器也需要为处理器提供一种通过数据总线读取计 数寄存器当前值的方式。
• 如果希望定时器能够自动重新装入初始数据,就 需要一个锁存寄存器,以保存处理器所写入的计 数数据。
– 当处理器向锁存寄存器写入数据时,计数寄存器也被写入了该数据。 – 定时器溢出时,定时器产生输出脉冲,然后自动把锁存寄存器中的 数据重新装入到计数寄存器。 – 由于锁存寄存器仍然拥有处理器写入的数据,计数器将从同样的初 始数据重新开始进行计数。 – 这样的定时器能够产生与时钟具有相同精度的规则性输出。输出脉 冲产生的周期性中断可以用于实时内核需要的tick,或是为UART提 供一个波特率时钟,或是驱动需要规则脉冲的设备。
电子科技大学嵌入式软件工程中心
时间管理
• 实时内核的时间管理以系统时钟为基础, 系统时钟一般定义为整数或长整数,提供 给应用程序所有和时间有关的服务。 • 系统时钟是由定时/计数器产生的输出脉冲 触发中断而产生的。
• 输出脉冲的周期叫做一个“时钟滴答”, 也称为时标、tick。
电子科技大学嵌入式软件工程中心
电子科技大学嵌入式软件工程中心
相关文档
最新文档