本文整理汇总了C++中rtems_task_self函数的典型用法代码示例。如果您正苦于以下问题:C++ rtems_task_self函数的具体用法?C++ rtems_task_self怎么用?C++ rtems_task_self使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rtems_task_self函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: rtems_shell_init
rtems_status_code rtems_shell_init(
const char *task_name,
size_t task_stacksize,
rtems_task_priority task_priority,
const char *devname,
bool forever,
bool wait,
rtems_shell_login_check_t login_check
)
{
rtems_id to_wake = RTEMS_ID_NONE;
if ( wait )
to_wake = rtems_task_self();
return rtems_shell_run(
task_name, /* task_name */
task_stacksize, /* task_stacksize */
task_priority, /* task_priority */
devname, /* devname */
forever, /* forever */
wait, /* wait */
"stdin", /* input */
"stdout", /* output */
false, /* output_append */
to_wake, /* wake_on_end */
false, /* echo */
login_check /* login check */
);
}
开发者ID:0871087123,项目名称:rtems,代码行数:30,代码来源:shell.c
示例2: rtems_task_variable_get
void *rtems_gxx_getspecific(__gthread_key_t key)
{
rtems_status_code status;
void *p= 0;
/* register with RTEMS the buffer that will hold the key values */
status = rtems_task_variable_get( RTEMS_SELF, (void **)key, &p );
if ( status == RTEMS_SUCCESSFUL ) {
/* We do not have to do this, but what the heck ! */
p= key->val;
} else {
/* fisrt time, always set to zero, it is unknown the value that the others
* threads are using at the moment of this call
*/
status = rtems_task_variable_add( RTEMS_SELF, (void **)key, key->dtor );
if ( status != RTEMS_SUCCESSFUL ) {
_Internal_error_Occurred(
INTERNAL_ERROR_CORE,
true,
INTERNAL_ERROR_GXX_KEY_ADD_FAILED
);
}
key->val = (void *)0;
}
#ifdef DEBUG_GXX_WRAPPERS
printk(
"gxx_wrappers: getspecific key=%x, ptr=%x, id=%x\n",
key,
p,
rtems_task_self()
);
#endif
return p;
}
开发者ID:0871087123,项目名称:rtems,代码行数:35,代码来源:gxx_wrappers.c
示例3: Init
rtems_task Init(
rtems_task_argument ignored
)
{
rtems_status_code sc;
rtems_event_set out;
int resets;
puts( "\n\n*** TEST INTERRUPT CRITICAL SECTION 10 ***" );
puts( "Init - Test may not be able to detect case is hit reliably" );
puts( "Init - Trying to generate timeout while blocking on event" );
Main_task = rtems_task_self();
interrupt_critical_section_test_support_initialize( NULL );
for (resets=0 ; resets< 2 ;) {
if ( interrupt_critical_section_test_support_delay() )
resets++;
sc = rtems_event_receive( 0x01, RTEMS_DEFAULT_OPTIONS, 1, &out );
fatal_directive_status( sc, RTEMS_TIMEOUT, "event_receive timeout" );
}
puts( "*** END OF TEST INTERRUPT CRITICAL SECTION 10 ***" );
rtems_test_exit(0);
}
开发者ID:0871087123,项目名称:rtems,代码行数:28,代码来源:init.c
示例4: Init
rtems_task Init(rtems_task_argument ignored)
{
rtems_status_code sc;
rtems_id q;
uint32_t flushed;
puts( "\n\n*** TEST 49 ***" );
puts( "Create Message Queue" );
sc = rtems_message_queue_create(
rtems_build_name('m', 's', 'g', ' '),
1,
sizeof(uint32_t),
RTEMS_DEFAULT_ATTRIBUTES,
&q
);
directive_failed( sc, "rtems_message_queue_create" );
puts( "Flush Message Queue using Task Self ID" );
sc = rtems_message_queue_flush( rtems_task_self(), &flushed );
fatal_directive_status( sc, RTEMS_INVALID_ID, "flush" );
puts( "Flush returned INVALID_ID as expected" );
puts( "*** END OF TEST 49 ***" );
rtems_test_exit( 0 );
}
开发者ID:medivhc,项目名称:rtems,代码行数:27,代码来源:init.c
示例5: task
/*
* Task that calls the function we want to trace
*/
static void task(rtems_task_argument arg)
{
rtems_status_code sc;
uint32_t i;
for ( i = 0; i < ITERATIONS; i++ ) {
/*
* Wait until the previous task in the task chain
* has completed its operation.
*/
sc = rtems_semaphore_obtain(task_data[arg].prev_sem, 0, 0);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
add_number_wrapper(arg, i);
/*
* Signal the next task in the chain to continue
*/
sc = rtems_semaphore_release(task_data[arg].task_sem);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
}
/* Signal the main task that this task has finished */
sc = rtems_semaphore_release(finished_sem);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_task_suspend(rtems_task_self());
}
开发者ID:WattTech,项目名称:rtems,代码行数:30,代码来源:init.c
示例6: rtems_gxx_setspecific
int rtems_gxx_setspecific(__gthread_key_t key, const void *ptr)
{
pthread_key_t *pkey = key;
int eno;
if ( pkey == NULL ) {
return EINVAL;
}
eno = pthread_setspecific( *pkey, ptr );
#ifdef DEBUG_GXX_WRAPPERS
printk(
"gxx_wrappers: setspecific key=%x, ptr=%x, id=%x\n",
pkey,
ptr,
rtems_task_self()
);
#endif
if ( eno != 0 ) {
_Terminate(
INTERNAL_ERROR_CORE,
true,
INTERNAL_ERROR_GXX_KEY_ADD_FAILED
);
}
return 0;
}
开发者ID:AlexShiLucky,项目名称:rtems,代码行数:30,代码来源:gxx_wrappers.c
示例7: _Thread_Get_executing
/*
* CallerName -- print the calling tasks name or id as configured
*/
const char *CallerName(void)
{
static char buffer[32];
Thread_Control *executing = _Thread_Get_executing();
#if defined(TEST_PRINT_TASK_ID)
sprintf( buffer, "0x%08x -- %d",
rtems_task_self(), _Thread_Get_priority( executing ) );
#else
volatile union {
uint32_t u;
unsigned char c[4];
} TempName;
#if defined(TEST_ON_RTEMS_45)
TempName.u = *(uint32_t *)executing->Object.name;
#else
TempName.u = executing->Object.name.name_u32;
#endif
sprintf( buffer, "%c%c%c%c -- %" PRIdPriority_Control,
TempName.c[0], TempName.c[1], TempName.c[2], TempName.c[3],
_Thread_Get_priority( executing )
);
#endif
return buffer;
}
开发者ID:gedare,项目名称:rtems,代码行数:28,代码来源:changepri.c
示例8: rtems_object_set_name
/*
* This method will set the object name based upon the user string.
* If the object class uses 32-bit names, then only the first 4 bytes
* of the string will be used.
*/
rtems_status_code rtems_object_set_name(
rtems_id id,
const char *name
)
{
Objects_Information *information;
Objects_Control *the_object;
Objects_Id tmpId;
if ( !name )
return RTEMS_INVALID_ADDRESS;
tmpId = (id == OBJECTS_ID_OF_SELF) ? rtems_task_self() : id;
information = _Objects_Get_information_id( tmpId );
if ( !information )
return RTEMS_INVALID_ID;
_Objects_Allocator_lock();
the_object = _Objects_Get_no_protection( tmpId, information );
if ( the_object == NULL ) {
_Objects_Allocator_unlock();
return RTEMS_INVALID_ID;
}
_Objects_Set_name( information, the_object, name );
_Objects_Allocator_unlock();
return RTEMS_SUCCESSFUL;
}
开发者ID:AoLaD,项目名称:rtems,代码行数:35,代码来源:rtemsobjectsetname.c
示例9: Init
static void Init(rtems_task_argument arg)
{
test_context *ctx = &test_instance;
TEST_BEGIN();
ctx->low = rtems_task_self();
create_task(&ctx->mid, 3);
create_task(&ctx->high, 1);
create_task(&ctx->inversion, 2);
create_sema(&ctx->sem_a);
create_sema(&ctx->sem_b);
obtain_sema(ctx->sem_a);
start_task(ctx->mid, mid_task);
start_task(ctx->high, high_task);
/*
* Here we see that the priority of the high priority task blocked on
* semaphore B propagated to the low priority task owning semaphore A
* on which the owner of semaphore B depends.
*/
assert_prio(ctx->low, 1);
assert_prio(ctx->mid, 1);
assert_prio(ctx->high, 1);
assert_prio(ctx->inversion, 2);
TEST_END();
rtems_test_exit(0);
}
开发者ID:gedare,项目名称:rtems,代码行数:31,代码来源:init.c
示例10: test_with_request_server
static void test_with_request_server(void)
{
rtems_status_code sc;
rtems_id id;
request req;
sc = rtems_event_transient_receive(RTEMS_NO_WAIT, 0);
rtems_test_assert(sc == RTEMS_UNSATISFIED);
req.client = rtems_task_self();
req.complete = false;
sc = rtems_task_create(
rtems_build_name('S', 'E', 'R', 'V'),
1,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_MODES,
RTEMS_DEFAULT_ATTRIBUTES,
&id
);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_task_start(id, server_task, (rtems_task_argument) &req);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(req.complete);
}
开发者ID:gedare,项目名称:rtems,代码行数:30,代码来源:init.c
示例11: Task_1_through_3
rtems_task Task_1_through_3(
rtems_task_argument index
)
{
rtems_time_of_day time;
rtems_status_code status;
rtems_interval ticks;
rtems_name name;
status = rtems_object_get_classic_name( rtems_task_self(), &name );
directive_failed( status, "rtems_object_get_classic_name" );
ticks = RTEMS_MILLISECONDS_TO_TICKS( index * 5 * 1000 );
while( FOREVER ) {
status = rtems_clock_get_tod( &time );
directive_failed( status, "rtems_clock_get_tod" );
if ( time.second >= 35 ) {
TEST_END();
rtems_test_exit( 0 );
}
put_name( name, FALSE );
print_time( " - rtems_clock_get_tod - ", &time, "\n" );
status = rtems_task_wake_after( ticks );
directive_failed( status, "rtems_task_wake_after" );
}
}
开发者ID:AlexShiLucky,项目名称:rtems,代码行数:30,代码来源:task1.c
示例12: bestcomm_irq_create
void bestcomm_irq_create(bestcomm_irq *self, int task_index)
{
assert(task_index >= 0 && task_index <= 15);
self->task_index = task_index;
self->event_task_id = rtems_task_self();
bestcomm_glue_irq_install(task_index, bestcomm_irq_handler, self);
}
开发者ID:AlexShiLucky,项目名称:rtems,代码行数:8,代码来源:bestcomm.c
示例13: i2c_wait_done
static rtems_status_code i2c_wait_done(stm32f4_i2c_bus_entry *e)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bsp_interrupt_vector_enable(e->vector);
e->task_id = rtems_task_self();
return rtems_event_transient_receive(RTEMS_WAIT, RTEMS_NO_TIMEOUT);
}
开发者ID:chch1028,项目名称:rtems,代码行数:8,代码来源:i2c.c
示例14: rtems_libio_share_private_env
rtems_status_code rtems_libio_share_private_env(rtems_id task_id)
{
rtems_status_code sc;
rtems_user_env_t * shared_user_env;
rtems_id current_task_id;
/*
* get current task id
*/
current_task_id = rtems_task_self();
/*
* If this was an attempt to share the task with self,
* if somebody wanted to do it... Lets tell them, its shared
*/
if( task_id == current_task_id )
return RTEMS_SUCCESSFUL;
/*
* Try to get the requested user environment
*/
sc = rtems_task_variable_get(
task_id,
(void*)&rtems_current_user_env,
(void*)&shared_user_env );
/*
* If it was not successful, return the error code
*/
if (sc != RTEMS_SUCCESSFUL)
return sc;
/*
* If we are here, we have the required environment to be
* shared with the current task
*/
/*
* If we have a current environment in place, we need to
* free it, since we will be sharing the variable with the
* shared_user_env
*/
if (rtems_current_user_env->task_id==current_task_id) {
rtems_user_env_t *tmp = rtems_current_user_env;
free_user_env( tmp );
}
/* the current_user_env is the same pointer that remote env */
rtems_current_user_env = shared_user_env;
/* increase the reference count */
#ifdef HAVE_USERENV_REFCNT
rtems_current_user_env->refcnt++;
#endif
return RTEMS_SUCCESSFUL;
}
开发者ID:rtemss,项目名称:rtems,代码行数:58,代码来源:privateenv.c
示例15: bdbuf_disk_ioctl_process
static bool
bdbuf_disk_ioctl_process (bdbuf_disk* bdd, rtems_blkdev_request* req)
{
bool result = true;
int b;
/*
* Perform the requested action.
*/
switch (bdd->driver_action)
{
case BDBUF_DISK_NOOP:
break;
case BDBUF_DISK_WAIT:
if (bdd->waiting)
bdbuf_test_printf ("disk ioctl: bad waiter: %s:%08x\n",
bdd->waiting_name, bdd->waiting);
bdd->waiting_name = "bdd";
bdd->waiting = rtems_task_self ();
if (bdbuf_disk_unlock (bdd))
result = bdbuf_wait (bdd->name, 0) == RTEMS_SUCCESSFUL;
else
result = false;
/*
* Ignore any error if one happens.
*/
bdbuf_disk_lock (bdd);
break;
case BDBUF_DISK_SLEEP:
bdbuf_test_printf ("disk ioctl: sleeping: %d msecs\n",
bdd->driver_sleep);
result = bdbuf_sleep (bdd->driver_sleep);
break;
case BDBUF_DISK_BLOCKS_INORDER:
bdbuf_test_printf ("disk ioctl: multi-block order check: count = %d\n",
req->bufnum);
for (b = 0; b < (req->bufnum - 1); b++)
if (req->bufs[b].block >= req->bufs[b + 1].block)
bdbuf_test_printf ("disk ioctl: out of order: index:%d (%d >= %d\n",
b, req->bufs[b].block, req->bufs[b + 1].block);
break;
default:
bdbuf_test_printf ("disk ioctl: invalid action: %d\n",
bdd->driver_action);
result = false;
break;
}
return result;
}
开发者ID:lanzhongheng,项目名称:rtems,代码行数:57,代码来源:init.c
示例16: Init
rtems_task Init(
rtems_task_argument ignored
)
{
rtems_status_code sc;
int resets;
puts(
"\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n"
"Init - Trying to generate timeout of a thread while another is blocking\n"
"Init - on the same thread queue\n"
"Init - There is no way for the test to know if it hits the case"
);
puts( "Init - rtems_semaphore_create - OK" );
sc = rtems_semaphore_create(
rtems_build_name( 'S', 'M', '1', ' ' ),
0,
RTEMS_DEFAULT_ATTRIBUTES,
RTEMS_NO_PRIORITY,
&Semaphore
);
directive_failed( sc, "rtems_semaphore_create of SM1" );
puts( "Init - rtems_task_create - OK" );
sc = rtems_task_create(
rtems_build_name( 'B', 'L', 'C', 'K' ),
BLOCKER_PRIORITY,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_NO_PREEMPT,
RTEMS_DEFAULT_ATTRIBUTES,
&Secondary_task_id
);
directive_failed( sc, "rtems_task_create" );
sc = rtems_task_start( Secondary_task_id, Secondary_task, 0 );
directive_failed( sc, "rtems_task_start" );
Main_task = rtems_task_self();
interrupt_critical_section_test_support_initialize( NULL );
for (resets=0 ; resets<10 ;) {
if ( interrupt_critical_section_test_support_delay() )
resets++;
sc = rtems_task_restart( Secondary_task_id, 1 );
directive_failed( sc, "rtems_task_restart" );
sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 1 );
fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" );
}
puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" );
rtems_test_exit(0);
}
开发者ID:lvpwxidian,项目名称:rtems,代码行数:56,代码来源:init.c
示例17: rtems_printer_task_drain
void rtems_printer_task_drain( rtems_printer_task_context *ctx )
{
printer_task_buffer buffer;
buffer.action_kind = ACTION_DRAIN;
buffer.action_data.task = rtems_task_self();
printer_task_append_buffer( ctx, &ctx->todo_buffers, &buffer );
rtems_event_send( ctx->task, PRINT_TASK_WAKE_UP );
rtems_event_transient_receive( RTEMS_WAIT, RTEMS_NO_TIMEOUT );
}
开发者ID:deval-maker,项目名称:rtems,代码行数:11,代码来源:printertask.c
示例18: test_with_normal_and_system_event
static void test_with_normal_and_system_event(void)
{
rtems_status_code sc;
rtems_event_set out;
/* Assert no events pending */
sc = rtems_event_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_UNSATISFIED);
sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_UNSATISFIED);
/* Send system event */
sc = rtems_event_system_send(rtems_task_self(), EVENT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
sc = rtems_event_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_UNSATISFIED);
out = 0;
sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(out == EVENT);
/* Send normal event */
sc = rtems_event_send(rtems_task_self(), EVENT);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
out = 0;
sc = rtems_event_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_SUCCESSFUL);
rtems_test_assert(out == EVENT);
sc = rtems_event_system_receive(EVENT, RTEMS_NO_WAIT, 0, &out);
rtems_test_assert(sc == RTEMS_UNSATISFIED);
}
开发者ID:AlexShiLucky,项目名称:rtems,代码行数:39,代码来源:init.c
示例19: unmount
int unmount( const char *path )
{
int rv = 0;
rtems_filesystem_eval_path_context_t ctx;
int eval_flags = RTEMS_FS_FOLLOW_LINK;
const rtems_filesystem_location_info_t *currentloc =
rtems_filesystem_eval_path_start( &ctx, path, eval_flags );
rtems_filesystem_mount_table_entry_t *mt_entry = currentloc->mt_entry;
if ( rtems_filesystem_location_is_root( currentloc ) ) {
if ( !contains_root_or_current_directory( mt_entry ) ) {
const rtems_filesystem_operations_table *mt_point_ops =
mt_entry->mt_point_node->location.mt_entry->ops;
rv = (*mt_point_ops->unmount_h)( mt_entry );
if ( rv == 0 ) {
rtems_id self_task_id = rtems_task_self();
rtems_filesystem_mt_entry_declare_lock_context( lock_context );
rtems_filesystem_mt_entry_lock( lock_context );
mt_entry->unmount_task = self_task_id;
mt_entry->mounted = false;
rtems_filesystem_mt_entry_unlock( lock_context );
}
} else {
errno = EBUSY;
rv = -1;
}
} else {
errno = EACCES;
rv = -1;
}
rtems_filesystem_eval_path_cleanup( &ctx );
if ( rv == 0 ) {
rtems_event_set out;
rtems_status_code sc = rtems_event_receive(
RTEMS_FILESYSTEM_UNMOUNT_EVENT,
RTEMS_EVENT_ALL | RTEMS_WAIT,
RTEMS_NO_TIMEOUT,
&out
);
if ( sc != RTEMS_SUCCESSFUL ) {
rtems_fatal_error_occurred( 0xdeadbeef );
}
}
return rv;
}
开发者ID:0871087123,项目名称:rtems,代码行数:51,代码来源:unmount.c
示例20: Init
static rtems_task Init(
rtems_task_argument argument
)
{
rtems_task_priority prio;
rtems_status_code status;
TEST_BEGIN();
Master = rtems_task_self();
if (RTEMS_MAXIMUM_PRIORITY >= 255)
Priorities = Priorities_High;
else if (RTEMS_MAXIMUM_PRIORITY >= 15)
Priorities = Priorities_Low;
else {
puts( "Test needs at least 16 configured priority levels" );
rtems_test_exit( 0 );
}
prio = RTEMS_MAXIMUM_PRIORITY - 1;
status = rtems_task_set_priority(RTEMS_SELF, prio, &prio);
directive_failed( status, "rtems_task_set_priority" );
if ( sizeof(Priorities_Low) / sizeof(rtems_task_priority) != MAX_TASKS ) {
puts( "Priorities_Low table does not have right number of entries" );
rtems_test_exit( 0 );
}
if ( sizeof(Priorities_High) / sizeof(rtems_task_priority) != MAX_TASKS ) {
puts( "Priorities_High table does not have right number of entries" );
rtems_test_exit( 0 );
}
puts( "Exercising blocking discipline w/extract in FIFO order " );
do_test( RTEMS_FIFO, TRUE );
puts( "Exercising blocking discipline w/unblock in FIFO order" );
do_test( RTEMS_FIFO, FALSE );
rtems_test_pause_and_screen_number( 2 );
puts( "Exercising blocking discipline w/extract in priority order " );
do_test( RTEMS_PRIORITY, TRUE );
puts( "Exercising blocking discipline w/unblock in priority order" );
do_test( RTEMS_PRIORITY, FALSE );
TEST_END();
rtems_test_exit(0);
}
开发者ID:greenmeent,项目名称:rtems,代码行数:51,代码来源:init.c
注:本文中的rtems_task_self函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论