drake  1.0.0
include/drake/schedule.h
Go to the documentation of this file.
00001 /*
00002  Copyright 2015 Nicolas Melot
00003 
00004  This file is part of Drake.
00005 
00006  Drake is free software: you can redistribute it and/or modify
00007  it under the terms of the GNU General Public License as published by
00008  the Free Software Foundation, either version 3 of the License, or
00009  (at your option) any later version.
00010 
00011  Drake is distributed in the hope that it will be useful,
00012  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014  GNU General Public License for more details.
00015 
00016  You should have received a copy of the GNU General Public License
00017  along with Drake. If not, see <http://www.gnu.org/licenses/>.
00018 
00019 */
00020 
00021 
00022 #include <drake/task.h>
00023 
00024 
00025 #ifndef DRAKE_SCHEDULE_H
00026 #define DRAKE_SCHEDULE_H
00027 
00029 typedef struct {
00031         size_t id;
00033         double start_time;
00035         double frequency;
00036 } drake_schedule_task_t;
00037 
00039 typedef struct {
00041         size_t core_number;
00043         size_t task_number;
00045         char **task_name;
00046         double *task_workload;
00048         double stage_time;
00050         size_t *tasks_in_core;
00052         size_t *consumers_in_core;
00054         size_t *producers_in_core;
00056         size_t *consumers_in_task;
00058         size_t *producers_in_task;
00060         size_t **consumers_id;
00061         char ***consumers_name;
00063         size_t **producers_id;
00064         size_t **producers_rate;
00065         size_t **consumers_rate;
00066         char ***producers_name;
00068         size_t *remote_consumers_in_task;
00070         size_t *remote_producers_in_task;
00072         drake_schedule_task_t **schedule;
00073 } drake_schedule_t;
00074 
00075 #endif
00076 
00077 #if defined APPLICATION && PELIB_CONCAT_2(DONE_, APPLICATION) == 0
00078 
00079 #define drake_function PELIB_##CONCAT_2(drake_function_, APPLICATION)
00080 #define drake_schedule_init PELIB_##CONCAT_2(drake_schedule_init_, APPLICATION)
00081 #define drake_schedule_destroy PELIB_##CONCAT_2(drake_schedule_destroy_, APPLICATION)
00082 #define drake_task_number PELIB_##CONCAT_2(drake_task_number_, APPLICATION)
00083 #define drake_task_name PELIB_##CONCAT_2(drake_task_name_, APPLICATION)
00084 
00085 size_t drake_core_id(task_tp task);
00086 size_t drake_task_width(task_tp task);
00088 void* drake_function(size_t id, task_status_t state);
00090 void drake_schedule_init(drake_schedule_t*);
00092 void drake_schedule_destroy(drake_schedule_t*);
00094 int drake_task_number();
00096 char* drake_task_name(size_t);
00097 #else
00098 #define drake_function(application) PELIB_##CONCAT_2(drake_function_, application)
00099 #define drake_schedule_init(application) PELIB_##CONCAT_2(drake_schedule_init_, application)
00100 #define drake_schedule_destroy(application) PELIB_##CONCAT_2(drake_schedule_destroy_, application)
00101 #define drake_task_number(application) PELIB_##CONCAT_2(drake_task_number_, application)
00102 #define drake_task_name(application) PELIB_##CONCAT_2(drake_task_name_, application)
00103 #endif
00104