mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-27 20:51:00 +08:00
Directive rtems_task_variable_get() added by Eric Norum.
This commit is contained in:
@@ -416,6 +416,18 @@ rtems_status_code rtems_task_variable_add(
|
||||
void (*dtor)(void *)
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_task_variable_get
|
||||
*
|
||||
* This directive gets the value of a task variable.
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_task_variable_get(
|
||||
rtems_id tid,
|
||||
void **ptr,
|
||||
void **result
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_task_variable_delete
|
||||
*
|
||||
|
||||
@@ -14,7 +14,8 @@ MP_C_FILES = eventmp.c mp.c msgmp.c partmp.c regionmp.c semmp.c signalmp.c \
|
||||
TASK_C_FILES = tasks.c taskcreate.c taskdelete.c taskgetnote.c taskident.c \
|
||||
taskinitusers.c taskissuspended.c taskmode.c taskrestart.c taskresume.c \
|
||||
tasksetnote.c tasksetpriority.c taskstart.c tasksuspend.c \
|
||||
taskwakeafter.c taskwakewhen.c taskvariableadd.c taskvariabledelete.c
|
||||
taskwakeafter.c taskwakewhen.c taskvariableadd.c taskvariabledelete.c \
|
||||
taskvariableget.c
|
||||
|
||||
RATEMON_C_FILES = ratemon.c ratemoncancel.c ratemoncreate.c ratemondelete.c \
|
||||
ratemongetstatus.c ratemonident.c ratemonperiod.c ratemontimeout.c
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* rtems_task_variable_get - Get a per-task variable
|
||||
*
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* 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.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <rtems/system.h>
|
||||
#include <rtems/rtems/tasks.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
|
||||
/*
|
||||
* rtems_task_variable_get
|
||||
*
|
||||
* This directive gets the value of a task variable.
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_task_variable_get(
|
||||
rtems_id tid,
|
||||
void **ptr,
|
||||
void **result
|
||||
)
|
||||
{
|
||||
Thread_Control *the_thread;
|
||||
Objects_Locations location;
|
||||
rtems_task_variable_t *tvp;
|
||||
|
||||
the_thread = _Thread_Get (tid, &location);
|
||||
switch (location) {
|
||||
case OBJECTS_REMOTE:
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
_Thread_Dispatch();
|
||||
return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
|
||||
#endif
|
||||
|
||||
case OBJECTS_ERROR:
|
||||
return RTEMS_INVALID_ID;
|
||||
|
||||
default:
|
||||
return RTEMS_INTERNAL_ERROR;
|
||||
|
||||
case OBJECTS_LOCAL:
|
||||
|
||||
/*
|
||||
* Figure out if the variable is in this task's list.
|
||||
*/
|
||||
|
||||
tvp = the_thread->task_variables;
|
||||
while (tvp) {
|
||||
if (tvp->ptr == ptr) {
|
||||
/*
|
||||
* Should this return the current (i.e not the
|
||||
* saved) value if `tid' is the current task?
|
||||
*/
|
||||
*result = tvp->var;
|
||||
_Thread_Enable_dispatch();
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
tvp = tvp->next;
|
||||
}
|
||||
_Thread_Enable_dispatch();
|
||||
return RTEMS_INVALID_ADDRESS;
|
||||
}
|
||||
return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */
|
||||
}
|
||||
@@ -416,6 +416,18 @@ rtems_status_code rtems_task_variable_add(
|
||||
void (*dtor)(void *)
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_task_variable_get
|
||||
*
|
||||
* This directive gets the value of a task variable.
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_task_variable_get(
|
||||
rtems_id tid,
|
||||
void **ptr,
|
||||
void **result
|
||||
);
|
||||
|
||||
/*
|
||||
* rtems_task_variable_delete
|
||||
*
|
||||
|
||||
@@ -14,7 +14,8 @@ MP_C_FILES = eventmp.c mp.c msgmp.c partmp.c regionmp.c semmp.c signalmp.c \
|
||||
TASK_C_FILES = tasks.c taskcreate.c taskdelete.c taskgetnote.c taskident.c \
|
||||
taskinitusers.c taskissuspended.c taskmode.c taskrestart.c taskresume.c \
|
||||
tasksetnote.c tasksetpriority.c taskstart.c tasksuspend.c \
|
||||
taskwakeafter.c taskwakewhen.c taskvariableadd.c taskvariabledelete.c
|
||||
taskwakeafter.c taskwakewhen.c taskvariableadd.c taskvariabledelete.c \
|
||||
taskvariableget.c
|
||||
|
||||
RATEMON_C_FILES = ratemon.c ratemoncancel.c ratemoncreate.c ratemondelete.c \
|
||||
ratemongetstatus.c ratemonident.c ratemonperiod.c ratemontimeout.c
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* rtems_task_variable_get - Get a per-task variable
|
||||
*
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
* 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.OARcorp.com/rtems/license.html.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <rtems/system.h>
|
||||
#include <rtems/rtems/tasks.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
|
||||
/*
|
||||
* rtems_task_variable_get
|
||||
*
|
||||
* This directive gets the value of a task variable.
|
||||
*/
|
||||
|
||||
rtems_status_code rtems_task_variable_get(
|
||||
rtems_id tid,
|
||||
void **ptr,
|
||||
void **result
|
||||
)
|
||||
{
|
||||
Thread_Control *the_thread;
|
||||
Objects_Locations location;
|
||||
rtems_task_variable_t *tvp;
|
||||
|
||||
the_thread = _Thread_Get (tid, &location);
|
||||
switch (location) {
|
||||
case OBJECTS_REMOTE:
|
||||
#if defined(RTEMS_MULTIPROCESSING)
|
||||
_Thread_Dispatch();
|
||||
return RTEMS_ILLEGAL_ON_REMOTE_OBJECT;
|
||||
#endif
|
||||
|
||||
case OBJECTS_ERROR:
|
||||
return RTEMS_INVALID_ID;
|
||||
|
||||
default:
|
||||
return RTEMS_INTERNAL_ERROR;
|
||||
|
||||
case OBJECTS_LOCAL:
|
||||
|
||||
/*
|
||||
* Figure out if the variable is in this task's list.
|
||||
*/
|
||||
|
||||
tvp = the_thread->task_variables;
|
||||
while (tvp) {
|
||||
if (tvp->ptr == ptr) {
|
||||
/*
|
||||
* Should this return the current (i.e not the
|
||||
* saved) value if `tid' is the current task?
|
||||
*/
|
||||
*result = tvp->var;
|
||||
_Thread_Enable_dispatch();
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
tvp = tvp->next;
|
||||
}
|
||||
_Thread_Enable_dispatch();
|
||||
return RTEMS_INVALID_ADDRESS;
|
||||
}
|
||||
return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */
|
||||
}
|
||||
Reference in New Issue
Block a user