Task Services
[Driver Development API]

Collaboration diagram for Task Services:


Task Priority Range

Maximum and minimum task priorities

#define RTDM_TASK_LOWEST_PRIORITY   FUSION_LOW_PRIO
#define RTDM_TASK_HIGHEST_PRIORITY   FUSION_HIGH_PRIO

Typedefs

typedef void(* rtdm_task_proc_t )(void *arg)
 Real-time task procedure.

Functions

int rtdm_task_init (rtdm_task_t *task, const char *name, rtdm_task_proc_t task_proc, void *arg, int priority, __u64 period)
 Intialise and start a real-time task.
void rtdm_task_destroy (rtdm_task_t *task)
 Destroy a real-time task.
void rtdm_task_set_priority (rtdm_task_t *task, int priority)
 Adjust real-time task priority.
int rtdm_task_set_period (rtdm_task_t *task, __u64 period)
 Adjust real-time task period.
int rtdm_task_wait_period (void)
 Wait on next real-time task period.
int rtdm_task_unblock (rtdm_task_t *task)
 Activate a blocked real-time task.
rtdm_task_t * rtdm_task_current (void)
 Get current real-time task.
void rtdm_task_join_nrt (rtdm_task_t *task, unsigned int poll_delay)
 Wait on a real-time task to terminate.
int rtdm_task_sleep (__u64 delay)
 Sleep a specified amount of time.
int rtdm_task_sleep_until (__u64 wakeup_time)
 Sleep until a specified absolute time.
void rtdm_task_busy_sleep (__u64 delay)
 Busy-wait a specified amount of time.


Typedef Documentation

typedef void(* rtdm_task_proc_t)(void *arg)
 

Real-time task procedure.

Parameters:
[in,out] arg argument as passed to rtdm_task_init()


Function Documentation

void rtdm_task_busy_sleep __u64  delay  ) 
 

Busy-wait a specified amount of time.

Parameters:
[in] delay Delay in nanoseconds
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • Interrupt service routine (but you should rather avoid this...)
  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: always.

rtdm_task_t* rtdm_task_current void   ) 
 

Get current real-time task.

Returns:
Pointer to task handle
Environments:

This service can be called from:

  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: never.

void rtdm_task_destroy rtdm_task_t *  task  ) 
 

Destroy a real-time task.

Parameters:
[in,out] task Task handle as returned by rtdm_task_init()
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: never.

int rtdm_task_init rtdm_task_t *  task,
const char *  name,
rtdm_task_proc_t  task_proc,
void *  arg,
int  priority,
__u64  period
 

Intialise and start a real-time task.

Parameters:
[in,out] task Task handle
[in] name Optional task name
[in] task_proc Procedure to be executed by the task
[in] arg Custom argument passed to task_proc() on entry
[in] priority Priority of the task, see also Task Priority Range
[in] period Period in nanosecons of a cyclic task, 0 for non-cyclic mode
Returns:
0 on success, otherwise negative error code
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: possible.

void rtdm_task_join_nrt rtdm_task_t *  task,
unsigned int  poll_delay
 

Wait on a real-time task to terminate.

Parameters:
[in,out] task Task handle as returned by rtdm_task_init()
[in] poll_delay Polling delay in milliseconds
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • User-space task (non-RT)

Rescheduling: possible.

int rtdm_task_set_period rtdm_task_t *  task,
__u64  period
 

Adjust real-time task period.

Parameters:
[in,out] task Task handle as returned by rtdm_task_init()
[in] period New period in nanosecons of a cyclic task, 0 for non-cyclic mode
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • Interrupt service routine
  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: possible.

void rtdm_task_set_priority rtdm_task_t *  task,
int  priority
 

Adjust real-time task priority.

Parameters:
[in,out] task Task handle as returned by rtdm_task_init()
[in] priority New priority of the task, see also Task Priority Range
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • Interrupt service routine
  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: possible.

int rtdm_task_sleep __u64  delay  ) 
 

Sleep a specified amount of time.

Parameters:
[in] delay Delay in nanoseconds
Returns:
0 on success, otherwise:
  • -EINTR is returned if calling task has been unblock by a signal or explicitely via rtdm_task_unblock().

Environments:

This service can be called from:

  • Kernel-based task
  • User-space task (RT)

Rescheduling: always.

int rtdm_task_sleep_until __u64  wakeup_time  ) 
 

Sleep until a specified absolute time.

Parameters:
[in] wakeup_time Absolute timeout in nanoseconds
Returns:
0 on success, otherwise:
  • -EINTR is returned if calling task has been unblock by a signal or explicitely via rtdm_task_unblock().

Environments:

This service can be called from:

  • Kernel-based task
  • User-space task (RT)

Rescheduling: always, unless the specified time already passed.

int rtdm_task_unblock rtdm_task_t *  task  ) 
 

Activate a blocked real-time task.

Returns:
Non-zero is returned if the task was actually unblocked from a pending wait state, 0 otherwise.
Environments:

This service can be called from:

  • Kernel module initialization/cleanup code
  • Interrupt service routine
  • Kernel-based task
  • User-space task (RT, non-RT)

Rescheduling: possible.

int rtdm_task_wait_period void   ) 
 

Wait on next real-time task period.

Returns:
0 on success, otherwise:
  • -EINVAL is returned if calling task is not in periodic mode.

  • -ETIMEDOUT is returned if a timer overrun occurred, which indicates that a previous release point has been missed by the calling task.

Environments:

This service can be called from:

  • Kernel-based task
  • User-space task (RT)

Rescheduling: always, unless a timer overrun occured.


Generated on Sat Sep 3 12:33:00 2005 for RTAI Fusion API by  doxygen 1.4.2