Task Services
[Driver Development API]

Collaboration diagram for Task Services:


Task Priority Range

Maximum and minimum task priorities

#define RTDM_TASK_LOWEST_PRIORITY   XNCORE_LOW_PRIO
#define RTDM_TASK_HIGHEST_PRIORITY   XNCORE_HIGH_PRIO

Task Priority Modification

Raise or lower task priorities by one level

#define RTDM_TASK_RAISE_PRIORITY   (+1)
#define RTDM_TASK_LOWER_PRIORITY   (-1)

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, nanosecs_rel_t period)
void rtdm_task_destroy (rtdm_task_t *task)
void rtdm_task_set_priority (rtdm_task_t *task, int priority)
int rtdm_task_set_period (rtdm_task_t *task, nanosecs_rel_t period)
int rtdm_task_wait_period (void)
int rtdm_task_unblock (rtdm_task_t *task)
rtdm_task_t * rtdm_task_current (void)
int rtdm_task_sleep (nanosecs_rel_t delay)
int rtdm_task_sleep_until (nanosecs_abs_t wakeup_time)
int rtdm_task_sleep_abs (nanosecs_abs_t wakeup_time, enum rtdm_timer_mode mode)
void rtdm_task_join_nrt (rtdm_task_t *task, unsigned int poll_delay)
void rtdm_task_busy_sleep (nanosecs_rel_t delay)


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 ( nanosecs_rel_t  delay  ) 

Busy-wait a specified amount of time

Parameters:
[in] delay Delay in nanoseconds. Note that a zero delay does not have the meaning of RTDM_TIMEOUT_INFINITE here.
Note:
The caller must not be migratable to different CPUs while executing this service. Otherwise, the actual delay will be undefined.
Environments:

This service can be called from:

Rescheduling: never (except due to external interruptions).

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()
Note:
Passing the same task handle to RTDM services after the completion of this function is not allowed.
Environments:

This service can be called from:

Rescheduling: never.

int rtdm_task_init ( rtdm_task_t *  task,
const char *  name,
rtdm_task_proc_t  task_proc,
void *  arg,
int  priority,
nanosecs_rel_t  period 
)

Intialise and start a real-time task After initialising a task, the task handle remains valid and can be passed to RTDM services until either rtdm_task_destroy() or rtdm_task_join_nrt() was invoked.

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 nanoseconds of a cyclic task, 0 for non-cyclic mode
Returns:
0 on success, otherwise negative error code
Environments:

This service can be called from:

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 Delay in milliseconds between periodic tests for the state of the real-time task. This parameter is ignored if the termination is internally realised without polling.
Note:
Passing the same task handle to RTDM services after the completion of this function is not allowed.

This service does not trigger the termination of the targeted task. The user has to take of this, otherwise rtdm_task_join_nrt() will never return.

Environments:

This service can be called from:

Rescheduling: possible.

int rtdm_task_set_period ( rtdm_task_t *  task,
nanosecs_rel_t  period 
)

Adjust real-time task period

Parameters:
[in,out] task Task handle as returned by rtdm_task_init()
[in] period New period in nanoseconds 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 ( nanosecs_rel_t  delay  ) 

Sleep a specified amount of time

Parameters:
[in] delay Delay in nanoseconds, see RTDM_TIMEOUT_xxx for special values.
Returns:
0 on success, otherwise:

Environments:

This service can be called from:

Rescheduling: always.

int rtdm_task_sleep_abs ( nanosecs_abs_t  wakeup_time,
enum rtdm_timer_mode  mode 
)

Sleep until a specified absolute time

Parameters:
[in] wakeup_time Absolute timeout in nanoseconds
[in] mode Selects the timer mode, see RTDM_TIMERMODE_xxx for details
Returns:
0 on success, otherwise: - -EINTR is returned if calling task has been unblock by a signal or explicitly via rtdm_task_unblock().

Environments:

This service can be called from:

Rescheduling: always, unless the specified time already passed.

int rtdm_task_sleep_until ( nanosecs_abs_t  wakeup_time  ) 

Sleep until a specified absolute time

Deprecated:
Use rtdm_task_sleep_abs instead!
Parameters:
[in] wakeup_time Absolute timeout in nanoseconds
Returns:
0 on success, otherwise:

Environments:

This service can be called from:

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:

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.

Environments:

This service can be called from:

Rescheduling: always, unless a timer overrun occured.


Generated on Mon Mar 24 18:02:43 2008 for Xenomai API by  doxygen 1.5.3