diff options
author | Glenn Humphrey <glenn.humphrey@oarcorp.com> | 2009-10-12 20:59:26 +0000 |
---|---|---|
committer | Glenn Humphrey <glenn.humphrey@oarcorp.com> | 2009-10-12 20:59:26 +0000 |
commit | 778e80da0eda4526bd2977d9399800e010d4088c (patch) | |
tree | 695726e800787cab4e6b1fe2fdf28436ab034ae5 | |
parent | 956c2e4a6a755a716408e07ad32096cdd078c191 (diff) |
2009-10-12 Glenn Humphrey <glenn.humphrey@OARcorp.com>
* Makefile, timer/init.c: Split the timer example into two examples
and cleaned up resource usage.
* timer_server/Makefile, timer_server/init.c: New files.
-rw-r--r-- | led/ChangeLog | 6 | ||||
-rw-r--r-- | led/Makefile | 2 | ||||
-rw-r--r-- | led/timer/init.c | 27 | ||||
-rw-r--r-- | led/timer_server/Makefile | 27 | ||||
-rw-r--r-- | led/timer_server/init.c | 125 |
5 files changed, 163 insertions, 24 deletions
diff --git a/led/ChangeLog b/led/ChangeLog index 3047c71..43b91ba 100644 --- a/led/ChangeLog +++ b/led/ChangeLog @@ -1,3 +1,9 @@ +2009-10-12 Glenn Humphrey <glenn.humphrey@OARcorp.com> + + * Makefile, timer/init.c: Split the timer example into two examples + and cleaned up resource usage. + * timer_server/Makefile, timer_server/init.c: New files. + 2009-09-24 Joel Sherrill <joel.sherrill@oarcorp.com> * delay/init.c, ratemon1/init.c: Clean up configuration. diff --git a/led/Makefile b/led/Makefile index 37da744..d05350e 100644 --- a/led/Makefile +++ b/led/Makefile @@ -7,7 +7,7 @@ include $(RTEMS_CUSTOM) include $(RTEMS_ROOT)/make/directory.cfg SUBDIRS=delay event_server msg_server sem_server ratemon1 ratemon2 \ - timeout_event timer + timeout_event timer timer_server # If the POSIX API isn't enabled, we can't build these ifeq ($(RTEMS_HAS_POSIX_API),yes) diff --git a/led/timer/init.c b/led/timer/init.c index f9e3a36..ec38ea6 100644 --- a/led/timer/init.c +++ b/led/timer/init.c @@ -12,13 +12,11 @@ #include <stdio.h> #include <bsp.h> -#include "../../testmacros.h" #include "../led.h" rtems_id Timer1; rtems_id Timer2; -#define USE_TIMER_SERVER #if defined(__LED_PRINTING) volatile int led_do_print; volatile int led_value; @@ -41,13 +39,9 @@ rtems_timer_service_routine Timer_Routine( rtems_id id, void *ignored ) LED_OFF(); #endif -#if defined(USE_TIMER_SERVER) - status = rtems_timer_server_fire_after( -#else status = rtems_timer_fire_after( -#endif id, - 2 * get_ticks_per_second(), + 2 * rtems_clock_get_ticks_per_second(), Timer_Routine, NULL ); @@ -63,17 +57,6 @@ rtems_task Init( LED_INIT(); -#if defined(USE_TIMER_SERVER) - status = rtems_timer_initiate_server( - 1, - RTEMS_MINIMUM_STACK_SIZE * 2, - RTEMS_DEFAULT_ATTRIBUTES - ); - - if ( status != RTEMS_SUCCESSFUL ) - fputs( "timer create server failed\n", stderr ); -#endif - status = rtems_timer_create(rtems_build_name( 'T', 'M', 'R', '1' ), &Timer1); if ( status != RTEMS_SUCCESSFUL ) fputs( "Timer1 create failed\n", stderr ); @@ -84,13 +67,11 @@ rtems_task Init( Timer_Routine(Timer1, NULL); - status = rtems_task_wake_after( get_ticks_per_second() ); + status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); Timer_Routine(Timer2, NULL); - #if defined(__LED_PRINTING) - while (1) { int _led_do_print; int _led_value; @@ -112,6 +93,7 @@ rtems_task Init( } } #endif + status = rtems_task_delete( RTEMS_SELF ); } @@ -122,9 +104,8 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER -#define CONFIGURE_MAXIMUM_TASKS 4 +#define CONFIGURE_MAXIMUM_TASKS 1 #define CONFIGURE_MAXIMUM_TIMERS 2 -#define CONFIGURE_MAXIMUM_SEMAPHORES 20 #define CONFIGURE_RTEMS_INIT_TASKS_TABLE diff --git a/led/timer_server/Makefile b/led/timer_server/Makefile new file mode 100644 index 0000000..cc809d2 --- /dev/null +++ b/led/timer_server/Makefile @@ -0,0 +1,27 @@ +# +# $Id$ +# + +# +# RTEMS_MAKEFILE_PATH is typically set in an environment variable +# + +PGM=${ARCH}/timer_server.exe + +# optional managers required +MANAGERS=all + +# C source names +CSRCS = init.c +COBJS = $(CSRCS:%.c=${ARCH}/%.o) + +include $(RTEMS_MAKEFILE_PATH)/Makefile.inc +include $(RTEMS_CUSTOM) +include $(PROJECT_ROOT)/make/leaf.cfg + +OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS) + +all: ${ARCH} $(PGM) + +$(PGM): $(OBJS) + $(make-exe) diff --git a/led/timer_server/init.c b/led/timer_server/init.c new file mode 100644 index 0000000..75bebe5 --- /dev/null +++ b/led/timer_server/init.c @@ -0,0 +1,125 @@ +/* + * COPYRIGHT (c) 1989-2007. + * 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 <stdio.h> +#include <bsp.h> + +#include "../led.h" + +rtems_id Timer1; +rtems_id Timer2; + +#if defined(__LED_PRINTING) +volatile int led_do_print; +volatile int led_value; +#endif + +rtems_timer_service_routine Timer_Routine( rtems_id id, void *ignored ) +{ + rtems_status_code status; + +#if defined(__LED_PRINTING) + if ( id == Timer1 ) + led_value = 1; + else + led_value = 0; + led_do_print = 1; +#else + if ( id == Timer1 ) + LED_ON(); + else + LED_OFF(); +#endif + + status = rtems_timer_server_fire_after( + id, + 2 * rtems_clock_get_ticks_per_second(), + Timer_Routine, + NULL + ); +} + +rtems_task Init( + rtems_task_argument argument +) +{ + rtems_status_code status; + + puts( "\n\n*** LED BLINKER -- timer_server ***" ); + + LED_INIT(); + + status = rtems_timer_initiate_server( + 1, + RTEMS_MINIMUM_STACK_SIZE * 2, + RTEMS_DEFAULT_ATTRIBUTES + ); + + if ( status != RTEMS_SUCCESSFUL ) + fputs( "timer create server failed\n", stderr ); + + status = rtems_timer_create(rtems_build_name( 'T', 'M', 'R', '1' ), &Timer1); + if ( status != RTEMS_SUCCESSFUL ) + fputs( "Timer1 create failed\n", stderr ); + + status = rtems_timer_create(rtems_build_name( 'T', 'M', 'R', '2' ), &Timer2); + if ( status != RTEMS_SUCCESSFUL ) + fputs( "Timer2 create failed\n", stderr ); + + Timer_Routine(Timer1, NULL); + + status = rtems_task_wake_after( rtems_clock_get_ticks_per_second() ); + + Timer_Routine(Timer2, NULL); + +#if defined(__LED_PRINTING) + while (1) { + int _led_do_print; + int _led_value; + + status = rtems_task_wake_after( 10 ); + + /* technically the following 4 statements are a critical section */ + _led_do_print = led_do_print; + _led_value = led_value; + led_do_print = 0; + led_value = 0; + + if ( _led_do_print ) { + if ( _led_value ) + LED_ON(); + else + LED_OFF(); + + } + } +#endif + + status = rtems_task_delete( RTEMS_SELF ); +} + + +/**************** START OF CONFIGURATION INFORMATION ****************/ + +#define CONFIGURE_INIT +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 2 +#define CONFIGURE_MAXIMUM_TIMERS 2 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_EXTRA_TASK_STACKS (3 * RTEMS_MINIMUM_STACK_SIZE) + +#include <rtems/confdefs.h> + +/**************** END OF CONFIGURATION INFORMATION ****************/ |