diff options
author | Jeremy Erickson <jerickso@cs.unc.edu> | 2013-05-02 17:21:47 -0400 |
---|---|---|
committer | Jeremy Erickson <jerickso@cs.unc.edu> | 2013-05-02 17:21:47 -0400 |
commit | ece0c6e7b111f2761066b66ea1b34cb2854b3752 (patch) | |
tree | addbd65616d41d1d367d6a2f588ec14bcbc9343a /src/task.c | |
parent | 82ad501859febc4285882d8268982a21c40e84d9 (diff) |
Add library support for creating EDF-os tasks
Diffstat (limited to 'src/task.c')
-rw-r--r-- | src/task.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -71,6 +71,36 @@ int __create_rt_task_edffm(rt_fn_t rt_prog, void *arg, int cpu, int wcet, | |||
71 | (rt_setup_fn_t) set_rt_task_param, ¶ms); | 71 | (rt_setup_fn_t) set_rt_task_param, ¶ms); |
72 | } | 72 | } |
73 | 73 | ||
74 | int __create_rt_task_edfos(rt_fn_t rt_prog, void *arg, int wcet, | ||
75 | int period, lt_t fracs[][2], task_class_t class) | ||
76 | { | ||
77 | struct rt_task params; | ||
78 | struct edfos_params os; | ||
79 | int i; | ||
80 | params.period = period; | ||
81 | params.exec_cost = wcet; | ||
82 | params.cls = class; | ||
83 | params.phase = 0; | ||
84 | /* enforce budget for tasks that might not use sleep_next_period() */ | ||
85 | params.budget_policy = QUANTUM_ENFORCEMENT; | ||
86 | |||
87 | os.migrat = 0; | ||
88 | os.first_cpu = UINT_MAX; | ||
89 | for (i = 0; i < NR_CPUS; i++) { | ||
90 | if (fracs[i][0] > 0) { | ||
91 | os.migrat++; | ||
92 | if (os.first_cpu == UINT_MAX) | ||
93 | os.first_cpu = i; | ||
94 | } | ||
95 | os.fraction[i][0] = fracs[i][0]; | ||
96 | os.fraction[i][1] = fracs[i][1]; | ||
97 | } | ||
98 | params.semi_part.os = os; | ||
99 | |||
100 | return __launch_rt_task(rt_prog, arg, | ||
101 | (rt_setup_fn_t) set_rt_task_param, ¶ms); | ||
102 | } | ||
103 | |||
74 | int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet, | 104 | int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet, |
75 | int period, int npsf_id, task_class_t class) | 105 | int period, int npsf_id, task_class_t class) |
76 | { | 106 | { |