mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-24 23:53:24 +08:00
2007-08-17 Chris Johns <chrisj@rtems.org>
* Makefile.am, README, configure.ac, capture/.cvsignore, capture/Makefile.am, capture/capture.doc, capture/capture.scn, capture/init.c, capture/system.h, capture/test1.c: Add a sample test for the capture engine.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
2007-08-17 Chris Johns <chrisj@rtems.org>
|
||||
|
||||
* Makefile.am, README, configure.ac, capture/.cvsignore,
|
||||
capture/Makefile.am, capture/capture.doc, capture/capture.scn,
|
||||
capture/init.c, capture/system.h, capture/test1.c: Add a sample
|
||||
test for the capture engine.
|
||||
|
||||
2007-07-24 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||
|
||||
* nsecs/init.c: Add include of unistd.h for sleep() prototype.
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
ACLOCAL_AMFLAGS = -I ../aclocal
|
||||
|
||||
SUBDIRS = hello ticker base_sp unlimited minimum fileio
|
||||
SUBDIRS = hello capture ticker base_sp unlimited minimum fileio
|
||||
|
||||
if MPTESTS
|
||||
## base_mp is a sample multiprocessing test
|
||||
|
||||
@@ -42,6 +42,12 @@ The following describes each of the sample applications:
|
||||
This is intended as a starting point for custom developed single
|
||||
processor applications.
|
||||
|
||||
capture
|
||||
|
||||
This simple application starts the monitor and allows you access
|
||||
to the capture engine. The capture engine provides a trace of
|
||||
RTEMS activity and is used to debug your application.
|
||||
|
||||
cdtest
|
||||
|
||||
A very simple C++ application which demonstrates that it is
|
||||
@@ -70,3 +76,8 @@ The following describes each of the sample applications:
|
||||
This test has an initialization task create three application
|
||||
tasks which sleep and periodically wake up and print the time.
|
||||
|
||||
unlimited
|
||||
|
||||
This is a test for the umlimited object feature of RTEMS. Here
|
||||
you can configure RTEMS to give as many objects as memory
|
||||
in the Workspace.
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -0,0 +1,26 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
MANAGERS = io event
|
||||
|
||||
rtems_tests_PROGRAMS = capture.exe
|
||||
capture_exe_SOURCES = init.c test1.c system.h
|
||||
|
||||
dist_rtems_tests_DATA = capture.scn
|
||||
dist_rtems_tests_DATA += capture.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
unlimited_exe_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||
|
||||
LINK_OBJS = $(capture_exe_OBJECTS) $(capture_exe_LDADD)
|
||||
LINK_LIBS = $(capture_exe_LDLIBS)
|
||||
|
||||
capture.exe$(EXEEXT): $(capture_exe_OBJECTS) $(capture_exe_DEPENDENCIES)
|
||||
@rm -f capture.exe$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,137 @@
|
||||
*** CAPTURE ENGING TEST ***
|
||||
|
||||
Monitor ready, press enter to login.
|
||||
|
||||
rtems $
|
||||
rtems $ copen 5000
|
||||
capture engine open
|
||||
rtems $ cwceil 100
|
||||
watch ceiling 100.
|
||||
rtems $ cwfloor 102
|
||||
watch floor is 102.
|
||||
rtems $ cwglob on
|
||||
global watch enabled.
|
||||
rtems $ ctset RMON
|
||||
trigger set.
|
||||
rtems $ cwlist
|
||||
watch priority ceiling is 100
|
||||
watch priority floor is 102
|
||||
global watch is enabled
|
||||
total 1
|
||||
00000000 RMON g- T:S------ F:-----
|
||||
rtems $ cenable
|
||||
capture engine enabled.
|
||||
rtems $ ctrace
|
||||
rtems $ test1
|
||||
rtems $ ctrace
|
||||
91.980000 0a010002 RMON 1 1 CREATED_BY
|
||||
91.980000 0a010003 CT1a 102 102 CREATED
|
||||
91.980000 0a010002 RMON 1 1 STARTED_BY
|
||||
91.980000 0a010003 CT1a 102 102 STARTED
|
||||
91.980000 0a010003 CT1a 102 102 SWITCHED_IN
|
||||
91.980000 0a010003 CT1a 102 102 BEGIN
|
||||
91.980000 0a010003 CT1a 102 102 SWITCHED_OUT
|
||||
92.980000 0a010002 RMON 1 1 CREATED_BY
|
||||
92.980000 0a010004 CT1b 101 101 CREATED
|
||||
92.980000 0a010002 RMON 1 1 STARTED_BY
|
||||
92.980000 0a010004 CT1b 101 101 STARTED
|
||||
92.980000 0a010004 CT1b 101 101 SWITCHED_IN
|
||||
92.980000 0a010004 CT1b 101 101 BEGIN
|
||||
93.980000 0a010004 CT1b 101 101 SWITCHED_OUT
|
||||
93.980000 0a010002 RMON 1 1 CREATED_BY
|
||||
93.980000 0a010004 CT1c 100 100 CREATED
|
||||
93.980000 0a010002 RMON 1 1 STARTED_BY
|
||||
93.980000 0a010005 CT1c 100 100 STARTED
|
||||
93.980000 0a010005 CT1c 100 100 SWITCHED_IN
|
||||
93.980000 0a010005 CT1c 100 100 BEGIN
|
||||
93.980000 0a010005 CT1c 100 100 SWITCHED_OUT
|
||||
93.980000 0a010004 CT1b 101 101 SWITCHED_IN
|
||||
rtems $ ctrace
|
||||
94.480000 0a010004 CT1b 101 101 SWITCHED_OUT
|
||||
94.480000 0a010003 CT1a 102 100 SWITCHED_IN
|
||||
94.480000 0a010003 CT1a 102 102 SWITCHED_OUT
|
||||
94.480000 0a010005 CT1c 100 100 SWITCHED_IN
|
||||
94.480000 0a010005 CT1c 100 100 SWITCHED_OUT
|
||||
94.480000 0a010004 CT1b 101 101 SWITCHED_IN
|
||||
94.980000 0a010004 CT1b 101 101 SWITCHED_OUT
|
||||
94.980000 0a010005 CT1c 100 100 SWITCHED_IN
|
||||
94.980000 0a010005 CT1c 100 100 DETELED_BY
|
||||
94.980000 0a010005 CT1c 100 100 DETELED
|
||||
94.980000 0a010004 CT1b 101 101 SWITCHED_IN
|
||||
94.980000 0a010004 CT1b 101 101 DELETED_BY
|
||||
94.980000 0a010004 CT1b 101 101 DELETED
|
||||
94.980000 0a010003 CT1a 102 100 SWITCHED_IN
|
||||
94.980000 0a010003 CT1a 102 100 DELETED_BY
|
||||
94.980000 0a010003 CT1a 102 100 DELETED
|
||||
|
||||
*** CAPTURE ENGING TEST ***
|
||||
|
||||
Monitor ready, press enter to login.
|
||||
|
||||
rtems $ copen 5000
|
||||
capture engine open
|
||||
rtems $ cenable
|
||||
capture engine enabled.
|
||||
rtems $ cwadd CT1c
|
||||
watch added.
|
||||
rtems $ cwctl CT1c on
|
||||
watch enabled.
|
||||
rtems $ ctset switch CT1c from CT1a
|
||||
trigger set.
|
||||
rtems $ cwlist
|
||||
watch priority ceiling is 0
|
||||
watch priority floor is 0
|
||||
global watch is disabled
|
||||
total 1
|
||||
00000000 CT1c -w T:------- F:-----
|
||||
0:CT1a/00000000:S----
|
||||
rtems $ test1
|
||||
rtems $ ctrace
|
||||
61.150000 0a010005 CT1c 100 100 SWITCHED_IN
|
||||
61.150000 0a010005 CT1c 100 100 SWITCHED_OUT
|
||||
61.650000 0a010005 CT1c 100 100 SWITCHED_IN
|
||||
61.650000 0a010005 CT1c 100 100 DELETED_BY
|
||||
61.650000 0a010005 CT1c 100 100 DELETED
|
||||
|
||||
*** CAPTURE ENGING TEST ***
|
||||
|
||||
Monitor ready, press enter to login.
|
||||
|
||||
rtems $ copen 5000
|
||||
capture engine open
|
||||
rtems $ cenable
|
||||
capture engine enabled.
|
||||
rtems $ cwadd CT1b
|
||||
watch added.
|
||||
rtems $ cwctl CT1b on
|
||||
watch enabled.
|
||||
rtems $ ctset switch CT1c from CT1a
|
||||
trigger set.
|
||||
rtems $ cwlist
|
||||
watch priority ceiling is 0
|
||||
watch priority floor is 0
|
||||
global watch is disabled
|
||||
total 2
|
||||
00000000 CT1c -- T:------- F:-----
|
||||
0:CT1a/00000000:S----
|
||||
00000000 CT1b -w T:------- F:-----
|
||||
rtems $ ctlist
|
||||
total 2
|
||||
09010001 IDLE 255 255 255 READY a--- 0% 0% (10682)
|
||||
0a010002 RMON 1 1 1 READY a--- 0% 0% (826)
|
||||
rtems $ test1
|
||||
rtems $ ctlist
|
||||
total 3
|
||||
0a010004 CT1b 101 0 0 READY dtw- 100% 0% (200)
|
||||
09010001 IDLE 255 255 255 READY a--- 0% 0% (10682)
|
||||
0a010002 RMON 1 1 1 READY a--- 0% 0% (826)
|
||||
rtems $ ctrace
|
||||
551.630000 0a010004 CT1b 101 101 SWITCHED_IN
|
||||
552.130000 0a010004 CT1b 101 101 SWITCHED_OUT
|
||||
552.130000 0a010004 CT1b 101 101 SWITCHED_IN
|
||||
552.130000 0a010004 CT1b 101 101 DELETED_BY
|
||||
552.130000 0a010004 CT1b 101 101 DELETED
|
||||
rtems $ ctlist
|
||||
total 2
|
||||
09010001 IDLE 255 255 255 READY a--- 0% 0% (10682)
|
||||
0a010002 RMON 1 1 1 READY a--- 0% 0% (826)
|
||||
@@ -0,0 +1,73 @@
|
||||
/* Init
|
||||
*
|
||||
* This routine is the initialization task for this test program.
|
||||
* It is called from init_exec and has the responsibility for creating
|
||||
* and starting the tasks that make up the test. If the time of day
|
||||
* clock is required for the test, it should also be set to a known
|
||||
* value by this function.
|
||||
*
|
||||
* 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.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
|
||||
#include "system.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/capture-cli.h>
|
||||
#include <rtems/monitor.h>
|
||||
|
||||
void setup_tasks_to_watch ();
|
||||
|
||||
volatile int can_proceed = 1;
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument ignored
|
||||
)
|
||||
{
|
||||
rtems_task_priority old_priority;
|
||||
rtems_mode old_mode;
|
||||
rtems_event_set out;
|
||||
|
||||
/* lower the task priority to allow created tasks to execute */
|
||||
|
||||
rtems_task_set_priority(RTEMS_SELF, 20, &old_priority);
|
||||
rtems_task_mode(RTEMS_PREEMPT, RTEMS_PREEMPT_MASK, &old_mode);
|
||||
|
||||
printf( "\n*** CAPTURE ENGINE TEST ***\n" );
|
||||
|
||||
while (!can_proceed)
|
||||
{
|
||||
printf ("Sleeping\n");
|
||||
usleep (1000000);
|
||||
}
|
||||
|
||||
rtems_monitor_init (0);
|
||||
rtems_capture_cli_init (0);
|
||||
|
||||
setup_tasks_to_watch ();
|
||||
|
||||
rtems_task_delete (RTEMS_SELF);
|
||||
|
||||
printf( "\nblocking main\n" );
|
||||
|
||||
rtems_event_receive (RTEMS_EVENT_1, RTEMS_WAIT | RTEMS_EVENT_ANY,
|
||||
0, &out);
|
||||
|
||||
printf( "\n*** END OF UNLIMITED TASK TEST ***\n" );
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
/* 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.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include <rtems.h>
|
||||
|
||||
/* functions */
|
||||
|
||||
rtems_task Init(
|
||||
rtems_task_argument argument
|
||||
);
|
||||
|
||||
rtems_task test_task(
|
||||
rtems_task_argument my_number
|
||||
);
|
||||
|
||||
void
|
||||
destory_all_tasks(
|
||||
const char *who
|
||||
);
|
||||
|
||||
boolean status_code_bad(
|
||||
rtems_status_code status_code
|
||||
);
|
||||
|
||||
void test1();
|
||||
void test2();
|
||||
void test3();
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#include <bsp.h> /* for device driver prototypes */
|
||||
|
||||
#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)
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
|
||||
/*
|
||||
* Keep track of the task id's created, use a large array.
|
||||
*/
|
||||
|
||||
#define MAX_TASKS (1000)
|
||||
#define TASK_INDEX_OFFSET (1)
|
||||
|
||||
extern rtems_id task_id[MAX_TASKS];
|
||||
|
||||
/*
|
||||
* Increment the task name.
|
||||
*/
|
||||
|
||||
#define NEXT_TASK_NAME(c1, c2, c3, c4) \
|
||||
if (c4 == '9') { \
|
||||
if (c3 == '9') { \
|
||||
if (c2 == 'z') { \
|
||||
if (c1 == 'z') { \
|
||||
printf("not enough task letters for names !!!\n"); \
|
||||
exit( 1 ); \
|
||||
} else \
|
||||
c1++; \
|
||||
c2 = 'a'; \
|
||||
} else \
|
||||
c2++; \
|
||||
c3 = '0'; \
|
||||
} else \
|
||||
c3++; \
|
||||
c4 = '0'; \
|
||||
} \
|
||||
else \
|
||||
c4++ \
|
||||
|
||||
|
||||
/* end of include file */
|
||||
@@ -0,0 +1,270 @@
|
||||
/* 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.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#include "system.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <rtems.h>
|
||||
#include <rtems/monitor.h>
|
||||
|
||||
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 (TOD_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);
|
||||
}
|
||||
|
||||
static void
|
||||
capture_test_1 (int argc,
|
||||
char** argv,
|
||||
rtems_monitor_command_arg_t* command_arg,
|
||||
boolean verbose)
|
||||
{
|
||||
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));
|
||||
}
|
||||
|
||||
static rtems_monitor_command_entry_t capture_cmds[] =
|
||||
{
|
||||
{
|
||||
"test1",
|
||||
"usage: \n",
|
||||
0,
|
||||
capture_test_1,
|
||||
{ 0 },
|
||||
0
|
||||
}
|
||||
};
|
||||
|
||||
void setup_tasks_to_watch ()
|
||||
{
|
||||
int cmd;
|
||||
for (cmd = 0;
|
||||
cmd < sizeof (capture_cmds) / sizeof (rtems_monitor_command_entry_t);
|
||||
cmd++)
|
||||
rtems_monitor_insert_cmd (&capture_cmds[cmd]);
|
||||
}
|
||||
@@ -75,5 +75,6 @@ base_mp/node2/Makefile
|
||||
iostream/Makefile
|
||||
cdtest/Makefile
|
||||
pppd/Makefile
|
||||
capture/Makefile
|
||||
])
|
||||
AC_OUTPUT
|
||||
|
||||
Reference in New Issue
Block a user