New user - timer problems
Richardson, Anthony
ar63 at evansville.edu
Mon Feb 21 14:57:00 UTC 2005
I think I am missing something fundamental with regard to
the use of timers. Calls to rtems_timer_create() and
rtems_timer_initiate_server() return a status of
RTEMS_NOT_CONFIGURED. If I ignore the error returns
everything seems to work ok, but I'm concerned I'm not
configuring something that I should be.
A complete, simple test case is included below. The
#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
lines don't seem to help. I threw them in when
trying to get rid of the error.
I'm using RTEMS 4.6.2 on the PC.
Thanks,
Tony Richardson
===========================================================
#include <bsp.h>
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_TASKS 3
#define CONFIGURE_MAXIMUM_TIMERS 1
#define CONFIGURE_MAXIMUM_SEMAPHORES 1
#define CONFIGURE_INIT
rtems_task Init(rtems_task_argument arg);
#include <confdefs.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
rtems_id sem_id;
rtems_id tim_id;
rtems_timer_service_routine my_timer(rtems_id timer, void *arg)
{
// We just need to release the semaphore
rtems_semaphore_release(sem_id);
}
rtems_task Init(rtems_task_argument ignored)
{
rtems_status_code status;
// Create semaphore, initially it should be unavailable
rtems_semaphore_create(
rtems_build_name('S','M','0','1'),
0,
RTEMS_SIMPLE_BINARY_SEMAPHORE,
0,
&sem_id);
status = rtems_timer_create(
rtems_build_name('T','M','0','1'),
&tim_id);
// timer_create seems to always return an RTEMS_NOT_CONFIGURED error
// but works never-the-less.
printf("status = %d\n", status);
if (status != RTEMS_SUCCESSFUL && status != RTEMS_NOT_CONFIGURED) {
printf("Error creating timer 1\n");
exit(0);
}
rtems_timer_initiate_server(
RTEMS_TIMER_SERVER_DEFAULT_PRIORITY,
RTEMS_MINIMUM_STACK_SIZE,
RTEMS_DEFAULT_ATTRIBUTES);
printf("status = %d\n", status);
if (status != RTEMS_SUCCESSFUL && status != RTEMS_NOT_CONFIGURED) {
printf("Error creating timer 1\n");
exit(0);
}
printf("Entering application loop ...\n");
while(1) {
printf("Hello world!\n");
// fire timer
rtems_timer_server_fire_after(
tim_id,
5000/rtems_configuration_get_milliseconds_per_tick(),
my_timer,
(void *)NULL);
// wait for the semaphore, it is released by the timer
rtems_semaphore_obtain(sem_id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
}
exit( 0 );
}
More information about the users
mailing list