[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: New user - timer problems



Richardson, Anthony wrote:
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.

You are probably using hello world as a starting point. Look in the Makefile for

# optional managers required
MANAGERS=io

and change io to "all"


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 );
}


--
Joel Sherrill, Ph.D.             Director of Research & Development
joel@OARcorp.com                 On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
   Support Available             (256) 722-9985