Interrupt latency in RTEMS (Zedboard)

BRIARD Sebastien sebastien.briard at thalesaleniaspace.com
Tue Mar 27 13:05:17 UTC 2018


Okay, I realized how I was confusing clock tick (for timekeeping) and interrupt latency and why the result were not the ones I expected.
I still have one question, is there a macro to choose/impose the processor frequency ?

-----Message d'origine-----
De : BRIARD Sebastien 
Envoyé : mardi 27 mars 2018 14:33
À : 'Sebastian Huber'; users at rtems.org
Objet : RE: Interrupt latency in RTEMS (Zedboard)

I am using the expiration of a timer. And basically I am doing two things:
-  I keep measuring time in my main loop
- when I am in the handler I take a new measure of the time.

It was a quick, not so rigorous test, with global variables. 

Here is the code : 
// Global variable for tests //
volatile bool signal_sent;
rtems_interval lat=0 ;
rtems_id main_task;

//handler //
rtems_timer_service_routine test_signal_from_isr(rtems_id  timer, void     *arg)
{
  rtems_interval *rag = (rtems_interval*)arg ;
  lat = rtems_clock_get_uptime_nanoseconds() - *rag ;
  signal_sent = TRUE;
}

// main task //
rtems_task Init(  rtems_task_argument argument) {
  rtems_status_code     status;
  rtems_id              timer;
  rtems_interval now;

  // index to repeat test //
  int i = 0 ;
  main_task = rtems_task_self();
  printf("ticks per seconds : %02ld \n",rtems_clock_get_ticks_per_second()) ;
  
  /*
   *  Timer used in multiple ways
   */
  status = rtems_timer_create( 1, &timer );
  assert( status == RTEMS_SUCCESSFUL );
  
  while(i<10)
  {
  /*
   * Test Signal from ISR
   */
  signal_sent = FALSE;

  status = rtems_timer_fire_after( timer, 20, test_signal_from_isr, (void*) &now );
  assert( status == RTEMS_SUCCESSFUL );

  while (1) {
    now = rtems_clock_get_uptime_nanoseconds() ;
    if ( signal_sent )
      break;
  }
  printf(" interrupt latency : %ld ns \n",lat) ;
  puts( "Signal sent from ISR has been processed" );
  i++;
  }
  puts( "*** END OF SIGNAL FROM TSR TEST ***" );
  exit( 0 ); // generera un RTEMS fatal
}

/* configuration information */
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER

#define CONFIGURE_MICROSECONDS_PER_TICK	  1

#define CONFIGURE_RTEMS_INIT_TASKS_TABLE

#define CONFIGURE_MAXIMUM_TASKS             1
#define CONFIGURE_MAXIMUM_TIMERS            1

#define CONFIGURE_INIT
#include <rtems/confdefs.h>

-----Message d'origine-----
De : Sebastian Huber [mailto:sebastian.huber at embedded-brains.de]
Envoyé : mardi 27 mars 2018 14:20
À : BRIARD Sebastien; users at rtems.org
Objet : Re: Interrupt latency in RTEMS (Zedboard)

Hello Sebastien,

could you give a code example how you measure the interrupt latency? 
Which interrupt do you use?

The time keeping is independent of the clock tick configuration.

--
Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.




More information about the users mailing list