forked from Imagelibrary/rtems
capture01: New non-interactive test for capture engine.
This commit is contained in:
@@ -14,6 +14,7 @@ _SUBDIRS += block14
|
||||
_SUBDIRS += block13
|
||||
_SUBDIRS += rbheap01
|
||||
_SUBDIRS += flashdisk01
|
||||
_SUBDIRS += capture01
|
||||
|
||||
_SUBDIRS += bspcmdline01 cpuuse devfs01 devfs02 devfs03 devfs04 \
|
||||
deviceio01 devnullfatal01 dumpbuf01 gxx01 \
|
||||
|
||||
20
testsuites/libtests/capture01/Makefile.am
Normal file
20
testsuites/libtests/capture01/Makefile.am
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
rtems_tests_PROGRAMS = capture01
|
||||
capture01_SOURCES = init.c test1.c system.h
|
||||
|
||||
dist_rtems_tests_DATA = capture01.scn
|
||||
dist_rtems_tests_DATA += capture01.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
|
||||
LINK_OBJS = $(capture01_OBJECTS)
|
||||
LINK_LIBS = $(capture01_LDLIBS)
|
||||
|
||||
capture01$(EXEEXT): $(capture01_OBJECTS) $(capture01_DEPENDENCIES)
|
||||
@rm -f capture01$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
19
testsuites/libtests/capture01/capture01.doc
Normal file
19
testsuites/libtests/capture01/capture01.doc
Normal file
@@ -0,0 +1,19 @@
|
||||
# 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.rtems.org/license/LICENSE.
|
||||
#
|
||||
|
||||
This is a non-ineractive test of the capture engine. This test is based
|
||||
on the methods that would be called through the monitor capture commands:
|
||||
|
||||
copen 10000
|
||||
cwceil 98
|
||||
cwfloor 105
|
||||
cwglob on
|
||||
ctset RMON
|
||||
cwlist
|
||||
cenable
|
||||
ctrace
|
||||
35
testsuites/libtests/capture01/capture01.scn
Normal file
35
testsuites/libtests/capture01/capture01.scn
Normal file
@@ -0,0 +1,35 @@
|
||||
*** BEGIN OF TEST CAPTURE ENGINE ***
|
||||
watch priority ceiling is 100
|
||||
watch priority floor is 102
|
||||
global watch is enabled
|
||||
total 1
|
||||
00000000 ???? g- T:S------ F:-----
|
||||
0a010002 CT1a 102 102 SWITCHED_OUT
|
||||
0a010003 CT1b 101 101 CREATED
|
||||
0a010003 CT1b 101 101 STARTED
|
||||
0a010003 CT1b 101 101 SWITCHED_IN
|
||||
0a010003 CT1b 101 101 BEGIN
|
||||
0a010003 CT1b 101 101 SWITCHED_OUT
|
||||
0a010004 CT1c 100 100 CREATED
|
||||
0a010004 CT1c 100 100 STARTED
|
||||
0a010004 CT1c 100 100 SWITCHED_IN
|
||||
0a010004 CT1c 100 100 BEGIN
|
||||
0a010004 CT1c 100 100 SWITCHED_OUT
|
||||
0a010003 CT1b 101 101 SWITCHED_IN
|
||||
0a010003 CT1b 101 101 SWITCHED_OUT
|
||||
0a010002 CT1a 102 100 SWITCHED_IN
|
||||
0a010002 CT1a 102 102 SWITCHED_OUT
|
||||
0a010004 CT1c 100 100 SWITCHED_IN
|
||||
0a010004 CT1c 100 100 SWITCHED_OUT
|
||||
0a010003 CT1b 101 101 SWITCHED_IN
|
||||
0a010003 CT1b 101 101 SWITCHED_OUT
|
||||
0a010004 CT1c 100 100 SWITCHED_IN
|
||||
0a010004 CT1c 100 100 TERMINATED
|
||||
0a010004 CT1c 100 100 SWITCHED_OUT
|
||||
0a010003 CT1b 101 101 SWITCHED_IN
|
||||
0a010003 CT1b 101 101 TERMINATED
|
||||
0a010003 CT1b 101 101 SWITCHED_OUT
|
||||
0a010002 CT1a 102 102 SWITCHED_IN
|
||||
0a010002 CT1a 102 102 TERMINATED
|
||||
0a010002 CT1a 102 102 SWITCHED_OUT
|
||||
*** END OF TEST CAPTURE ENGINE ***
|
||||
253
testsuites/libtests/capture01/init.c
Normal file
253
testsuites/libtests/capture01/init.c
Normal file
@@ -0,0 +1,253 @@
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2012.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may in
|
||||
* the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "system.h"
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/capture-cli.h>
|
||||
#include <rtems/monitor.h>
|
||||
#include <rtems/shell.h>
|
||||
|
||||
#define ASSERT_SC(sc) assert((sc) == RTEMS_SUCCESSFUL)
|
||||
|
||||
/* forward declarations to avoid warnings */
|
||||
rtems_task Init(rtems_task_argument argument);
|
||||
|
||||
const char rtems_test_name[] = "CAPTURE ENGINE";
|
||||
|
||||
static void cwlist(void);
|
||||
static void ctrace(void);
|
||||
|
||||
static void cwlist ()
|
||||
{
|
||||
rtems_capture_control_t* control = rtems_capture_get_control_list ();
|
||||
rtems_task_priority ceiling = rtems_capture_watch_get_ceiling ();
|
||||
rtems_task_priority floor = rtems_capture_watch_get_floor ();
|
||||
|
||||
fprintf (stdout, "watch priority ceiling is %" PRId32 "\n", ceiling);
|
||||
fprintf (stdout, "watch priority floor is %" PRId32 "\n", floor);
|
||||
fprintf (stdout, "global watch is %s\n",
|
||||
rtems_capture_watch_global_on () ? "enabled" : "disabled");
|
||||
fprintf (stdout, "total %" PRId32 "\n", rtems_capture_control_count ());
|
||||
|
||||
while (control)
|
||||
{
|
||||
uint32_t flags;
|
||||
int f;
|
||||
int fshowed;
|
||||
int lf;
|
||||
|
||||
fprintf (stdout, " ");
|
||||
rtems_monitor_dump_id (rtems_capture_control_id (control));
|
||||
fprintf (stdout, " ");
|
||||
rtems_monitor_dump_name (rtems_capture_control_name (control));
|
||||
flags = rtems_capture_control_flags (control);
|
||||
fprintf (stdout, " %c%c ",
|
||||
rtems_capture_watch_global_on () ? 'g' : '-',
|
||||
flags & RTEMS_CAPTURE_WATCH ? 'w' : '-');
|
||||
flags = rtems_capture_control_to_triggers (control);
|
||||
fprintf (stdout, " T:%c%c%c%c%c%c%c",
|
||||
flags & RTEMS_CAPTURE_SWITCH ? 'S' : '-',
|
||||
flags & RTEMS_CAPTURE_CREATE ? 'C' : '-',
|
||||
flags & RTEMS_CAPTURE_START ? 'S' : '-',
|
||||
flags & RTEMS_CAPTURE_RESTART ? 'R' : '-',
|
||||
flags & RTEMS_CAPTURE_DELETE ? 'D' : '-',
|
||||
flags & RTEMS_CAPTURE_BEGIN ? 'B' : '-',
|
||||
flags & RTEMS_CAPTURE_EXITTED ? 'E' : '-');
|
||||
flags = rtems_capture_control_from_triggers (control);
|
||||
fprintf (stdout, " F:%c%c%c%c%c",
|
||||
flags & RTEMS_CAPTURE_SWITCH ? 'S' : '-',
|
||||
flags & RTEMS_CAPTURE_CREATE ? 'C' : '-',
|
||||
flags & RTEMS_CAPTURE_START ? 'S' : '-',
|
||||
flags & RTEMS_CAPTURE_RESTART ? 'R' : '-',
|
||||
flags & RTEMS_CAPTURE_DELETE ? 'D' : '-');
|
||||
|
||||
for (f = 0, fshowed = 0, lf = 1; f < RTEMS_CAPTURE_TRIGGER_TASKS; f++)
|
||||
{
|
||||
if (rtems_capture_control_by_valid (control, f))
|
||||
{
|
||||
if (lf && ((fshowed % 3) == 0))
|
||||
{
|
||||
fprintf (stdout, "\n");
|
||||
lf = 0;
|
||||
}
|
||||
|
||||
fprintf (stdout, " %2i:", f);
|
||||
rtems_monitor_dump_name (rtems_capture_control_by_name (control, f));
|
||||
fprintf (stdout, "/");
|
||||
rtems_monitor_dump_id (rtems_capture_control_by_id (control, f));
|
||||
flags = rtems_capture_control_by_triggers (control, f);
|
||||
fprintf (stdout, ":%c%c%c%c%c",
|
||||
flags & RTEMS_CAPTURE_SWITCH ? 'S' : '-',
|
||||
flags & RTEMS_CAPTURE_CREATE ? 'C' : '-',
|
||||
flags & RTEMS_CAPTURE_START ? 'S' : '-',
|
||||
flags & RTEMS_CAPTURE_RESTART ? 'R' : '-',
|
||||
flags & RTEMS_CAPTURE_DELETE ? 'D' : '-');
|
||||
fshowed++;
|
||||
lf = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (lf)
|
||||
fprintf (stdout, "\n");
|
||||
|
||||
control = rtems_capture_next_control (control);
|
||||
}
|
||||
}
|
||||
|
||||
static void ctrace()
|
||||
{
|
||||
rtems_status_code sc;
|
||||
bool csv = false;
|
||||
static int dump_total = 22;
|
||||
int total;
|
||||
int count;
|
||||
uint32_t read;
|
||||
rtems_capture_record_t* rec;
|
||||
|
||||
total = dump_total;
|
||||
|
||||
while (total)
|
||||
{
|
||||
sc = rtems_capture_read (0, 0, &read, &rec);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: trace read failed: %s\n", rtems_status_text (sc));
|
||||
rtems_capture_flush (0);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we have no records then just exist. We still need to release
|
||||
* the reader lock.
|
||||
*/
|
||||
|
||||
if (read == 0)
|
||||
{
|
||||
rtems_capture_release (read);
|
||||
break;
|
||||
}
|
||||
|
||||
count = total < read ? total : read;
|
||||
|
||||
while (count--)
|
||||
{
|
||||
if (csv)
|
||||
fprintf (stdout, "%08" PRIxPTR ",%03" PRIu32
|
||||
",%03" PRIu32 ",%04" PRIx32 ",%" PRId64 "\n",
|
||||
(uintptr_t) rec->task,
|
||||
(rec->events >> RTEMS_CAPTURE_REAL_PRIORITY_EVENT) & 0xff,
|
||||
(rec->events >> RTEMS_CAPTURE_CURR_PRIORITY_EVENT) & 0xff,
|
||||
(rec->events >> RTEMS_CAPTURE_EVENT_START),
|
||||
(uint64_t) rec->time);
|
||||
else
|
||||
{
|
||||
uint32_t event;
|
||||
int e;
|
||||
|
||||
event = rec->events >> RTEMS_CAPTURE_EVENT_START;
|
||||
|
||||
for (e = RTEMS_CAPTURE_EVENT_START; e <= RTEMS_CAPTURE_EVENT_END; e++)
|
||||
{
|
||||
if (event & 1)
|
||||
{
|
||||
rtems_monitor_dump_id (rtems_capture_task_id (rec->task));
|
||||
fprintf (stdout, " %c%c%c%c",
|
||||
(char) (rec->task->name >> 24) & 0xff,
|
||||
(char) (rec->task->name >> 16) & 0xff,
|
||||
(char) (rec->task->name >> 8) & 0xff,
|
||||
(char) (rec->task->name >> 0) & 0xff);
|
||||
fprintf (stdout, " %3" PRId32 " %3" PRId32 " %s\n",
|
||||
(rec->events >> RTEMS_CAPTURE_REAL_PRIORITY_EVENT) & 0xff,
|
||||
(rec->events >> RTEMS_CAPTURE_CURR_PRIORITY_EVENT) & 0xff,
|
||||
rtems_capture_event_text (e));
|
||||
}
|
||||
event >>= 1;
|
||||
}
|
||||
}
|
||||
rec++;
|
||||
}
|
||||
|
||||
count = total < read ? total : read;
|
||||
|
||||
if (count < total)
|
||||
total -= count;
|
||||
else
|
||||
total = 0;
|
||||
|
||||
rtems_capture_release (count);
|
||||
}
|
||||
}
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument ignored
|
||||
)
|
||||
{
|
||||
#if BSP_SMALL_MEMORY
|
||||
printf("NO Capture Engine. MEMORY TOO SMALL");
|
||||
#else
|
||||
rtems_status_code sc;
|
||||
rtems_task_priority old_priority;
|
||||
rtems_mode old_mode;
|
||||
rtems_name to_name = rtems_build_name('I', 'D', 'L', 'E');;
|
||||
|
||||
rtems_test_begin();
|
||||
|
||||
rtems_task_set_priority(RTEMS_SELF, 20, &old_priority);
|
||||
rtems_task_mode(RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode);
|
||||
|
||||
sc = rtems_capture_open (5000, NULL);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
sc = rtems_capture_watch_ceiling (100);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
sc = rtems_capture_watch_floor (102);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
sc = rtems_capture_watch_global (true);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
sc = rtems_capture_set_trigger (
|
||||
0,
|
||||
0,
|
||||
to_name,
|
||||
0,
|
||||
rtems_capture_from_any,
|
||||
rtems_capture_switch
|
||||
);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
cwlist();
|
||||
|
||||
sc = rtems_capture_control (true);
|
||||
ASSERT_SC(sc);
|
||||
|
||||
capture_test_1();
|
||||
|
||||
ctrace();
|
||||
ctrace();
|
||||
|
||||
rtems_test_end();
|
||||
exit( 0 );
|
||||
|
||||
#endif
|
||||
}
|
||||
42
testsuites/libtests/capture01/system.h
Normal file
42
testsuites/libtests/capture01/system.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/* system.h
|
||||
*
|
||||
* This include file contains information that is included in every
|
||||
* function in the test set.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1997.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may in
|
||||
* the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/test.h>
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
void capture_test_1(void);
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
|
||||
|
||||
#define TASK_ALLOCATION_SIZE (5)
|
||||
#define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(TASK_ALLOCATION_SIZE)
|
||||
#define CONFIGURE_EXTRA_TASK_STACKS (75 * RTEMS_MINIMUM_STACK_SIZE)
|
||||
|
||||
#define CONFIGURE_MAXIMUM_USER_EXTENSIONS (5)
|
||||
|
||||
#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
|
||||
/* end of include file */
|
||||
250
testsuites/libtests/capture01/test1.c
Normal file
250
testsuites/libtests/capture01/test1.c
Normal file
@@ -0,0 +1,250 @@
|
||||
/* Test1
|
||||
*
|
||||
* This test uses creates a number of tasks so the capture engine
|
||||
* can show a trace.
|
||||
*
|
||||
* Input parameters: NONE
|
||||
*
|
||||
* Output parameters: NONE
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1997.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may in
|
||||
* the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include "system.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
#if !BSP_SMALL_MEMORY
|
||||
static volatile int capture_CT1a_deleted;
|
||||
static volatile int capture_CT1b_deleted;
|
||||
static volatile int capture_CT1c_deleted;
|
||||
|
||||
static void
|
||||
capture_wait (uint32_t period)
|
||||
{
|
||||
rtems_task_wake_after (RTEMS_MICROSECONDS_TO_TICKS (period * 1000));
|
||||
}
|
||||
|
||||
/*
|
||||
* CT1a: Claim the mutex and then wait a while then wake
|
||||
* up and release the mutex. While this task waits with
|
||||
* the mutex another higher priority task is started that
|
||||
* just loops using all the processing time. It is not until
|
||||
* another even higher priority thread blocks on the mutex
|
||||
* does this task get raised to that priority and so
|
||||
* releases the mutex. This will allow us to capture the
|
||||
* action of priority inversion.
|
||||
*/
|
||||
static void
|
||||
capture_CT1a (rtems_task_argument arg)
|
||||
{
|
||||
rtems_id mutex = (rtems_id) arg;
|
||||
rtems_status_code sc;
|
||||
|
||||
sc = rtems_semaphore_obtain (mutex, RTEMS_WAIT, 0);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
fprintf (stdout, "error: CT1a: mutex obtain: %s\n",
|
||||
rtems_status_text (sc));
|
||||
|
||||
capture_wait (2500);
|
||||
|
||||
sc = rtems_semaphore_release (mutex);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
fprintf (stdout, "error: CT1a: mutex release: %s\n",
|
||||
rtems_status_text (sc));
|
||||
|
||||
capture_CT1a_deleted = 1;
|
||||
|
||||
rtems_task_delete (RTEMS_SELF);
|
||||
}
|
||||
|
||||
static void
|
||||
capture_CT1b (rtems_task_argument arg)
|
||||
{
|
||||
volatile int i;
|
||||
|
||||
while (!capture_CT1c_deleted)
|
||||
i++;
|
||||
|
||||
capture_CT1b_deleted = 1;
|
||||
|
||||
rtems_task_delete (RTEMS_SELF);
|
||||
}
|
||||
|
||||
static void
|
||||
capture_CT1c (rtems_task_argument arg)
|
||||
{
|
||||
rtems_id mutex = (rtems_id) arg;
|
||||
rtems_status_code sc;
|
||||
|
||||
sc = rtems_semaphore_obtain (mutex, RTEMS_WAIT, 0);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
fprintf (stdout, "error: CT1c: mutex obtain: %s\n",
|
||||
rtems_status_text (sc));
|
||||
|
||||
capture_wait (500);
|
||||
|
||||
sc = rtems_semaphore_release (mutex);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
fprintf (stdout, "error: CT1c: mutex release: %s\n",
|
||||
rtems_status_text (sc));
|
||||
|
||||
capture_CT1c_deleted = 1;
|
||||
|
||||
rtems_task_delete (RTEMS_SELF);
|
||||
}
|
||||
|
||||
void capture_test_1 ()
|
||||
{
|
||||
rtems_status_code sc;
|
||||
rtems_name name;
|
||||
rtems_id id[3];
|
||||
rtems_id mutex;
|
||||
int loops;
|
||||
|
||||
capture_CT1a_deleted = 0;
|
||||
capture_CT1b_deleted = 0;
|
||||
capture_CT1c_deleted = 0;
|
||||
|
||||
name = rtems_build_name('C', 'T', 'm', '1');
|
||||
|
||||
sc = rtems_semaphore_create (name, 1,
|
||||
RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
|
||||
RTEMS_INHERIT_PRIORITY,
|
||||
0, &mutex);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot mutex: %s\n",
|
||||
rtems_status_text (sc));
|
||||
return;
|
||||
}
|
||||
|
||||
name = rtems_build_name('C', 'T', '1', 'a');
|
||||
|
||||
sc = rtems_task_create (name, 102, 2 * 1024,
|
||||
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
|
||||
RTEMS_PREEMPT | RTEMS_TIMESLICE | RTEMS_NO_ASR,
|
||||
&id[0]);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot create CT1a: %s\n",
|
||||
rtems_status_text (sc));
|
||||
rtems_semaphore_delete (mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
sc = rtems_task_start (id[0], capture_CT1a, (rtems_task_argument) mutex);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot start CT1a: %s\n",
|
||||
rtems_status_text (sc));
|
||||
rtems_task_delete (id[0]);
|
||||
rtems_semaphore_delete (mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
capture_wait (1000);
|
||||
|
||||
name = rtems_build_name('C', 'T', '1', 'b');
|
||||
|
||||
sc = rtems_task_create (name, 101, 2 * 1024,
|
||||
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
|
||||
RTEMS_PREEMPT | RTEMS_TIMESLICE | RTEMS_NO_ASR,
|
||||
&id[1]);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot create CT1b: %s\n",
|
||||
rtems_status_text (sc));
|
||||
rtems_task_delete (id[0]);
|
||||
rtems_semaphore_delete (mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
sc = rtems_task_start (id[1], capture_CT1b, 0);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot start CT1b: %s\n",
|
||||
rtems_status_text (sc));
|
||||
rtems_task_delete (id[1]);
|
||||
rtems_task_delete (id[0]);
|
||||
rtems_semaphore_delete (mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
capture_wait (1000);
|
||||
|
||||
name = rtems_build_name('C', 'T', '1', 'c');
|
||||
|
||||
sc = rtems_task_create (name, 100, 2 * 1024,
|
||||
RTEMS_NO_FLOATING_POINT | RTEMS_LOCAL,
|
||||
RTEMS_PREEMPT | RTEMS_TIMESLICE | RTEMS_NO_ASR,
|
||||
&id[2]);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot create CT1c: %s\n",
|
||||
rtems_status_text (sc));
|
||||
rtems_task_delete (id[1]);
|
||||
rtems_task_delete (id[0]);
|
||||
rtems_semaphore_delete (mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
sc = rtems_task_start (id[2], capture_CT1c, (rtems_task_argument) mutex);
|
||||
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: cannot start CT1c: %s\n",
|
||||
rtems_status_text (sc));
|
||||
rtems_task_delete (id[2]);
|
||||
rtems_task_delete (id[1]);
|
||||
rtems_task_delete (id[0]);
|
||||
rtems_semaphore_delete (mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
loops = 15;
|
||||
|
||||
while (!(capture_CT1a_deleted || capture_CT1b_deleted ||
|
||||
capture_CT1c_deleted) && loops)
|
||||
{
|
||||
loops--;
|
||||
capture_wait (1000);
|
||||
}
|
||||
|
||||
if (!loops)
|
||||
{
|
||||
fprintf (stdout, "error: Test 1: test tasks did not delete\n");
|
||||
rtems_task_delete (id[2]);
|
||||
rtems_task_delete (id[1]);
|
||||
rtems_task_delete (id[0]);
|
||||
}
|
||||
|
||||
sc = rtems_semaphore_delete (mutex);
|
||||
if (sc != RTEMS_SUCCESSFUL)
|
||||
fprintf (stdout, "error: Test 1: deleting the mutex: %s\n",
|
||||
rtems_status_text (sc));
|
||||
|
||||
}
|
||||
|
||||
#endif /* BSP_SMALL_MEMORY */
|
||||
@@ -110,6 +110,7 @@ termios06/Makefile
|
||||
termios07/Makefile
|
||||
termios08/Makefile
|
||||
tztest/Makefile
|
||||
capture01/Makefile
|
||||
POSIX/Makefile
|
||||
math/Makefile
|
||||
mathf/Makefile
|
||||
|
||||
Reference in New Issue
Block a user