⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.h

📁 开放源码的嵌入式开发环境
💻 H
字号:
/** * @file rtems/rtems/timer.h *//* *  This include file contains all the constants, structures, and *  prototypes associated with the Timer Manager.  This manager provides *  facilities to configure, initiate, cancel, and delete timers which will *  fire at specified intervals of time. * *  Directives provided are: * *     + create a timer *     + get an ID of a timer *     + delete a timer *     + set timer to fire in context of clock tick *        - after a number of ticks have passed *        - when a specified date and time has been reached *     + initiate the timer server task *     + set timer to fire in context of the timer server task *        - after a number of ticks have passed *        - when a specified date and time has been reached *     + reset a timer *     + cancel a time * *  COPYRIGHT (c) 1989-2002. *  On-Line Applications Research Corporation (OAR). * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * *  $Id: timer.h,v 1.20 2005/01/28 05:00:20 ralf Exp $ */#ifndef _RTEMS_RTEMS_TIMER_H#define _RTEMS_RTEMS_TIMER_H#ifdef __cplusplusextern "C" {#endif#include <rtems/score/object.h>#include <rtems/score/tod.h>#include <rtems/score/watchdog.h>#include <rtems/rtems/attr.h>/* *  The following enumerated type details the classes to which a timer *  may belong. */typedef enum {  TIMER_INTERVAL,  TIMER_INTERVAL_ON_TASK,  TIMER_TIME_OF_DAY,  TIMER_TIME_OF_DAY_ON_TASK,  TIMER_DORMANT} Timer_Classes;/* *  The following types define a pointer to a timer service routine. */typedef void rtems_timer_service_routine;typedef rtems_timer_service_routine ( *rtems_timer_service_routine_entry )(                 rtems_id,                 void *             );/* *  The following defines the information control block used to manage *  this class of objects. */RTEMS_EXTERN Objects_Information  _Timer_Information;/* *  Pointer to TCB of the Timer Server.  This is NULL before the *  server is executing and task-based timers are not allowed to be *  initiated until the server is started. */RTEMS_EXTERN Thread_Control *_Timer_Server;/* *  The following chains contain the list of interval timers that are *  executed in the context of the Timer Server. * *  NOTE: These are extern'ed because they do not have to be in the *        minimum footprint.  They are only really required when *        task-based timers are used.  Since task-based timers can *        not be started until the server is initiated, these structures *        do not have to be initialized until then.  They are declared *        in the same file as _Timer_Server_body. */extern Chain_Control _Timer_Ticks_chain;extern Chain_Control _Timer_Seconds_chain;/* *  The following records define the control block used to manage *  each timer. */typedef struct {  Objects_Control  Object;  Watchdog_Control Ticker;  Timer_Classes    the_class;}   Timer_Control;/* *  _Timer_Manager_initialization * *  DESCRIPTION: * *  This routine performs the initialization necessary for this manager. */void _Timer_Manager_initialization(  uint32_t   maximum_timers);/* *  _Timer_Server_body * *  DESCRIPTION: * *  This is the server for task based timers.  This task executes whenever *  a task-based timer should fire.  It services both "after" and "when" *  timers.  It is not created automatically but must be created explicitly *  by the application before task-based timers may be initiated. */Thread _Timer_Server_body(  uint32_t   ignored);/* *  rtems_timer_create * *  DESCRIPTION: * *  This routine implements the rtems_timer_create directive.  The *  timer will have the name name.  It returns the id of the *  created timer in ID. */rtems_status_code rtems_timer_create(  rtems_name    name,  Objects_Id   *id);/* *  rtems_timer_ident * *  DESCRIPTION: * *  This routine implements the rtems_timer_ident directive. *  This directive returns the timer ID associated with name. *  If more than one timer is named name, then the timer *  to which the ID belongs is arbitrary. */rtems_status_code rtems_timer_ident(  rtems_name    name,  Objects_Id   *id);/* *  rtems_timer_cancel * *  DESCRIPTION: * *  This routine implements the rtems_timer_cancel directive.  It is used *  to stop the timer associated with ID from firing. */rtems_status_code rtems_timer_cancel(  Objects_Id id);/* *  rtems_timer_delete * *  DESCRIPTION: * *  This routine implements the rtems_timer_delete directive.  The *  timer indicated by ID is deleted. */rtems_status_code rtems_timer_delete(  Objects_Id id);/* *  rtems_timer_fire_after * *  DESCRIPTION: * *  This routine implements the rtems_timer_fire_after directive.  It *  initiates the timer associated with ID to fire in ticks clock ticks. *  When the timer fires, the routine will be invoked in the context *  of the rtems_clock_tick directive which is normally invoked as *  part of servicing a periodic interupt. */rtems_status_code rtems_timer_fire_after(  Objects_Id                         id,  rtems_interval                     ticks,  rtems_timer_service_routine_entry  routine,  void                              *user_data);/* *  rtems_timer_server_fire_after * *  DESCRIPTION: * *  This routine implements the rtems_timer_server_fire_after directive.  It *  initiates the timer associated with ID to fire in ticks clock *  ticks.  When the timer fires, the routine will be invoked by the *  Timer Server in the context of a task NOT IN THE CONTEXT of the *  clock tick interrupt. */rtems_status_code rtems_timer_server_fire_after(  Objects_Id                         id,  rtems_interval                     ticks,  rtems_timer_service_routine_entry  routine,  void                              *user_data);/* *  rtems_timer_fire_when * *  DESCRIPTION: * *  This routine implements the rtems_timer_fire_when directive.  It *  initiates the timer associated with ID to fire at wall_time *  When the timer fires, the routine will be invoked in the context *  of the rtems_clock_tick directive which is normally invoked as *  part of servicing a periodic interupt. */rtems_status_code rtems_timer_fire_when(  Objects_Id                          id,  rtems_time_of_day                  *wall_time,  rtems_timer_service_routine_entry   routine,  void                               *user_data);/* *  rtems_timer_server_fire_when * *  DESCRIPTION: * *  This routine implements the rtems_timer_server_fire_when directive.  It *  initiates the timer associated with ID to fire at wall_time *  When the timer fires, the routine will be invoked by the *  Timer Server in the context of a task NOT IN THE CONTEXT of the *  clock tick interrupt. */rtems_status_code rtems_timer_server_fire_when(  Objects_Id                          id,  rtems_time_of_day                  *wall_time,  rtems_timer_service_routine_entry   routine,  void                               *user_data);/* *  rtems_timer_reset * *  DESCRIPTION: * *  This routine implements the rtems_timer_reset directive.  It is used *  to reinitialize the interval timer associated with ID just as if *  rtems_timer_fire_after were re-invoked with the same arguments that *  were used to initiate this timer. */rtems_status_code rtems_timer_reset(  Objects_Id id);/* *  rtems_timer_initiate_server * *  DESCRIPTION: * *  This routine implements the rtems_timer_initiate_server directive. *  It creates and starts the server that executes task-based timers. *  It must be invoked before any task-based timers can be initiated. */#define RTEMS_TIMER_SERVER_DEFAULT_PRIORITY -1rtems_status_code rtems_timer_initiate_server(  uint32_t             priority,  uint32_t             stack_size,  rtems_attribute      attribute_set);/* *  rtems_timer_get_information * *  DESCRIPTION: * *  This routine implements the rtems_timer_get_information directive. *  This directive returns information about the timer. */typedef struct {  Timer_Classes      the_class;  Watchdog_Interval  initial;  Watchdog_Interval  start_time;  Watchdog_Interval  stop_time;} rtems_timer_information;rtems_status_code rtems_timer_get_information(  Objects_Id               id,  rtems_timer_information *the_info);/* *  Macros and routines that expose the mechanisms required to service *  the Timer Server timer.  These stop the timer, synchronize it with *  the current time, and restart it. */extern Watchdog_Control _Timer_Seconds_timer;#define _Timer_Server_stop_ticks_timer() \      _Watchdog_Remove( &_Timer_Server->Timer )#define _Timer_Server_stop_seconds_timer() \      _Watchdog_Remove( &_Timer_Seconds_timer );void _Timer_Server_process_ticks_chain(void);void _Timer_Server_process_seconds_chain(void);#define _Timer_Server_reset_ticks_timer() \   do { \      if ( !_Chain_Is_empty( &_Timer_Ticks_chain ) ) { \        _Watchdog_Insert_ticks( &_Timer_Server->Timer, \           ((Watchdog_Control *)_Timer_Ticks_chain.first)->delta_interval ); \      } \   } while (0)#define _Timer_Server_reset_seconds_timer() \   do { \      if ( !_Chain_Is_empty( &_Timer_Seconds_chain ) ) { \        _Watchdog_Insert_seconds( &_Timer_Seconds_timer, \          ((Watchdog_Control *)_Timer_Seconds_chain.first)->delta_interval ); \      } \   } while (0)#ifndef __RTEMS_APPLICATION__#include <rtems/rtems/timer.inl>#endif#ifdef __cplusplus}#endif#endif/* end of include file */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -