From 6e315132619fcd3454a373e9059c3d7f5fba70dc Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 29 Jan 2008 21:53:04 +0000 Subject: 2008-01-29 Joel Sherrill * Makefile.am, configure.ac, sp02/task1.c, sp24/resume.c, sp30/resume.c, sp41/init.c, sp42/init.c: Add new Object Services collection. This changed the name of a few previously public but undocumented services and added a some new services. * sp43/.cvsignore, sp43/Makefile.am, sp43/init.c, sp43/sp43.scn, sp43/system.h: New files. --- testsuites/sptests/ChangeLog | 9 ++ testsuites/sptests/Makefile.am | 2 +- testsuites/sptests/configure.ac | 1 + testsuites/sptests/sp02/task1.c | 8 +- testsuites/sptests/sp24/resume.c | 4 +- testsuites/sptests/sp30/resume.c | 4 +- testsuites/sptests/sp41/init.c | 2 +- testsuites/sptests/sp42/init.c | 2 +- testsuites/sptests/sp43/.cvsignore | 2 + testsuites/sptests/sp43/Makefile.am | 27 ++++ testsuites/sptests/sp43/init.c | 272 ++++++++++++++++++++++++++++++++++++ testsuites/sptests/sp43/sp43.scn | 58 ++++++++ testsuites/sptests/sp43/system.h | 37 +++++ 13 files changed, 417 insertions(+), 11 deletions(-) create mode 100644 testsuites/sptests/sp43/.cvsignore create mode 100644 testsuites/sptests/sp43/Makefile.am create mode 100644 testsuites/sptests/sp43/init.c create mode 100644 testsuites/sptests/sp43/sp43.scn create mode 100644 testsuites/sptests/sp43/system.h (limited to 'testsuites/sptests') diff --git a/testsuites/sptests/ChangeLog b/testsuites/sptests/ChangeLog index 624d4f55d8..31b4c48473 100644 --- a/testsuites/sptests/ChangeLog +++ b/testsuites/sptests/ChangeLog @@ -1,3 +1,12 @@ +2008-01-29 Joel Sherrill + + * Makefile.am, configure.ac, sp02/task1.c, sp24/resume.c, + sp30/resume.c, sp41/init.c, sp42/init.c: Add new Object Services + collection. This changed the name of a few previously public but + undocumented services and added a some new services. + * sp43/.cvsignore, sp43/Makefile.am, sp43/init.c, sp43/sp43.scn, + sp43/system.h: New files. + 2008-01-29 Joel Sherrill * spfatal10/.cvsignore: New file. diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am index 2d6af32dea..c08960eff7 100644 --- a/testsuites/sptests/Makefile.am +++ b/testsuites/sptests/Makefile.am @@ -7,7 +7,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal ## spfatal is not included for now SUBDIRS = sp01 sp02 sp03 sp04 sp05 sp06 sp07 sp08 sp09 sp11 sp12 sp13 sp14 \ sp15 sp16 sp17 sp19 sp20 sp21 sp22 sp23 sp24 sp25 sp26 sp27 sp28 sp29 \ - sp30 sp31 sp32 sp33 sp34 sp35 sp37 sp38 sp39 sp40 sp41 sp42 spsize \ + sp30 sp31 sp32 sp33 sp34 sp35 sp37 sp38 sp39 sp40 sp41 sp42 sp43 spsize \ spfatal01 spfatal02 spfatal03 spfatal04 spfatal05 spfatal06 spfatal07 \ spfatal08 spfatal09 spfatal10 diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index e80bccbf82..8917bfd62e 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -67,6 +67,7 @@ sp39/Makefile sp40/Makefile sp41/Makefile sp42/Makefile +sp43/Makefile spsize/Makefile spfatal/Makefile spfatal01/Makefile diff --git a/testsuites/sptests/sp02/task1.c b/testsuites/sptests/sp02/task1.c index b307c1787f..48b2c4bb00 100644 --- a/testsuites/sptests/sp02/task1.c +++ b/testsuites/sptests/sp02/task1.c @@ -7,7 +7,7 @@ * * Output parameters: NONE * - * COPYRIGHT (c) 1989-1999. + * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -38,10 +38,10 @@ rtems_task Task_1( printf( "TA1 - rtems_task_ident - tid of TA2 (0x%.8x)\n", tid2 ); - status = rtems_object_id_to_name( tid2, &tid2_name ); - directive_failed( status, "rtems_object_id_to_name of TA2" ); + status = rtems_object_get_classic_name( tid2, &tid2_name ); + directive_failed( status, "rtems_object_get_classic_name of TA2" ); - printf( "TA1 - rtems_id_to_name - id -> name of TA2 %sOK\n", + printf( "TA1 - rtems_get_classic_name - id -> name of TA2 %sOK\n", (tid2_name != Task_name[2]) ? "NOT " : "" ); status = rtems_task_ident( Task_name[ 3 ], RTEMS_SEARCH_ALL_NODES, &tid3 ); diff --git a/testsuites/sptests/sp24/resume.c b/testsuites/sptests/sp24/resume.c index 5e85d9c5d8..715390e16c 100644 --- a/testsuites/sptests/sp24/resume.c +++ b/testsuites/sptests/sp24/resume.c @@ -7,7 +7,7 @@ * * Output parameters: NONE * - * COPYRIGHT (c) 1989-1999. + * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -27,7 +27,7 @@ rtems_timer_service_routine Resume_task( rtems_id task_to_resume; rtems_status_code status; - task_to_resume = Task_id[ rtems_get_index( timer_id ) ]; + task_to_resume = Task_id[ rtems_object_id_get_index( timer_id ) ]; status = rtems_task_resume( task_to_resume ); directive_failed_with_level( status, "rtems_task_resume", 1 ); } diff --git a/testsuites/sptests/sp30/resume.c b/testsuites/sptests/sp30/resume.c index 1a91d2d219..715390e16c 100644 --- a/testsuites/sptests/sp30/resume.c +++ b/testsuites/sptests/sp30/resume.c @@ -7,7 +7,7 @@ * * Output parameters: NONE * - * COPYRIGHT (c) 1989-2002. + * COPYRIGHT (c) 1989-2008. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -27,7 +27,7 @@ rtems_timer_service_routine Resume_task( rtems_id task_to_resume; rtems_status_code status; - task_to_resume = Task_id[ rtems_get_index( timer_id ) ]; + task_to_resume = Task_id[ rtems_object_id_get_index( timer_id ) ]; status = rtems_task_resume( task_to_resume ); directive_failed_with_level( status, "rtems_task_resume", 1 ); } diff --git a/testsuites/sptests/sp41/init.c b/testsuites/sptests/sp41/init.c index ad81ce642e..acd344efd9 100644 --- a/testsuites/sptests/sp41/init.c +++ b/testsuites/sptests/sp41/init.c @@ -192,6 +192,6 @@ rtems_task Init( break; } - puts( "*** END OF TEST SP41 ***" ); + puts( "*** END OF TEST 41 ***" ); rtems_test_exit( 0 ); } diff --git a/testsuites/sptests/sp42/init.c b/testsuites/sptests/sp42/init.c index 3cd29ba95d..ce93c244be 100644 --- a/testsuites/sptests/sp42/init.c +++ b/testsuites/sptests/sp42/init.c @@ -151,7 +151,7 @@ rtems_task Init( puts( "Exercising blocking discipline w/unblock in priority order" ); do_test( RTEMS_PRIORITY, FALSE ); - puts( "*** END OF TEST 40 ***" ); + puts( "*** END OF TEST 42 ***" ); exit(0); } diff --git a/testsuites/sptests/sp43/.cvsignore b/testsuites/sptests/sp43/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/testsuites/sptests/sp43/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/testsuites/sptests/sp43/Makefile.am b/testsuites/sptests/sp43/Makefile.am new file mode 100644 index 0000000000..4b6245ca51 --- /dev/null +++ b/testsuites/sptests/sp43/Makefile.am @@ -0,0 +1,27 @@ +## +## $Id$ +## + +MANAGERS = all + +rtems_tests_PROGRAMS = sp43.exe +sp43_exe_SOURCES = init.c system.h + +dist_rtems_tests_DATA = sp43.scn + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +sp43_exe_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel) + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(sp43_exe_OBJECTS) $(sp43_exe_LDADD) +LINK_LIBS = $(sp43_exe_LDLIBS) + +sp43.exe$(EXEEXT): $(sp43_exe_OBJECTS) $(sp43_exe_DEPENDENCIES) + @rm -f sp43.exe$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/sp43/init.c b/testsuites/sptests/sp43/init.c new file mode 100644 index 0000000000..6ce8d05a92 --- /dev/null +++ b/testsuites/sptests/sp43/init.c @@ -0,0 +1,272 @@ +/* + * Exercise Object Manager Services + * + * COPYRIGHT (c) 1989-2008. + * 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 TEST_INIT +#include "system.h" + +#undef rtems_build_id +#undef rtems_build_name +#undef rtems_object_id_api_maximum +#undef rtems_object_id_api_minimum +#undef rtems_object_id_get_api +#undef rtems_object_id_get_class +#undef rtems_object_id_get_index +#undef rtems_object_id_get_node + +void print_class_info( + uint32_t api, + uint32_t class, + rtems_object_api_class_information *info +) +{ + printf( + "%s API %s Information\n" + " minimum id : 0x%08x maximum id: 0x%08x\n" + " maximum : %7d available : %d\n" + " auto_extend : %s\n", + rtems_object_get_api_name(api), + rtems_object_get_api_class_name(api, class), + info->minimum_id, + info->maximum_id, + info->maximum, + info->unallocated, + ((info->auto_extend) ? "yes" : "no") + ); +} + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_status_code status; + rtems_id main_task; + rtems_name main_name; + rtems_id tmpId; + rtems_name tmpName; + char name[5]; + char *ptr; + const char newName[5] = "New1"; + uint32_t part; + rtems_object_api_class_information info; + + + puts( "\n\n*** TEST 43 ***" ); + + main_task = rtems_task_self(); + + puts( "rtems_object_get_classic_name - INVALID_ADDRESS" ); + status = rtems_object_get_classic_name( main_task, NULL ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_object_get_classic_name" + ); + + puts( "rtems_object_get_classic_name - INVALID_ID" ); + status = rtems_object_get_classic_name( main_task + 5, &tmpId ); + fatal_directive_status( + status, + RTEMS_INVALID_ID, + "rtems_object_get_classic_name" + ); + + status = rtems_object_get_classic_name( main_task, &main_name ); + directive_failed( status, "rtems_object_get_classic_name" ); + put_name( main_name, FALSE ); + puts( " - name returned by rtems_object_get_classic_name" ); + + tmpName = rtems_build_name( 'T', 'E', 'M', 'P' ); + put_name( tmpName, FALSE ); + puts( " - rtems_build_name for TEMP" ); + + + /* + * rtems_object_get_name - cases + */ + puts( "rtems_object_get_name - bad id for class with instances" ); + ptr = rtems_object_get_name( main_task + 5, 5, name ); + rtems_test_assert(ptr == NULL); + + puts( "rtems_object_get_name - bad id for class without instances" ); + ptr = rtems_object_get_name( + rtems_build_id( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_BARRIERS, 1, 1 ), + 5, + name + ); + rtems_test_assert(ptr == NULL); + + puts( "rtems_object_get_name - bad length" ); + ptr = rtems_object_get_name( main_task, 0, name ); + rtems_test_assert(ptr == NULL); + + puts( "rtems_object_get_name - bad pointer" ); + ptr = rtems_object_get_name( main_task, 5, NULL ); + rtems_test_assert(ptr == NULL); + + ptr = rtems_object_get_name( main_task, 5, name ); + rtems_test_assert(ptr != NULL); + printf( "rtems_object_get_name returned (%s) for init task\n", ptr ); + + /* + * rtems_object_set_name - change name of init task + */ + + puts( "rtems_object_set_name - change name of init task" ); + status = rtems_object_set_name( main_task, newName ); + directive_failed( status, "rtems_object_set_name" ); + + status = rtems_object_get_classic_name( main_task, &main_name ); + directive_failed( status, "rtems_object_get_classic_name" ); + put_name( main_name, FALSE ); + puts( " - name returned by rtems_object_get_classic_name" ); + + ptr = rtems_object_get_name( main_task, 5, name ); + rtems_test_assert(ptr != NULL); + printf( "rtems_object_get_name returned (%s) for init task\n", ptr ); + + /* + * Exercise id build and extraction routines + */ + + puts( "rtems_build_id - build an id to match init task" ); + tmpId = rtems_build_id( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, 1, 1 ), + assert( tmpId == main_task ); + + puts( "rtems_object_id_get_api - OK" ); + part = rtems_object_id_get_api( main_task ); + assert( part == OBJECTS_CLASSIC_API ); + + puts( "rtems_object_id_get_class - OK" ); + part = rtems_object_id_get_class( main_task ); + assert( part == OBJECTS_RTEMS_TASKS ); + + puts( "rtems_object_id_get_node - OK" ); + part = rtems_object_id_get_node( main_task ); + assert( part == 1 ); + + puts( "rtems_object_id_get_index - OK" ); + part = rtems_object_id_get_index( main_task ); + assert( part == 1 ); + + /* + * Start another screen and do the API/Class min/max routines + */ + rtems_test_pause(); + + printf( "rtems_object_id_api_minimum returned %d\n", + rtems_object_id_api_minimum() ); + printf( "rtems_object_id_api_maximum returned %d\n", + rtems_object_id_api_maximum() ); + + printf( "rtems_object_api_minimum_class(0) returned %d\n", + rtems_object_api_minimum_class(0) ); + printf( "rtems_object_api_maximum_class(0) returned %d\n", + rtems_object_api_maximum_class(0) ); + + printf( "rtems_object_api_minimum_class(0) returned %d\n", + rtems_object_api_minimum_class(0) ); + printf( "rtems_object_api_maximum_class(0) returned %d\n", + rtems_object_api_maximum_class(0) ); + + printf( "rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) returned %d\n", + rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) ); + printf( "rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) returned %d\n", + rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) ); + + printf( "rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) returned %d\n", + rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) ); + printf( "rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) returned %d\n", + rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) ); + + printf( "rtems_object_api_minimum_class(OBJECTS_POSIX_API) returned %d\n", + rtems_object_api_minimum_class(OBJECTS_POSIX_API) ); + printf( "rtems_object_api_maximum_class(OBJECTS_POSIX_API) returned %d\n", + rtems_object_api_maximum_class(OBJECTS_POSIX_API) ); + + printf( "rtems_object_api_minimum_class(OBJECTS_ITRON_API) returned %d\n", + rtems_object_api_minimum_class(OBJECTS_ITRON_API) ); + printf( "rtems_object_api_maximum_class(OBJECTS_ITRON_API) returned %d\n", + rtems_object_api_maximum_class(OBJECTS_ITRON_API) ); + + + /* + * Another screen break for the API and class name tests + */ + rtems_test_pause(); + + printf( "rtems_object_get_api_name(0) = %s\n", rtems_object_get_api_name(0) ); + printf( "rtems_object_get_api_name(255) = %s\n", rtems_object_get_api_name(255)); + + printf( "rtems_object_get_api_name(INTERNAL_API) = %s\n", + rtems_object_get_api_name(OBJECTS_INTERNAL_API) ); + printf( "rtems_object_get_api_name(CLASSIC_API) = %s\n", + rtems_object_get_api_name(OBJECTS_CLASSIC_API) ); + printf( "rtems_object_get_api_name(POSIX_API) = %s\n", + rtems_object_get_api_name(OBJECTS_POSIX_API) ); + printf( "rtems_object_get_api_name(ITRON_API) = %s\n", + rtems_object_get_api_name(OBJECTS_ITRON_API) ); + + printf( "rtems_object_get_api_class_name(0, RTEMS_TASKS) = %s\n", + rtems_object_get_api_class_name( 0, OBJECTS_RTEMS_TASKS ) ); + printf( "rtems_object_get_api_class_name(CLASSIC_API, 0) = %s\n", + rtems_object_get_api_class_name( OBJECTS_CLASSIC_API, 0 ) ); + printf( "rtems_object_get_api_class_name(CLASSIC_API, RTEMS_BARRIERS) = %s\n", + rtems_object_get_api_class_name(OBJECTS_CLASSIC_API, OBJECTS_RTEMS_BARRIERS)); + + /* + * Another screen break for the information + */ + + rtems_test_pause(); + + puts( "rtems_object_get_class_information - INVALID_ADDRESS" ); + status = rtems_object_get_class_information( + OBJECTS_INTERNAL_API, OBJECTS_INTERNAL_THREADS, NULL ); + fatal_directive_status( + status, + RTEMS_INVALID_ADDRESS, + "rtems_object_get_class_information" + ); + + puts( "rtems_object_get_class_information - INVALID_NUMBER (bad API)" ); + status = rtems_object_get_class_information(0, OBJECTS_INTERNAL_THREADS, &info); + fatal_directive_status( + status, + RTEMS_INVALID_NUMBER, + "rtems_object_get_class_information (API)" + ); + + puts( "rtems_object_get_class_information - INVALID_NUMBER (bad class)" ); + status = rtems_object_get_class_information( OBJECTS_INTERNAL_API, 0, &info ); + fatal_directive_status( + status, + RTEMS_INVALID_NUMBER, + "rtems_object_get_class_information (API)" + ); + + puts( "rtems_object_get_class_information - Classic Tasks - OK" ); + status = rtems_object_get_class_information( + OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, &info ); + directive_failed( status, "rtems_object_get_class_information" ); + print_class_info( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TASKS, &info ); + + puts( "rtems_object_get_class_information - Classic Timers - OK" ); + status = rtems_object_get_class_information( + OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TIMERS, &info ); + directive_failed( status, "rtems_object_get_class_information" ); + print_class_info( OBJECTS_CLASSIC_API, OBJECTS_RTEMS_TIMERS, &info ); + + + puts( "*** END OF TEST 43 ***" ); + rtems_test_exit( 0 ); +} diff --git a/testsuites/sptests/sp43/sp43.scn b/testsuites/sptests/sp43/sp43.scn new file mode 100644 index 0000000000..8b954a4c38 --- /dev/null +++ b/testsuites/sptests/sp43/sp43.scn @@ -0,0 +1,58 @@ +*** TEST 43 *** +rtems_object_get_classic_name - INVALID_ADDRESS +rtems_object_get_classic_name - INVALID_ID +UI1 - name returned by rtems_object_get_classic_name +TEMP - rtems_build_name for TEMP +rtems_object_get_name - bad id for class with instances +rtems_object_get_name - bad id for class without instances +rtems_object_get_name - bad length +rtems_object_get_name - bad pointer +rtems_object_get_name returned (UI1 ) for init task +rtems_object_set_name - change name of init task +New1 - name returned by rtems_object_get_classic_name +rtems_object_get_name returned (New1) for init task +rtems_build_id - build an id to match init task +rtems_object_id_get_api - OK +rtems_object_id_get_class - OK +rtems_object_id_get_node - OK +rtems_object_id_get_index - OK + +rtems_object_id_api_minimum returned 1 +rtems_object_id_api_maximum returned 4 +rtems_object_api_minimum_class(0) returned -1 +rtems_object_api_maximum_class(0) returned -1 +rtems_object_api_minimum_class(0) returned -1 +rtems_object_api_maximum_class(0) returned -1 +rtems_object_api_minimum_class(OBJECTS_INTERNAL_API) returned 1 +rtems_object_api_maximum_class(OBJECTS_INTERNAL_API) returned 2 +rtems_object_api_minimum_class(OBJECTS_CLASSIC_API) returned 1 +rtems_object_api_maximum_class(OBJECTS_CLASSIC_API) returned 10 +rtems_object_api_minimum_class(OBJECTS_POSIX_API) returned 1 +rtems_object_api_maximum_class(OBJECTS_POSIX_API) returned 12 +rtems_object_api_minimum_class(OBJECTS_ITRON_API) returned 1 +rtems_object_api_maximum_class(OBJECTS_ITRON_API) returned 8 + +rtems_object_get_api_name(0) = BAD CLASS +rtems_object_get_api_name(255) = BAD CLASS +rtems_object_get_api_name(INTERNAL_API) = Internal +rtems_object_get_api_name(CLASSIC_API) = Classic +rtems_object_get_api_name(POSIX_API) = POSIX +rtems_object_get_api_name(ITRON_API) = ITRON +rtems_object_get_api_class_name(0, RTEMS_TASKS) = BAD API +rtems_object_get_api_class_name(CLASSIC_API, 0) = BAD CLASS +rtems_object_get_api_class_name(CLASSIC_API, RTEMS_BARRIERS) = Barrier + +rtems_object_get_class_information - INVALID_ADDRESS +rtems_object_get_class_information - INVALID_NUMBER (bad API) +rtems_object_get_class_information - INVALID_NUMBER (bad class) +rtems_object_get_class_information - Classic Tasks - OK +Classic API Task Information + minimum id : 0x0a010001 maximum id: 0x0a010002 + maximum : 2 available : 1 + auto_extend : no +rtems_object_get_class_information - Classic Timers - OK +Classic API Timer Information + minimum id : 0x12010001 maximum id: 0x12010001 + maximum : 1 available : 1 + auto_extend : no +*** END OF TEST 43 *** diff --git a/testsuites/sptests/sp43/system.h b/testsuites/sptests/sp43/system.h new file mode 100644 index 0000000000..c007ce5cdf --- /dev/null +++ b/testsuites/sptests/sp43/system.h @@ -0,0 +1,37 @@ +/* system.h + * + * This include file contains information that is included in every + * function in the test set. + * + * COPYRIGHT (c) 1989-2008. + * 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$ + */ + +#include + +/* functions */ + +rtems_task Init( + rtems_task_argument argument +); + +/* configuration information */ + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_MAXIMUM_TASKS 2 +#define CONFIGURE_MAXIMUM_TIMERS 1 +#define CONFIGURE_MAXIMUM_SEMAPHORES 1 + +#include + +/* end of include file */ -- cgit v1.2.3