-/*
-** 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>
#include <time.h> // For clock_nanosleep
#include "fosa.h"
-#include "timespec_operations.h"
#include <misc/error_checks.h>
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;
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: */
/*********************************************************/
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;
/************************************/
/* 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) );
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;
}
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");
}
printf("End regular work\n");
-
+
}