po_hi_utils.h 2.69 KB
Newer Older
1
2
3
4
5
6
7
8
/*
 * 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.
 *
 * For more informations, please visit http://ocarina.enst.fr
 *
 * Copyright (C) 2007-2009, GET-Telecom Paris.
jdelange's avatar
jdelange committed
9
 * Copyright (C) 2010-2012, European Space Agency.
10
11
12
13
14
15
16
17
18
19
20
21
 */

#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.
 */
22
int __po_hi_simulate_wcet (const __po_hi_time_t* time1, const __po_hi_time_t* time2);
23
24
25
26
27

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


unsigned long __po_hi_swap_byte (unsigned long value);
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
62

#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
63
         write (__po_hi_vcd_file, buf, size_to_write);\
64
65
66
\
         memset (buf, '\0', 1024); \
         size_to_write = sprintf (buf, s, ##args); \
jdelange's avatar
jdelange committed
67
         write (__po_hi_vcd_file, buf, size_to_write);  \
68
69
70
71
72
73
74
75
76
77
      }                                                   \
      pthread_mutex_unlock (&__po_hi_vcd_mutex); \
   }
#else
   #define __PO_HI_INSTRUMENTATION_VCD_WRITE(s, args...)
   #define __PO_HI_INSTRUMENTATION_VCD_INIT
#endif



78
#endif /* __PO_HI_UTILS_H__ */