|
|
|
|||||
|
|
作者 Ray RTEMS版权所有,转载请注明来源www.rtems.net,作者Ray 11.1: 介绍时钟管理器提供对日期和其他的与时间相关的服务。 由时钟管理器提供的函数是: rtems_clock_set- 设定系统日期和时间 rtems_clock_get- 获取系统时间信息 rtems_clock_tick- 发布时间信号 11.2.1: 必需的支持为了向钟管理器提供时钟,必须有一个周期型的时钟中断。因此系统中必须要有一个硬件的实时时钟(RTC)去产生这个中断。时钟ISR会调用rtems_clock_tick函数通知系统已经经过了一个特定的时间段。在RTEMS中,时间的单位是tick(我翻译成嘀哒,相当于Linux中的Jifferies)。他的实际时间值在系统配置表中配置。 11.2.2: 时间和日期数据结构时钟管理器对时间进行操作。他使用到的函数中大多使用了以下的数据结构记录时间: struct rtems_tod_control{ 使用 rtems_clock_get 函数设定系统的日期和时间的时候 , 必须使用上面的格式。Linux的程序员可能会希望使用 "UNIX/Linux风格"的日期和时间数据结构。rtems_clock_get函数能可选择地在下列的结构中返回现在的日期和时间: typedef struct{ 该结构的第二个字段是自从1988 年一月 1 日以后的微秒数。 11.2.3: 时钟滴哒和时间片复用前面说过,时分复用也称为为轮转法调度,是让优先级相同的任务共享时间片的一种调度方式。分配给给每个任务的时间长度被称为时间片(timeslice) 。 系统的 timeslice 被定义为滴哒的整数倍, 该数在配置表中指定。 timeslice定义好后,整个系统都将使用这个数作为自己的时间片。当然,每个任务可以决定是否参加时间片调度。 当时分复用和抢占使能时,时分复用是通过rtems_clock_tick 函数来实现倒计时功能。如果任务的时间片用完了,调度管理器将当前任务调度出嵌入式处理器。 11.2.4: 延时休眠定时器允许任务将自己挂起一个给定的时间间隔, 然后唤醒自己,继续执行。由于该类型的计时器使用rtems_task_wake_after 和 rtems_task_wake_when 函数自动创建而且,所以他们没有RTEMS的ID标识。 一旦激活,任务是不能删除他的休眠的计时器。每个任务每次只能激活一个休眠计时器。 11.2.5: 超时设定超时是一类特殊的定时器。如果使用rtems_message_queue_receive , rtems_event_receive , rtems_semaphore_obtain 和 rtems_region_get_segment 函数,并且设置了超时选项,就会创建一个超时定时器。每个任务在任何时刻都将有且仅有一个超时定时器。当任务的超时定时器时间片到达时,定时器将解除阻塞的任务。 11.3: 定时器管理函数发布时间滴哒 设置时钟 获取时间 11.3.1: 发布时钟滴哒RTEMS提供rtems_clock_tick 函数,该函数在时钟的ISR中调用,告诉RTMES系统一个时钟滴哒过去了。滴哒的实际值(使用微秒表示)定义在系统的配置表里。RTEMS使用时钟的滴哒数以及每个滴哒代表的实际时间来维护系统时间。rtems_clock_tick 函数函数执行的频率决定了系统时钟的精度(粒度)。例如每秒调用一次rtems_clock_tick 函数的系统时间粒度大于每秒调用十次rtems_clock_tick的系统。rtems_clock_tick函数用来维护系统时间和定时器时钟。 11.3.2: 设定时间rtems_clock_set 函数允许一个任务或 ISR 设定RTEMS日期和时间。 如果设定日期和时间导致任何一个计时器超时,那么将会触发时间片到的信号。 11.3.2: 设定时间rtems_clock_set 函数允许一个任务或 ISR 设定RTEMS日期和时间。 如果设定日期和时间导致任何一个计时器超时,那么将会触发时间片到的信号。 11.3.3: 获得时间rtems_clock_get 函数允许一个任务或 ISR 获得现在的日期和时间或其他与事件相关的信息。当前日期和时间能使用RTEMS标准的格式或者UNIX风格的格式。此外,也能返回从纪元(1900年7月1号零时)起的时间(滴哒数,秒数等) 。返回值在rtems_clock_get_options 中制定,该参数可以为下面的常量之一: RTEMS_CLOCK_GET_TOD- 获得RTEMS风格日期和时间 RTEMS_CLOCK_GET_TIME_VALUE- 获得 UNIX风格的日期和时间 RTEMS_CLOCK_GET_TICKS_SINCE_BOOT- 获取RTEMS初始化后的滴哒数目。 RTEMS_CLOCK_GET_SECONDS_SINCE_EPOCH- 获取从纪元起的秒数 RTEMS_CLOCK_GET_TICKS_PER_SECOND- 获取每秒的滴哒数目 如果没有设置过系统的时间,那么对日期的操作会返回错误。 |
|||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
嵌入式软硬件设计咨询 8位
16位 32位 64位 RISC DSP |
||||||||||||||||
| 2004 RTEMS.NET 版权所有 |
||||||||||||||||