mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2026-08-26 23:14:34 +08:00
2009-06-10 Joel Sherrill <joel.sherrill@oarcorp.com>
* Makefile.am, configure.ac: Add mq_send to full queue from ISR case. * psxmsgq03/.cvsignore, psxmsgq03/Makefile.am, psxmsgq03/init.c, psxmsgq03/psxmsgq03.doc, psxmsgq03/psxmsgq03.scn, psxmsgq03/system.h: New files.
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
2009-06-10 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* Makefile.am, configure.ac: Add mq_send to full queue from ISR case.
|
||||
* psxmsgq03/.cvsignore, psxmsgq03/Makefile.am, psxmsgq03/init.c,
|
||||
psxmsgq03/psxmsgq03.doc, psxmsgq03/psxmsgq03.scn, psxmsgq03/system.h: New files.
|
||||
|
||||
2009-05-17 Joel Sherrill <joel.sherrill@oarcorp.com>
|
||||
|
||||
* psxrwlock01/psxrwlock01.scn, psxrwlock01/test.c: Add test case for
|
||||
|
||||
@@ -6,7 +6,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal
|
||||
|
||||
SUBDIRS = psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
|
||||
psx10 psx11 psx12 psx13 psx14 psxcleanup psxtime psxtimer01 psxtimer02 \
|
||||
psxcancel psxbarrier01 psxmsgq01 psxmsgq02 psxrwlock01 psxsem01 \
|
||||
psxcancel psxbarrier01 psxmsgq01 psxmsgq03 psxrwlock01 psxsem01 \
|
||||
psxspin01 psxenosys psxsignal01 psxsysconf psxualarm psxkey01 \
|
||||
psxfatal01 psxfatal02 psxitimer
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ psxkey01/Makefile
|
||||
psxmount/Makefile
|
||||
psxmsgq01/Makefile
|
||||
psxmsgq02/Makefile
|
||||
psxmsgq03/Makefile
|
||||
psxreaddir/Makefile
|
||||
psxrdwrv/Makefile
|
||||
psxrwlock01/Makefile
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
Makefile
|
||||
Makefile.in
|
||||
@@ -0,0 +1,30 @@
|
||||
##
|
||||
## $Id$
|
||||
##
|
||||
|
||||
MANAGERS = all
|
||||
|
||||
rtems_tests_PROGRAMS = psxmsgq03
|
||||
psxmsgq03_SOURCES = init.c system.h ../include/pmacros.h \
|
||||
../../support/src/test_support.c
|
||||
|
||||
dist_rtems_tests_DATA = psxmsgq03.scn
|
||||
dist_rtems_tests_DATA += psxmsgq03.doc
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(top_srcdir)/../automake/compile.am
|
||||
include $(top_srcdir)/../automake/leaf.am
|
||||
|
||||
psxmsgq03_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
|
||||
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/include
|
||||
AM_CPPFLAGS += -I$(top_srcdir)/../support/include
|
||||
|
||||
LINK_OBJS = $(psxmsgq03_OBJECTS) $(psxmsgq03_LDADD)
|
||||
LINK_LIBS = $(psxmsgq03_LDLIBS)
|
||||
|
||||
psxmsgq03$(EXEEXT): $(psxmsgq03_OBJECTS) $(psxmsgq03_DEPENDENCIES)
|
||||
@rm -f psxmsgq03$(EXEEXT)
|
||||
$(make-exe)
|
||||
|
||||
include $(top_srcdir)/../automake/local.am
|
||||
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2009.
|
||||
* 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.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#define CONFIGURE_INIT
|
||||
#include "system.h"
|
||||
|
||||
#include <fcntl.h> /* For O_* constants */
|
||||
#include <sys/stat.h> /* For mode constants */
|
||||
#include <mqueue.h>
|
||||
|
||||
#include "test_support.h"
|
||||
|
||||
mqd_t Queue;
|
||||
volatile bool tsr_fired;
|
||||
volatile int tsr_status;
|
||||
volatile int tsr_errno;
|
||||
|
||||
rtems_timer_service_routine mq_send_timer(
|
||||
rtems_id timer,
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
int msg = 4;
|
||||
|
||||
tsr_fired = true;
|
||||
|
||||
tsr_status = mq_send( Queue, (const char *)&msg, sizeof(int), 1 );
|
||||
tsr_errno = errno;
|
||||
}
|
||||
|
||||
void *POSIX_Init(
|
||||
void *argument
|
||||
)
|
||||
{
|
||||
struct mq_attr attr;
|
||||
int status;
|
||||
int msgBody;
|
||||
rtems_id timer;
|
||||
rtems_status_code rc;
|
||||
|
||||
puts( "\n\n*** POSIX MESSAGE QUEUE TEST 3 ***" );
|
||||
|
||||
attr.mq_maxmsg = 1;
|
||||
attr.mq_msgsize = sizeof(int);
|
||||
|
||||
puts( "Init - Open message queue" );
|
||||
Queue = mq_open( "Qsend", O_CREAT | O_RDWR, 0x777, &attr );
|
||||
if ( Queue == (-1) ) {
|
||||
perror( "mq_open failed" );
|
||||
}
|
||||
assert( Queue != (-1) );
|
||||
|
||||
puts( "Init - send to message queue" );
|
||||
status = mq_send( Queue, (const char *)&status, sizeof(int), 1 );
|
||||
if ( status == (-1) ) {
|
||||
perror( "mq_status failed" );
|
||||
}
|
||||
assert( status != (-1) );
|
||||
|
||||
/*
|
||||
* Now create the timer we will send to a full queue from.
|
||||
*/
|
||||
puts( "Init - Create Classic API Timer" );
|
||||
rc = rtems_timer_create( 1, &timer );
|
||||
directive_failed( rc, "rtems_timer_create" );
|
||||
|
||||
puts( "Init - Fire After Classic API Timer" );
|
||||
tsr_fired = false;
|
||||
|
||||
rc = rtems_timer_fire_after(
|
||||
timer,
|
||||
rtems_clock_get_ticks_per_second(),
|
||||
mq_send_timer,
|
||||
NULL
|
||||
);
|
||||
directive_failed( rc, "rtems_timer_fire_after" );
|
||||
|
||||
sleep(2);
|
||||
|
||||
if ( tsr_fired == false ) {
|
||||
puts( "ERROR -- TSR DID NOT FIRE" );
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
if ( (tsr_status != -1) || (tsr_errno != ENOMEM) ) {
|
||||
puts( "ERROR -- TSR DID NOT RETURN CORRECT STATUS" );
|
||||
printf(
|
||||
"status=%d errno=%d --> %s\n",
|
||||
tsr_status,
|
||||
tsr_errno,
|
||||
strerror(tsr_errno)
|
||||
);
|
||||
rtems_test_exit( 0 );
|
||||
}
|
||||
|
||||
puts( "Init - mq_send from ISR returned correct status" );
|
||||
|
||||
puts( "*** END OF POSIX MESSAGE QUEUE TEST 3 ***" );
|
||||
rtems_test_exit( 0 );
|
||||
|
||||
return NULL; /* just so the compiler thinks we returned something */
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
# COPYRIGHT (c) 1989-2009.
|
||||
# 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.com/license/LICENSE.
|
||||
#
|
||||
|
||||
This file describes the directives and concepts tested by this test set.
|
||||
|
||||
test set name: psxmsgq03
|
||||
|
||||
directives:
|
||||
|
||||
mq_open
|
||||
mq_send
|
||||
|
||||
concepts:
|
||||
|
||||
+ Ensure that an error is returned when performing a blocking mq_send
|
||||
from an Interrupt Service Routine. This condition is beyond the
|
||||
POSIX Standard because they do not discuss interrupt processing and
|
||||
what operations are allowed.
|
||||
@@ -0,0 +1,7 @@
|
||||
*** POSIX MESSAGE QUEUE TEST 3 ***
|
||||
Init - Open message queue
|
||||
Init - send to message queue
|
||||
Init - Create Classic API Timer
|
||||
Init - Fire After Classic API Timer
|
||||
Init - mq_send from ISR returned correct status
|
||||
*** END OF POSIX MESSAGE QUEUE TEST 3 ***
|
||||
@@ -0,0 +1,43 @@
|
||||
/* system.h
|
||||
*
|
||||
* This include file contains information that is included in every
|
||||
* function in the test set.
|
||||
*
|
||||
* 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.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
/* functions */
|
||||
|
||||
#include <pmacros.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sched.h>
|
||||
#include <tmacros.h>
|
||||
|
||||
void *POSIX_Init(
|
||||
void *argument
|
||||
);
|
||||
|
||||
/* configuration information */
|
||||
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
|
||||
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
|
||||
|
||||
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
|
||||
|
||||
#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
|
||||
#define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 1
|
||||
#define CONFIGURE_MAXIMUM_TIMERS 1
|
||||
|
||||
#define CONFIGURE_POSIX_INIT_THREAD_TABLE
|
||||
|
||||
#include <rtems/confdefs.h>
|
||||
/* end of include file */
|
||||
|
||||
Reference in New Issue
Block a user