forked from Imagelibrary/rtems
@@ -227,6 +227,8 @@ rtems_status_code rtems_task_delete(
|
||||
rtems_id id
|
||||
);
|
||||
|
||||
void rtems_task_exit( void ) RTEMS_NO_RETURN;
|
||||
|
||||
/**
|
||||
* @brief RTEMS Task Mode
|
||||
*
|
||||
|
||||
@@ -33,6 +33,7 @@ librtems_a_SOURCES += src/rtemsobjectgetclassicname.c
|
||||
librtems_a_SOURCES += src/tasks.c
|
||||
librtems_a_SOURCES += src/taskcreate.c
|
||||
librtems_a_SOURCES += src/taskdelete.c
|
||||
librtems_a_SOURCES += src/taskexit.c
|
||||
librtems_a_SOURCES += src/taskgetaffinity.c
|
||||
librtems_a_SOURCES += src/taskgetpriority.c
|
||||
librtems_a_SOURCES += src/taskgetscheduler.c
|
||||
|
||||
38
cpukit/rtems/src/taskexit.c
Normal file
38
cpukit/rtems/src/taskexit.c
Normal file
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright (c) 2018 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
* 82178 Puchheim
|
||||
* Germany
|
||||
* <rtems@embedded-brains.de>
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#if HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/rtems/tasks.h>
|
||||
#include <rtems/score/threadimpl.h>
|
||||
|
||||
void rtems_task_exit( void )
|
||||
{
|
||||
Thread_Control *executing;
|
||||
Per_CPU_Control *cpu_self;
|
||||
|
||||
cpu_self = _Thread_Dispatch_disable();
|
||||
executing = _Per_CPU_Get_executing( cpu_self );
|
||||
|
||||
_Thread_Exit(
|
||||
executing,
|
||||
THREAD_LIFE_TERMINATING | THREAD_LIFE_DETACHED,
|
||||
NULL
|
||||
);
|
||||
|
||||
_Thread_Dispatch_direct( cpu_self );
|
||||
RTEMS_UNREACHABLE();
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014, 2016 embedded brains GmbH. All rights reserved.
|
||||
* Copyright (c) 2014, 2018 embedded brains GmbH. All rights reserved.
|
||||
*
|
||||
* embedded brains GmbH
|
||||
* Dornierstr. 4
|
||||
@@ -61,6 +61,10 @@ typedef enum {
|
||||
DELETE_7,
|
||||
DELETE_8,
|
||||
DELETE_9,
|
||||
EXIT_0,
|
||||
EXIT_1,
|
||||
EXIT_2,
|
||||
EXIT_3,
|
||||
INVALID
|
||||
} test_state;
|
||||
|
||||
@@ -182,6 +186,10 @@ static void delete_extension(
|
||||
assert_priority(PRIO_VERY_LOW);
|
||||
ctx->current = DELETE_9;
|
||||
break;
|
||||
case EXIT_2:
|
||||
assert_priority(PRIO_VERY_LOW);
|
||||
ctx->current = EXIT_3;
|
||||
break;
|
||||
default:
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
@@ -213,7 +221,10 @@ static void terminate_extension(Thread_Control *executing)
|
||||
case DELETE_7:
|
||||
assert_priority(PRIO_LOW);
|
||||
ctx->current = DELETE_8;
|
||||
wake_up_main(ctx);
|
||||
break;
|
||||
case EXIT_1:
|
||||
assert_priority(PRIO_LOW);
|
||||
ctx->current = EXIT_2;
|
||||
break;
|
||||
default:
|
||||
rtems_test_assert(0);
|
||||
@@ -292,6 +303,10 @@ static void worker_task(rtems_task_argument arg)
|
||||
rtems_task_delete(RTEMS_SELF);
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
case EXIT_0:
|
||||
ctx->current = EXIT_1;
|
||||
rtems_task_exit();
|
||||
break;
|
||||
default:
|
||||
rtems_test_assert(0);
|
||||
break;
|
||||
@@ -399,8 +414,17 @@ static void test(void)
|
||||
set_priority(PRIO_VERY_LOW);
|
||||
|
||||
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
||||
set_priority(PRIO_INIT);
|
||||
|
||||
rtems_test_assert(ctx->current == DELETE_9);
|
||||
create_and_start_worker(ctx);
|
||||
|
||||
change_state(ctx, DELETE_9, EXIT_0, INVALID);
|
||||
set_priority(PRIO_VERY_LOW);
|
||||
|
||||
rtems_test_assert(rtems_resource_snapshot_check(&snapshot));
|
||||
set_priority(PRIO_INIT);
|
||||
|
||||
rtems_test_assert(ctx->current == EXIT_3);
|
||||
}
|
||||
|
||||
static void Init(rtems_task_argument arg)
|
||||
|
||||
Reference in New Issue
Block a user