po_hi_utils.h 2.67 KB
Newer Older
1 2 3 4 5
/*
 * This is a part of PolyORB-HI-C distribution, a minimal
 * middleware written for generated code from AADL models.
 * You should use it with the Ocarina toolsuite.
 *
jhugues's avatar
jhugues committed
6
 * For more informations, please visit http://assert-project.net/taste
7
 *
jhugues's avatar
jhugues committed
8
 * Copyright (C) 2007-2009 Telecom ParisTech, 2010-2012 ESA & ISAE.
9 10 11 12 13 14 15 16 17 18 19 20
 */

#ifndef __PO_HI_UTILS_H__
#define __PO_HI_UTILS_H__

#include <po_hi_time.h>
#include <po_hi_types.h>

/*
 * Simulate the WCET of the task. It enters an infinite loop during a
 * random period chosen from the first and second argument.
 */
21
int __po_hi_simulate_wcet (const __po_hi_time_t* time1, const __po_hi_time_t* time2);
22 23 24 25 26

/*
 * Take a rate as argument, returns the probability that we meet this rate.
 */
int __po_hi_compute_miss (__po_hi_uint8_t rate);
27 28 29


unsigned long __po_hi_swap_byte (unsigned long value);
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

#ifdef __PO_HI_USE_VCD
#include <pthread.h>
#include <string.h>

void __po_hi_instrumentation_vcd_init (void);

#define __PO_HI_INSTRUMENTATION_VCD_INIT __po_hi_instrumentation_vcd_init ();

#define __PO_HI_INSTRUMENTATION_VCD_WRITE(s, args...)                 \
   {                                                       \
 \
      extern int               __po_hi_vcd_file; \
      extern int               __po_hi_vcd_init;\
      extern __po_hi_time_t    __po_hi_vcd_start_time; \
      extern pthread_mutex_t   __po_hi_vcd_mutex; \
      __po_hi_time_t           __po_hi_vcd_current_time; \
      char                    buf[1024]; \
      int                     size_to_write = 0; \
      uint64_t                st,ct,et = 0; \
      \
      pthread_mutex_lock (&__po_hi_vcd_mutex); \
      \
      if (__po_hi_get_time(&__po_hi_vcd_current_time) != __PO_HI_SUCCESS)        \
      {                                                   \
         __DEBUGMSG("[POHIC-INSTRUMENTATION] Could not retrieve time\n");      \
      }                                                   \
      else                                                \
      {                                                   \
         st = __PO_HI_TIME_TO_US(__po_hi_vcd_start_time); ct = __PO_HI_TIME_TO_US(__po_hi_vcd_current_time); et = ct - st ; \
         memset (buf, '\0', 1024); \
         size_to_write = sprintf (buf, "#%llu\n", et); \
jdelange's avatar
jdelange committed
62
         write (__po_hi_vcd_file, buf, size_to_write);\
63 64 65
\
         memset (buf, '\0', 1024); \
         size_to_write = sprintf (buf, s, ##args); \
jdelange's avatar
jdelange committed
66
         write (__po_hi_vcd_file, buf, size_to_write);  \
67 68 69 70 71 72 73 74 75 76
      }                                                   \
      pthread_mutex_unlock (&__po_hi_vcd_mutex); \
   }
#else
   #define __PO_HI_INSTRUMENTATION_VCD_WRITE(s, args...)
   #define __PO_HI_INSTRUMENTATION_VCD_INIT
#endif



77
#endif /* __PO_HI_UTILS_H__ */