From ece0c6e7b111f2761066b66ea1b34cb2854b3752 Mon Sep 17 00:00:00 2001 From: Jeremy Erickson Date: Thu, 2 May 2013 17:21:47 -0400 Subject: Add library support for creating EDF-os tasks --- src/task.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/task.c') diff --git a/src/task.c b/src/task.c index daf95ca..e618d9e 100644 --- a/src/task.c +++ b/src/task.c @@ -71,6 +71,36 @@ int __create_rt_task_edffm(rt_fn_t rt_prog, void *arg, int cpu, int wcet, (rt_setup_fn_t) set_rt_task_param, ¶ms); } +int __create_rt_task_edfos(rt_fn_t rt_prog, void *arg, int wcet, + int period, lt_t fracs[][2], task_class_t class) +{ + struct rt_task params; + struct edfos_params os; + int i; + params.period = period; + params.exec_cost = wcet; + params.cls = class; + params.phase = 0; + /* enforce budget for tasks that might not use sleep_next_period() */ + params.budget_policy = QUANTUM_ENFORCEMENT; + + os.migrat = 0; + os.first_cpu = UINT_MAX; + for (i = 0; i < NR_CPUS; i++) { + if (fracs[i][0] > 0) { + os.migrat++; + if (os.first_cpu == UINT_MAX) + os.first_cpu = i; + } + os.fraction[i][0] = fracs[i][0]; + os.fraction[i][1] = fracs[i][1]; + } + params.semi_part.os = os; + + return __launch_rt_task(rt_prog, arg, + (rt_setup_fn_t) set_rt_task_param, ¶ms); +} + int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, int npsf_id, task_class_t class) { -- cgit v1.2.2