]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - src_marte/tests/test_non_local_jump/test_fosa_long_jump.c
Fixing license header
[frescor/fosa.git] / src_marte / tests / test_non_local_jump / test_fosa_long_jump.c
index 8848b61717136bcc66f9bb7c9717f679e9ae4d28..698a68c2058efb94f0b4b9cddfac480337395270 100644 (file)
@@ -1,12 +1,58 @@
-/*
-** testbench_long_jump.c
-** 
-** Made by (Miguel marciano)
-** Login   <miguel@namir.ctr.unican.es>
-** 
-** Started on  Fri Nov 23 11:42:09 2007 Miguel marciano
-** Last update Sun May 12 01:17:25 2002 Speed Blue
-*/
+// -----------------------------------------------------------------------
+//  Copyright (C) 2006 - 2008 FRESCOR consortium partners:
+//
+//    Universidad de Cantabria,              SPAIN
+//    University of York,                    UK
+//    Scuola Superiore Sant'Anna,            ITALY
+//    Kaiserslautern University,             GERMANY
+//    Univ. Politécnica  Valencia,           SPAIN
+//    Czech Technical University in Prague,  CZECH REPUBLIC
+//    ENEA                                   SWEDEN
+//    Thales Communication S.A.              FRANCE
+//    Visual Tools S.A.                      SPAIN
+//    Rapita Systems Ltd                     UK
+//    Evidence                               ITALY
+//
+//    See http://www.frescor.org for a link to partners' websites
+//
+//           FRESCOR project (FP6/2005/IST/5-034026) is funded
+//        in part by the European Union Sixth Framework Programme
+//        The European Union is not liable of any use that may be
+//        made of this code.
+//
+//
+//  based on previous work (FSF) done in the FIRST project
+//
+//   Copyright (C) 2005  Mälardalen University, SWEDEN
+//                       Scuola Superiore S.Anna, ITALY
+//                       Universidad de Cantabria, SPAIN
+//                       University of York, UK
+//
+//   FSF API web pages: http://marte.unican.es/fsf/docs
+//                      http://shark.sssup.it/contrib/first/docs/
+//
+//   This file is part of FOSA (Frsh Operating System Adaption)
+//
+//  FOSA is free software; you can redistribute it and/or modify it
+//  under terms of the GNU General Public License as published by the
+//  Free Software Foundation; either version 2, or (at your option) any
+//  later version.  FOSA is distributed in the hope that it will be
+//  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+//  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+//  General Public License for more details. You should have received a
+//  copy of the GNU General Public License along with FOSA; see file
+//  COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
+//  Cambridge, MA 02139, USA.
+//
+//  As a special exception, including FOSA header files in a file,
+//  instantiating FOSA generics or templates, or linking other files
+//  with FOSA objects to produce an executable application, does not
+//  by itself cause the resulting executable application to be covered
+//  by the GNU General Public License. This exception does not
+//  however invalidate any other reasons why the executable file might be
+//  covered by the GNU Public License.
+// -----------------------------------------------------------------------
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -14,7 +60,6 @@
 #include <time.h> // For clock_nanosleep
 
 #include "fosa.h"
-#include "timespec_operations.h"
 
 #include <misc/error_checks.h>
 
@@ -74,7 +119,8 @@ int main()
 
 static void *periodic_code(void *thread_arg)
 {
-    struct timespec period = {2, 500000000};  // 2.5 secs
+    fosa_rel_time_t period = fosa_msec_to_rel_time(2500);
+
     fosa_thread_id_t jump_handler_thread;
 
     fosa_signal_t jump_signal;
@@ -89,13 +135,13 @@ static void *periodic_code(void *thread_arg)
     memset(&clock_id, 0, sizeof(clock_id) );
     memset(&jump_timer, 0, sizeof(jump_timer) );
 
-    
+
     /* We install a long jump handler               */
     /* - This creates the thread that will wait for */
     /*   FOSA_JUMP_SIGNAL                           */
     /************************************************/
     CHK(  fosa_long_jump_install_handler(&jump_signal, &jump_handler_thread) );
-    
+
     /* We create a budget timer using the thread's CPU clock */
     /*                                                       */
     /* When the timer expires:                               */
@@ -106,20 +152,20 @@ static void *periodic_code(void *thread_arg)
     /*********************************************************/
     CHK(  fosa_thread_get_cputime_clock( fosa_thread_self(), &clock_id) );
     jump_signal_info.sival_ptr = &context;
-    CHK(  fosa_timer_create_with_receiver(clock_id, jump_signal, jump_signal_info, 
+    CHK(  fosa_timer_create_with_receiver(clock_id, jump_signal, jump_signal_info,
                                           &jump_timer, jump_handler_thread)  );
 
-    
+
     /* Periodic loop */
     /*****************/
     while (1)
     {
         int jumped = -1;
-        struct timespec budget = {1, 400000000};  // 1.4 secs
-        struct timespec activation_time = {-1, -1};
-        struct timespec old_activation_time = {-1, -1};
-
-
+        fosa_rel_time_t budget = fosa_msec_to_rel_time(1400);
+        fosa_abs_time_t activation_time;
+        struct timespec activation_time_tspec;
+        fosa_abs_time_t after_activation_time;
+        fosa_rel_time_t elapsed_time;
 
         jumped = 0;
 
@@ -132,7 +178,7 @@ static void *periodic_code(void *thread_arg)
         /************************************/
 
         /* We arm the jump_timer */
-        CHK(  fosa_timer_arm(jump_timer, false, &budget) );
+        CHK(  fosa_rel_timer_arm(jump_timer, &budget) );
 
         /* This is the point where the jump returns */
         CHK(  fosa_long_jump_save_context(&context) );
@@ -151,24 +197,25 @@ static void *periodic_code(void *thread_arg)
             printf("JUMPPPPPEEED\n");
         }
 
-        
+
         /* End of interruptible work */
         /*****************************/
 
         printf("After interruptible block\n");
-        
+
         /* Now we measure the time duration of the block */
         /*************************************************/
-        CHK(  fosa_clock_get_time(FOSA_CLOCK_REALTIME, &old_activation_time)  );
-        decr_timespec(&old_activation_time, &activation_time);
-        printf("Execution time: %6.3f\n", t2d(old_activation_time) );
-    
+        CHK(  fosa_clock_get_time(FOSA_CLOCK_REALTIME, &after_activation_time)  );
+        elapsed_time = fosa_abs_time_extract_interval(activation_time, after_activation_time);
+        printf("Execution time: %ld msec\n", fosa_rel_time_to_msec(after_activation_time) );
+
         /* And we program the next loop */
-        incr_timespec(&activation_time, &period);
-        clock_nanosleep(FOSA_CLOCK_REALTIME, TIMER_ABSTIME, &activation_time,
-                        &old_activation_time);
+        activation_time = fosa_abs_time_incr(activation_time, period);
+        activation_time_tspec = fosa_abs_time_to_timespec(activation_time);
+        clock_nanosleep(FOSA_CLOCK_REALTIME, TIMER_ABSTIME, &activation_time_tspec,
+                        NULL);
     }
-        
+
     return NULL;
 }
 
@@ -178,7 +225,7 @@ static void *periodic_code(void *thread_arg)
 static void work_under_a_interruptible_budget()
 {
     static int i = 0;
-    struct timespec exec_time = {1, 0};  // 1 seg
+    fosa_rel_time_t exec_time = fosa_msec_to_rel_time(1000); // 1 sec
 
     i++;
     printf("Start regular work\n");
@@ -197,5 +244,5 @@ static void work_under_a_interruptible_budget()
     }
 
     printf("End regular work\n");
-    
+
 }