From 7235ace10fff01827b9ca986157bee7a1ad9ae09 Mon Sep 17 00:00:00 2001 From: Blinningjr <nicke.l@telia.com> Date: Mon, 11 Jan 2021 14:35:58 +0100 Subject: [PATCH] Added schedulable output variable --- srp_analysis/example/output1.txt | 3 ++- srp_analysis/src/formater.rs | 13 +++++++++---- srp_analysis/src/srp_analyser.rs | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/srp_analysis/example/output1.txt b/srp_analysis/example/output1.txt index 37e15d9..14909e6 100644 --- a/srp_analysis/example/output1.txt +++ b/srp_analysis/example/output1.txt @@ -1,7 +1,8 @@ Overview + Schedulable: No Total Util: 0.85 Tasks: T1 T2 T3 - Priority: P(R1) = 2 P(T2) = 2 P(T1) = 1 P(R2) = 3 P(T3) = 3 + Priority: P(R1) = 2 P(T1) = 1 P(T2) = 2 P(R2) = 3 P(T3) = 3 Task Resources: T2:( R1 R2 ) T3:( R2 ) Analysis of T1 diff --git a/srp_analysis/src/formater.rs b/srp_analysis/src/formater.rs index a88491d..06468eb 100644 --- a/srp_analysis/src/formater.rs +++ b/srp_analysis/src/formater.rs @@ -6,7 +6,7 @@ use super::srp_analyser::*; * Creates a readable representation of the analysis and the given information. */ pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String { - let overview = format_overview(tasks, ip, tr); + let overview = format_overview(tasks, ip, tr, analysis); let mut body = String::new(); for at in analysis { @@ -26,7 +26,7 @@ pub fn format_analysis(analysis: &Vec<AnalysedTask>, tasks: &Tasks, ip: &IdPrio, /* * Creates the overview section of the readable representation. */ -pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String { +pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources, atasks: &Vec<AnalysedTask>) -> String { // Formats the names of all the tasks. fn format_task_names(tasks: &Tasks) -> String { let mut task_names = "Tasks:".to_string(); @@ -60,13 +60,18 @@ pub fn format_overview(tasks: &Tasks, ip: &IdPrio, tr: &TaskResources) -> String } return task_res; } + let ltot = total_load_factor(tasks); - let tot_util = format!("Total Util: {}", total_load_factor(tasks)); + let schedulable = format!("Schedulable: {}", match schedulable(ltot, atasks) { + true => "Yes", + false => "No", + }); + let tot_util = format!("Total Util: {}", ltot); let task_names = format_task_names(tasks); let id_prio = format_id_prio(ip); let task_res = format_task_res(tr); - return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}", tot_util, task_names, id_prio, task_res); + return format!("Overview\n\t{}\n\t{}\n\t{}\n\t{}\n\t{}", schedulable, tot_util, task_names, id_prio, task_res); } diff --git a/srp_analysis/src/srp_analyser.rs b/srp_analysis/src/srp_analyser.rs index 3251f6d..440daf5 100644 --- a/srp_analysis/src/srp_analyser.rs +++ b/srp_analysis/src/srp_analyser.rs @@ -175,6 +175,23 @@ pub fn interference_time(task: &Task, tasks: &Tasks, ip: &IdPrio, tr: &TaskResou } +/* + * Calculate if it is schedulable. + */ +pub fn schedulable(ltot: f32, atasks: &Vec<AnalysedTask>) -> bool { + if ltot >= 1.0 { + return false; + } + + for at in atasks { + if at.response_time >= at.task.deadline { + return false; + } + } + return true; +} + + /* * Analyse tasks. * -- GitLab