drake
1.0.0
|
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